静态成员可以在类的实例之间共享,可以把它看做是类的全局变量。静态属性和静态字段可以访问独立于任何对象实例的数据,静态方法可以执行与对象类型相关、但与类型实例无关的命令,在使用静态成员时,可以不用实例化对象。
静态类当我们希望类只包含静态成员,且不能用于实例化对象时,一种简单的方法是使用静态类(如Console),而不是把构造函数设置为private。静态类只包含静态成员,不需要实例构造函数,可以有一个静态的构造函数。
接口是把特定的公共方法和属性组合起来,以封装特定功能的一个集合,用于需要接口定义功能的类来实现它。接口不能单独存在,不能实例化接口。接口不能包含其成员的实现代码,只能定义成员。实现过程必须在实现接口的类中实现。
继承C#和Java都是单继承,被继承的类称为基类,派生类不能访问基类的private成员,可以访问public和protected成员。基类的成员可以是虚拟的,在派生类中可以重写它。类可以是密封的(sealed),密封类不能被继承。C#中所有对象有共同的基类object
多态性同样的指令对于不同的对象会有不同的反应,这就是多态。多态性是因为继承产生的,继承导致子类和父类之间有方法和属性之间的重叠,可以使用相同的语法处理从同一基类实例化的对象。派生类实例的对象可以直接赋值给基类对象,不需要进行类型转换,然后基类对象可以调用派生类的成员,但不能调用除子类自己定义的方法。接口也有多态性。
internal修饰的类只能在当前项目的代码中才可以访问它。
abstract修饰的类不能实例化,只能继承。sealed修饰的类只能实例化,不能继承。一个类只能有一个基类,如果继承了抽象类,就必须实现所继承的所有抽象成员(除非派生类也是抽象的)。编译器不允许派生类的可访问性比其基类还高。abstract和sealed关键字不允许在接口中使用。接口没有继承object。
接口和抽象类 都可以被继承,都不能被实例化,但可以申明变量。派生类只能继承一个抽象类,但可以使用多个接口。抽象类可以有抽象成员和非抽象成员(有代码体,也可以是虚拟的,这样可以在派生类中重写)。接口成员都必须在使用接口的类上实现。接口不能包含字段、构造函数、析构函数、静态成员或常量。