{
public MyBaseClass()
{
}
{
}
}
{
public MyDerivedClass()
{
}
{
}
{
}
} 如果以下面的方式实例化MyDerivedClass: MyDerivedClass myObj = new MyDerivedClass(); 则发生下面的一系列事件:
1.执行System.Object.Object()构造函数。
2.执行MyBaseClass.MyBaseClass()构造函数。
3.执行MyDerivedClass.MyDerivedClass()构造函数。
如果使用下面的语句: MyDerivedClass myObj = new MyDerivedClass(4); 则发生下面的―系列事件:
1.执行System.Object.Object()构造函数。
2.执行MyBaseClass.MyBaseClass(int i)构造函数。
3.执行MyDerivedClass.MyDerivedClass(int i)构造函数。
如果使用下面的语句: MyDerivedClass myObj = new MyDerivedClass(4,8); 则发生下面的―系列事件:
1.执行System.Object.Object()构造函数。
2.执行MyBaseClass.MyBaseClass()构造函数。
3.执行MyDerivedClass.MyDerivedClass(int i, int j)构造函数。
有时需要对发生的事件进行更多的控制。例如,在上面的实例化范例中,需要有下面的事件序列:
1.执行System.Object.Object()构造函数。
2.执行MyBaseClass.MyBaseClass(int i)构造函数。
3.执行MyDerivedClass.MyDerivedClass(int i, int j)构造函数。 使用这个序列可以在编写MyBaseClass(int i)中使用int i参数的代码,即MyDerivedClass(int i, int j)构造函数要做的工作比较少,只需要处理int j参数(假定int i参数在两种情况下有相同的含义)。我们仅需指定在派生类的构造函数定义中所使用的基类的构造函数,如下所示: public class MyDerivedClass : MyBaseClass
{
……
public MyDerivedClass(int i, int j) : base(i)
{
}
} 其中,base关键字指定.NET实例化过程,以使用基类中匹配指定签名的构造函数。这个例子中使用一个int参数,所以在实例化序列中应调用MyBaseClass(int i)。 同时我们也可以使用这个关键字指定基类构造函数的字面值。 public class MyDerivedClass : MyBaseClass
{
public MyDerivedClass() : base(5)
{
}
……
} 这段代码将执行以下序列:
1.执行System.Object.Object()构造函数。
2.执行MyBaseClass.MyBaseClass(int i)构造函数。
3.执行MyDerivedClass.MyDerivedClass()构造函数。
下面我们介绍另一个关键字this。这个关键字指定在调用指定的构造函数前,.NET实例化过程对当前类使用非默认的构造函数。 public class MyDerivedClass : MyBaseClass
{
public MyDerivedClass() : this(5,6)
{
}
……
public MyDerivedClass(int i, int j) : base(i)
{
}
} 这段代码将执行以下序列:
1.执行System.Object.Object()构造函数。
2.执行MyBaseClass.MyBaseClass(int i)构造函数。
3.执行MyDerivedClass.MyDerivedClass(int i,int j)构造函数。
4.执行MyDerivedClass.MyDerivedClass()构造函数。
唯一的限制是使用this或base关键字只能指定一个构造函数。但是如上所示,这并不是一个很严厉的限制,按照上述方式仍可以构造相当复杂的执行序列。
本文出自 “努力学习的小熊” 博客,转载请与作者联系!