繁体   English   中英

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

[英]Derived class explicit base constructor call

我正在尝试学习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显式调用基函数。

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

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) { }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM