8.1 实例构造器和类(引用类型)
构造器是将类型实例初始化为良好状态的一种特殊方法。.ctor->constructor
创建引用类型的实例过程:
为实例的数据字段分配内存 => 初始化对象的附加字段(类型对象指针、同步块索引) => 调用类型的实例构造器来设置对象的初始状态
实例构造器不能被继承,所以不能将这些修饰符应用于构造器:virtual、new、override、sealed、abstract。
没有显示定义构造器,C#编译器会默认给一个无参的构造器。在它的实现中,只是简单调用基类的无参构造器。
•类的修饰符为abstract,编译器生成的默认构造器的可访问性为protected,否则构造器会被赋予public可访问性。
•类的修饰符为static(sealed和abstract),编译器不会在类的定义中生成一个默认构造器。
•如果基类没有提供无参构造器,那么派生类必须显式调用一个基类的构造器,否则编译器会报错。
一个类型可以定义多个实例构造器,每个构造器必须有不同的签名,每个构造器可以有不同的可访问性。(签名:返回值+参数)
类的实例构造器在访问从基类继承的任何字段之前,必须先调用基类的构造器。如果派生类的构造器没有显示调用一个基类构造器,C#编译器会自动生成对默认的基类构造器的调用。最终,System.Object的公共无参构造器会得到调用,该构造器什么都不做直接返回,因为System.Object没有定义实例数据字段,所以它的构造器无事可做。