1,在使用构造函数时,作为派生类会有某些特殊问题。其根源就是创建派生类时会有多个构造函数起作用。
2,C#中实例化的类的构造函数本身不能初始化类,还必须调用基类的构造函数。
3,构造函数的调用顺序是自上向下的,(实际上是编译器先自下而上的寻找构造函数,然后再自上而下的执行)
直到达到要实例化的类为止,在此过程中,每一个构造函数都初始化它们自己的类中的字段。
来看个简单的例子吧。
复制代码 代码示例:
class baseClass
{
public baseClass()
{
Console.WriteLine("baseClass");
}
}
class childClass : baseClass
{
public childClass()
{
Console.WriteLine("childClass");
}
}
class Program
{
static void Main(string[] args)
{
childClass child = new childClass();
/*
* 结果是
* baseClass
* childClass
*/
Console.Read();
}
}
4,正是基于这样一种顺序(基类的构造函数最先被调用),
派生类的构造函数可以在执行的过程中掉用它可以访问的基类方法啊,属性和其他成员
5,另外我们还可以这样定义childClass的构造函数,结果一致。base不带参数
复制代码 代码示例:
public childClass()
: base()
{
Console.WriteLine("childClass");
}
实际上,编译器会自动调用基类中的不带参数的构造函数,而一旦为类定义了构造函数。
无论是否带有参数,那么类都不会再自动生成默认的构造函数。
所以,这时就要自己写这个默认的不带参数的构造函数,或通过给base传递参数来告诉编译器指定基类的构造函数。
例子:
复制代码 代码示例:
class baseClass
{
private int a;
public baseClass(int i)
{
a = i;
}
}
class childClass : baseClass
{
public childClass(int i)
: base(i)
{
}
}
class Program
{
static void Main(string[] args)
{
childClass child = new childClass(10);
Console.Read();
}
}
7, 不能把基类的构造函数定义为private
见下例,由于无法访问基类不带参的构造函数,编译时也会报错
复制代码 代码示例:
class baseClass
{
private baseClass()
{
Console.WriteLine("baseClass");
}
}
就是这些了,C#学习笔记之C#派生类的构造函数,希望对大家有所帮助。