可能重复,我有构造函数XYZ(字符串名称)的抽象类.我也有从该抽象类继承的类.如何强制继承类调用base(字符串名称)?现在我可以使用new Inherited(),它不会调用base construcotr.我想强制用户在继承的类中实现默认构造函数.
Mat*_*zer 13
没有显式构造函数的类具有无参数构造函数.另一方面,如果使用参数实现构造函数而没有无参数构造函数,则没有参数,您的类将无法实例化.
换一种说法:
public abstract class A
{
public A(string x)
{
}
}
public class B : A
{
// If you don't add ": base(x)"
// your code won't compile, because A has a
// constructor with parameters!
public B(string x) : base(x)
{
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,如果A有一个无参数构造函数(或没有显式构造函数),B将自动调用基础构造函数.您不需要在此处编写任何其他内容.
否则,如果您的基类具有无参数构造函数和带参数的构造函数,则不能强制派生类自动调用除默认构造函数之外的构造函数(即所谓的无参数构造函数).
嗯,这里没有特殊的解决方法,但要注意C#支持构造函数和方法中的可选参数.
如果你想100%确定派生类将调用一个具体的基础构造函数,你可以使用带有可选参数的单个无参数构造函数实现你的基类,并使用它而不是构造函数重载:
public class A
{
public A(string x = "hello world") // or just string x = null
{
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果B派生的类A,B将始终调用A的基本构造函数,因为x它是可选的,并且它具有默认值.
| 归档时间: |
|
| 查看次数: |
8945 次 |
| 最近记录: |