类:
类是一种数据结构,它可以包含数据成员(常数和字段)、函数成员(方法、属性、事件、索引器、运算符实例、构造函数静态构造函数和析构函数),以及嵌套类型。类类型支持继承,继承是一种机制,它使派生类可以对基类进行扩展和专用化。
1、 类声明:
属性(可选) 类修饰符(可选)class 标示符 类基(可选) 类体(可选);
2、类修饰符:
类声明可以根据需要包括一个类修饰符序列:
class-modifier(类修饰符):
new
public
protected
internal
private
abstract
sealed
new修饰符适用于嵌套类。它表示所修饰的类会把继承下来的同名成员隐藏起来。
3、抽象类:
abstract:修饰符用于表示所修饰的类是不完整的,并且它只能用做基类。抽象类与非抽象类不同点如下:
抽象类不能直接实例化,并且对抽象类使用new运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
允许抽象类包含抽象成员
抽象类不能被密封
4、密封类:
sealed修饰符用于防止从所修饰的类派生出其他类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。
密封类不能同时为抽象类。
sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体而言,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。
5、基类规范:
类声明可以包含基类规范,它定义该类的直接基类和由该类实现的接口。
class-base:(基类:)
:class-type(:类类型)
:interface-type-list(:接口类型列表)
6、基类:
当类类型包含在类基中时,表示该类就是所声明的类的直接基类。如果类声明中没有基类,或所含有的类基只列出接口类型,就假定直接基类就是object,类会从它的直接基类继承成员。
类类型的直接基类不能是下列类型:System.Array, System.Delegate, System.Enum, System.ValueType。
类的基类包括它的直接基类及该直接基类的基类。
除了类object,每个类有且只有一个直接基类。object类没有任何直接基类,并且是所有其他类的终极基类。
7、接口实现:
类基规范中可以包含接口类型列表,这表示所声明的类实现所列出的各个接口类型。
8、类体:
类体用于定义该类的成员。
class-body:(类体)
{ class-member-declarationsopt }( {类成员声明可选})
9、类成员:
类成员有两部分组成:有它的类成员声明引入的成员;从它的直接基类继承来的成员
class-member-declarations:(类成员声明:)
constant-declaration:(常数声明:)
field-declaration:
method-declaration:
property-declaration:
event-declaration:
indexer-declaration:
operator-declaration:
constructor-declaration:
destructor-declaration:
static-constructor-declaration:
type-declaration: