为什么我们必须将派生类构造函数中的值传递给基类构造函数

时间:2018-05-13 06:11:44

标签: c# inheritance constructor

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");

        }       
    }
}

为什么首先调用基类构造函数?如果我在基类中定义了参数化构造函数,那么派生类构造函数必须将值从派生类传递给基类构造函数。

我想知道它是强制性的原因?如果没有值传递给基类构造函数,那么编译器会给出错误消息,说明' 没有给出与所需形式参数相对应的参数'。

我不是在问我是否必须将值传递给基类,但我的问题是为什么我必须这样做?为什么要首先调用基类构造函数?

1 个答案:

答案 0 :(得分:1)

您已回答了自己的问题:

  

众所周知,在派生类构造函数之前调用了基类构造函数。

由于您的基类只有一个必须接受参数的构造函数,因此在调用它时必须提供此参数。

如果您的基类具有无参数构造函数,那么编译器会对public s(int k):base()感到满意,甚至只对public s(int k)感到满意(因为base()将在编译时隐式添加)。

但是,由于您明确地向类Program编写了构造函数,因此编译器不提供缺省的无参数构造函数,因此实例化Program类的唯一方法是通过调用它只是构造函数并传递相关参数。