所有的类都是继承于System.Object的,为了实例化派生类(子类),就必须实例化它的基类(父类)。而要实例化这个基类,又必须实例化这个基类的基类,这样一直到实例化System.Object为止。
如果我们对一个类使用非默认的构造函数,默认的情况是在其基类上使用匹配于这个构造函数的签名的构造函数。如果没有找到这样的构造函数,就使用基类默认构造函数(根类System.Object总是要使用默认的构造函数,因为这个类没有非默认的构造函数)
举例说明:
public class MyParentClass//父类
{
public MyParentClass() { }
public MyParentClass(string name)
{
this.Name = name;
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
public class SubClass : MyParentClass//子类
{
public SubClass() { }
public SubClass(string name)
{
this.Name = name;
}
public SubClass(string name, int age)
{
this.Name = name;
this.Age = age;
}
}
1) 实例化SubClass类中的默认构造函数:
SubClass MySubClass = new SubClass();
则构造函数的执行顺序是:
System.Object. Object();
MyParentClass. MyParentClass();
SubClass. SubClass();
2)实例化SubClass类中带一个参数的构造函数:
SubClass MySubClass = new SubClass(“国雄”);
则构造函数的执行顺序是:
System.Object. Object();
MyParentClass. MyParentClass(string name);
SubClass. SubClass(string name);
3)实例化SubClass类中带两个参数的构造函数
SubClass MySubClass = new SubClass(“国雄”,20);
则构造函数的执行顺序是:
System.Object. Object();
MyParentClass. MyParentClass();
SubClass. SubClass(string name,int age);
以上构造函数都是默认的执行顺序,如果我们在要让3)实例化SubClass类中带两个参数的构造函数的构造函数的执行顺序按照:
System.Object. Object();
MyParentClass. MyParentClass(string name);
SubClass. SubClass(string name,int age);
默认的情况是不能这样执行的,但是我们可以指定它让它这样执行。方法如下:
public class MyParentClass//父类
{
public MyParentClass() { }
public MyParentClass(string name)
{
this.Name = name;
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
public class SubClass : MyParentClass//子类
{
public SubClass() { }
public SubClass(string name)
{
this.Name = name;
}
public SubClass(string name, int age):base(name)//指定这个构造函数继承父类中的public MyParentClass(string name)
{
this.Name = name;
this.Age = age;
}
}
Base关键字指定.NET实例化过程使用基类中匹配指定签名的构造函数
实例化SubClass类中带两个参数的构造函数:
SubClass MySubClass = new SubClass(“国雄”,20);
则构造函数的执行顺序是:
System.Object. Object();
MyParentClass. MyParentClass(string name);
SubClass. SubClass(string name,int age);