一、基类没有定义构造函数的情况
1、派生类也可以不定义构造函数,全部采用默认的构造函数,此时,派生类新增成员的初始化工作可以用其他公有函数来完成。
2、如果只有派生类定义构造函数,只需要构造派生类对象即可,对象的基类部分使用默认构造函数来自动创建
二、基类中存在构造函数
1、基类中存在不带参数的构造函数。如果基类定义了构造函数,而且该构造函数没有参数,那么它可以隐式的被继承,也就是说,派生类根本不需要构造函数。例子如下:
namespace Test1
{
public class BaseClass
{
public BaseClass()
{
Console.WriteLine("基类的构造函数被继承");
}
}
public class ChildClass : BaseClass
{
}
class Program
{
static void Main(string[] args)
{
ChildClass cc = new ChildClass();
}
}
}
运行结果:
基类的构造函数被继承
从运行结果看,派生类继承了基类的构造函数,此时派生类不需要包含构造函数
2、基类中存在带参数的构造函数。如果基类定义了带有参数的构造函数,则此构造函数必须被继承且在派生类中实现构造函数。同时提供一个将参数传递给基类构造函数的途径,以便在基类进行初始化时能获得必需的数据,在实现构造函数时使用base关键字,例子如下:
namespace Test1
{
public class BaseClass
{
public BaseClass(int x,int y)
{
int result = x + y;
Console.WriteLine("基类构造函数中的内容");
Console.WriteLine("x = {0},y = {1}两数和为", x, y, result);
Console.WriteLine();
}
}
public class ChildClass : BaseClass
{
public ChildClass(int x, int y):base(x,y)
{
Console.WriteLine("派生类构造函数中的内容");
int result = x * y;
Console.WriteLine("x = {0} y = {1}两数的积为:", x, y, result);
}
}
class Program
{
static void Main(string[] args)
{
ChildClass cc = new ChildClass(5,6);
}
}
}
运行结果:
基类构造函数中的内容
x = 5,y = 6两数和为
派生类构造函数中的内容
x = 5 y = 6两数的积为:
解析:派生类隐式的继承基类中不带参数的构造函数,上面的代码中基类定义了带有参数的构造函数,在其派生类中被继承,并使用base关键字传递参数。可以从运行结果中看到在创建派生类的对象后,程序首先运行的是基类的构造函中的内容,然后才是派生类的内容。