[英]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.