1、类的构造函数
类的构造函数是在创建给定类型的对象时执行的类方法。构造函数具有与类相同的名称,它通常初始化新对象的数据成员。构造函数因修饰符的不同可以分为三种:普通构造函数、私有构造函数、静态构造函数。
如果非静态类没有定义构造函数,则C# 编译器将提供一个不带参数的构造函数称为“默认构造函数”,且该构造函数为普通构造函数。
普通构造函数:用于使用new运算符来实例化一个类对象时,在为新对象分配内存之后,new 运算符立即调用构造函数。
私有构造函数:可阻止类被实例化。
静态构造函数:用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。
2、构造函数的继承
派生类在定义构造函数时,可以使用关键字:base(??)或:this(??)。如没有显示的使用:base(??)或:this(??),则默认为:base()。
base关键字用于调用的基类构造函数;this关键字用于引用派生类本身的构造函数。
如果基类有私有构造函数,且修饰符是priavte,则派生类无法使用:base(??)来继承,只能使用基类其他的构造函数使用:this(??)来引用。可用来对某些构造函数进行封装。
如果基类有静态构造函数,则该静态构造函数无法被派生类继承。
构造函数的执行顺序为:先从派生类--基类--System.Object的逆推上去,然后再从System.Object--基类--派生类的执行,
如果在继承时显式的使用:base(??),则执行引用的基类构造函数。
如果在继承时显式的使用:this(??),则先执行引用的构造函数,再执行引用构造函数调用的基类构造函数。
如果在逆推时不成功,则C# 编译器会报错。
例:
class A
{
public A(String Str)
{
Name = Str;
}
public String Name = "";
}
class B : A
{
public B(String Str)
{
}
}
B B1 = new B();
逆推: B(String Str)--(默认继承自:base())--A()--System.Object()
A定义了一个带参数的构造函数,B虽然定义了一个与基类带相同参数的构造函数,但是没有显式的使用:base(Str),说明它是默认的继承:base()构造函数,故在编译时报错。