类的构造函数
1.默认的构造函数 (无参)
2.用户自定义构造函数 (可有可无参数)
构造函数的继承机制
从两个方面来阐述这个问题:
一,基类中没有定义构造函数(默认的构造函数)
当子类继承基类的时候,会默认调用基类的构造函数
从最亲近的一级往顶级查找
demo -01
class baseClass
{ }
class drivedClass :baseClass
{
public drivedClass()
{
Console.WriteLine("drivedClass 默认构造函数");
}
public drivedClass(int i)
{
Console.WriteLine("drivedClass 带一个参数的构造函数");
}
}
drivedClass dc = new drivedClass();
Console.ReadLine();
结果:
drivedClass 默认构造函数
二,基类中有自定义的构造函数
这个情况比较复杂,我一一举例来说明
当基类中只声明无参数的构造函数
(无参构造函数只能有一个,多了会报错)
子类中将只调用基类中无参构造函数
demo -02
class baseClass
{
public baseClass()
{
Console.WriteLine("baseClass 默认构造函数");
}
}
class drivedClass :baseClass
{
//base 的意思是调用基类的构造函数,当基类无参数时,base可有可无
public drivedClass():base()
{
Console.WriteLine("drivedClass 默认构造函数");
}
public drivedClass(int i)
{
Console.WriteLine("drivedClass 带一个参数的构造函数");
}
public drivedClass(int i, int j)
{
Console.WriteLine("drivedClass 带二个参数的构造函数");
}
}
drivedClass dc = new drivedClass();
Console.ReadLine();
结果
baseClass 默认构造函数
drivedClass 默认构造函数
当基类中既有无参构造函数,又有参数的构造函数时
就要看子类是怎么调用构造函数的
demo -03
带参数的构造函数
class baseClass
{
public baseClass()
{
Console.WriteLine("baseClass 默认构造函数");
}
public baseClass(int i)
{
Console.WriteLine("baseClass 带一个参数的构造函数");
}
}
class drivedClass :baseClass
{
public drivedClass()
{
Console.WriteLine("drivedClass 默认构造函数");
}
public drivedClass(int i) :base(i)
{
Console.WriteLine("drivedClass 带一个参数的构造函数");
}
public drivedClass(int i, int j)
{
Console.WriteLine("drivedClass 带二个参数的构造函数");
}
}
drivedClass dc = new drivedClass(1);
Console.ReadLine();
结果
baseClass 带一个参数的构造函数
drivedClass 带一个参数的构造函数
构造函数技巧
我的体会是在有参构造函数的类中,最好把无参的构造函数
也手工写上.