namespace Sample
{
public class Program
{
static int x;
public Program(int Y) {
x = Y;
Console.WriteLine("one value base class constructor called");
}
static void Main(string[] args)
{
Program prog = new s(10);
Console.ReadKey();
}
}
public class s: Program {
public s(int k):base(10)
{
Console.WriteLine("derived class constructor called");
}
}
}
为什么首先调用基类构造函数?如果我在基类中定义了参数化构造函数,那么派生类构造函数必须将值从派生类传递给基类构造函数。
我想知道它是强制性的原因?如果没有值传递给基类构造函数,那么编译器会给出错误消息,说明' 没有给出与所需形式参数相对应的参数'。
我不是在问我是否必须将值传递给基类,但我的问题是为什么我必须这样做?为什么要首先调用基类构造函数?
答案 0 :(得分:1)
您已回答了自己的问题:
众所周知,在派生类构造函数之前调用了基类构造函数。
由于您的基类只有一个必须接受参数的构造函数,因此在调用它时必须提供此参数。
如果您的基类具有无参数构造函数,那么编译器会对public s(int k):base()
感到满意,甚至只对public s(int k)
感到满意(因为base()
将在编译时隐式添加)。
但是,由于您明确地向类Program
编写了构造函数,因此编译器不提供缺省的无参数构造函数,因此实例化Program
类的唯一方法是通过调用它只是构造函数并传递相关参数。