派生类显式基础构造函数调用

时间:2014-11-17 18:21:03

标签: c# class constructor base derived

我正在努力学习C#。以下数据来自Microsoft C#帮助网站。 我不明白这句话,“如果基类不提供默认构造函数,派生类必须使用base对基础构造函数进行显式调用。”

我认为如果没有类的默认构造函数,C#会自动为int,char或类中声明的任何默认值赋值。如果基类没有构造函数并且它有子类,那么最后一句中提到的规则是否不适用?请澄清。

在派生类中,如果未使用base关键字显式调用基类构造函数,则会隐式调用默认构造函数(如果有)。这意味着以下构造函数声明实际上是相同的: C#

     public Manager(int initialdata)
     {
         //Add further instructions here.
      }

C#

     public Manager(int initialdata)
    : base()
    {
          //Add further instructions here.
     }

如果基类不提供默认构造函数,则派生类必须使用base对基础构造函数进行显式调用。

1 个答案:

答案 0 :(得分:2)

如果没有为类定义构造函数:

public class DemoClass
{
   public void SomeFunction() { }
}

C#将为您添加一个默认(无参数)构造函数。在这种情况下;派生类没有什么特别需要,因为它们将使用提供的默认构造函数。当然,您始终可以定义自己的默认(无参数)构造函数:

public class DemoClass
{
   public void DemoClass() { }

   public void SomeFunction() { }
}

对于派生类,它仍然不需要任何特殊的东西,因为它们仍然可以使用它。但是,如果定义了参数化构造函数,则不定义默认值:

public class DemoClass
{
   public void DemoClass(string argument) { }

   public void SomeFunction() { }
}

现在没有用于派生类的默认(无参数)构造函数;你需要说明哪个构造函数 base一起使用:

public class DerivedClass : DemoClass
{
   public DerivedClass() : base(String.Empty) { }
}