静态类和静态方法,抽象类和抽象方法,new关键字,值类型和引用类型,接口

静态类和静态方法:静态成员是与类相关,而非实例相关;普通类中的静态成员:1.只能通过类名访问。2.静态方法中只能访问静态成员,或通过对象访问实例成员。3.多个对象共享同一个成员。静态类(一般用作工具类):1.Math,console等都是静态类。2.静态类中只能包含静态成员。注意:少使用静态类,静态类、静态成员所分配的内存在程序退出时才会释放。静态类的本质abstract(不能被实例化)+sealed(不能被继承)。

多态:多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征。多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。实现多态的方式:virtual,abstract,接口。
 
抽象类:抽象类不能被实例化。抽象类中可以有普通成员。抽象类存在的意义:1.抽象类不能被实例化,只能被其他类继承2.继承抽象类的子类必须把抽象类中的所有抽象成员都重写(实现)(除非子类也是抽象类。)3.抽象类就是为了重写→多态(代码重用)。4.抽象类中可以有实例成员也可以有抽象成员。
 
抽象类的例子:计算形状Shape(圆Circle,矩形Square ,正方形Rectangle)的面积、周长。
复制代码
class Program
    {
        #region 计算形状Shape(圆Circle,矩形Square?,正方形Rectangle)的面积、周长


        #endregion
        static void Main(string[] args)
        {
            Circle c = new Circle(3);
            double circleArea = c.area();
            Console.WriteLine(circleArea );
            Square s = new Square(4,3);
            double squareArea = s.area();
            Console.WriteLine(squareArea);
            Rectangle r = new Rectangle(5);
            double rectangelArea = r.area();
            Console.WriteLine(rectangelArea);
            Console.ReadKey();
        }
    }
    /// <summary>
    /// 形状的抽象类
    /// </summary>
    public abstract class Shape
    {
        public abstract double area();
        public abstract double circumference();
    }
    /// <summary>
    /// 圆形类,继承自形状类,重写抽象方法
    /// </summary>
    public class Circle : Shape
    {
        public Circle(double radius)
        {
            this.radius = radius;
        }
        double radius;

        public double Radius
        {
            get { return radius; }
            set { radius = value; }
        }
        public override double area()
        {
            return Math.PI * this.Radius * this.Radius;
        }

        public override double circumference()
        {
            return 2 * Math.PI * this.Radius;
        }
    }
    /// <summary>
    /// 矩形类,继承自形状类,重写抽象方法
    /// </summary>
    public class Square : Shape
    {
        public Square(double length, double width)
        {
            this.length = length;
            this.width = width;
        }
        double length;

        public double Length
        {
            get { return length; }
            set { length = value; }
        }
        double width;

        public double Width
        {
            get { return width; }
            set { width = value; }
        }

        public override double area()
        {
            return this.Width * this.Length;
        }

        public override double circumference()
        {
            return 2 * (this.Width + this.Length);
        }
    }
    /// <summary>
    /// 正方形类,继承自形状类,重写抽象方法
    /// </summary>
    public class Rectangle : Shape
    {
        public Rectangle(double l)
        {
            this.length = l;
        }
        double length;

        public double Length
        {
            get { return length; }
            set { length = value; }
        }

        public override double area()
        {
            return Length * Length;
        }

        public override double circumference()
        {
            return 4 * Length;
        }
    }
复制代码

虚方法与抽象方法:

虚方法:

•1.父类中必须有实现。
•2.子类中可以不重写。
•3.虚方法可以在普通类中。(有序方法的类是可以(可能)被实例化的。)
抽象方法:
 
•1.父类中不能有任何实现。
•2.子类中必须重写(除非:子类也是一个抽象类。)
•3.抽象方法必须在抽象类中。
 
值类型与引用类型:值类型均隐式派生自System.ValueType:数值类型、bool、结构、枚举。引用类型派生自System.Object:字符串、数组、类、接口等。引用类型变量的赋值只复制对对象的引用。值类型变量赋值会拷贝一个副本。
 
接口:接口的例子:
复制代码
class Program
    {
        #region 橡皮rubber鸭子、木wood鸭子、真实的鸭子realduck。三个鸭子都会游泳,而橡皮鸭子和真实的鸭子都会叫,只是叫声不一样,橡皮鸭子“唧唧”叫,真实地鸭子“嘎嘎”叫,木鸭子不会叫.把抽象类变成接口。

        
        #endregion
        static void Main(string[] args)
        {
            Ibark realduck = new RealDuck();
            //realduck.bark();
            Bark(realduck);
            Console.ReadKey();
        }
        public static void   Bark(Ibark bark)
        {
            bark.bark();
        }
    }
    interface Ibark
    {
        void bark();
    }
    interface Iswim
    {
        void swim();
    }
    public class RubberDuck:Iswim ,Ibark 
    {

        public void swim()
        {
            Console.WriteLine("橡皮鸭会游泳");
        }

        public void bark()
        {
            Console.WriteLine("唧唧");
        }
    }
    public class WoodDuck : Iswim
    {

        public void swim()
        {
            Console.WriteLine("我是木鸭,我只会游泳不会叫");
        }
    }
    public class RealDuck : Iswim, Ibark
    {

        public void swim()
        {
            Console.WriteLine("我是真鸭子,我会游泳");
        }

        public void bark()
        {
            Console.WriteLine("嘎嘎,我会叫");
        }
    }
复制代码

接口特点总结:

1.接口是一种规范。为了多态。
2.接口不能被实例化。
3.接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改。(默认为public)
4.接口中的成员不能有任何实现。
5.接口中只能有方法、属性、索引器、事件,不能有“字段”。
6.接口与接口之间可以继承,并且可以多继承。
7.实现接口的子类必须实现该接口的全部成员。
8.一个类可以同时继承一个类并实现多个接口。
9.当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract。(抽象类也能实现接口,用abstrac标记)
10.“显示实现接口”,只能通过接口变量来调用(因为显示实现接口后成员为private)。
原文地址:https://www.cnblogs.com/alsw/p/3240513.html