与基类中的参数化构造函数相关的问题

时间:2015-04-10 06:13:17

标签: c# oop inheritance constructor

在使用继承时,我对构造函数有些困惑:

我有以下代码:

 class Program 
    {
        static void Main(string[] args)
        {
            ClassD obj = new ClassD(10);
            Console.ReadLine();
        }
    }
    class ClassA
    {
        public ClassA(int a)
        {
            Console.WriteLine("Constructor of ClassA");
        }
    }
    class ClassB : ClassA
    {
        public ClassB(int a)
        {
            Console.WriteLine("Parameterized Constructor of ClassB");
        }
    }
    class ClassC : ClassB
    {
        public ClassC(int a)
        {
            Console.WriteLine("Parameterized Constructor of ClassC");
        }
    }
    class ClassD : ClassC 
    {
        public ClassD(int a)
        {
            Console.WriteLine("Parameterized Constructor of ClassD");
        }
    }

当我写上面的代码时..编译器生成3错误说:

'ClassA' does not contain a constructor that takes 0 arguments  

'ClassB' does not contain a constructor that takes 0 arguments  

'ClassC' does not contain a constructor that takes 0 arguments  

那么为什么这些错误会抛出? 是否有必要在基类中使用默认构造函数。

如果我不想在基类中使用默认构造函数但想在派生类中使用默认构造函数,该怎么办?

1 个答案:

答案 0 :(得分:1)

  

那么为什么这些错误会抛出?

这不是错误。编译器显示编译错误。这样做是因为基类上没有默认构造函数,派生类使用它需要的参数调用基类。

  

是否需要在基类中使用默认构造函数。

没有

  

如果我不想在基类中使用默认构造函数但想在派生类中使用默认构造函数,该怎么办?

然后在派生类中提供默认构造函数,但它仍然必须调用基类并提供基类构造函数所需的参数。

public ClassB() : base(0) // Or whatever value you want here for this default constructor