带构造函数的抽象类,强制继承类调用它

2024-03-19

我有一个abstract带有构造函数的类XYZ(string name).
我还有一个继承自该抽象类的类。

如何强制遗传要调用的类base(string name)?

现在我可以使用new Inherited()并且它不会调用基本构造函数。我想强制用户在继承的类中实现默认构造函数。


没有显式构造函数的类具有无参数构造函数。另一方面,如果你实现一个构造函数带参数并且没有无参数构造函数,您的类将无法在没有参数的情况下实例化。

换句话说:

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

也就是说,如果A有一个无参数构造函数(或没有显式构造函数),B将自动调用基本构造函数。您不需要在这里编写任何其他内容。

否则,如果您的基类具有无参数构造函数和带参数构造函数,则无法强制派生类自动调用除默认构造函数之外的构造函数(即所谓的无参数构造函数).

解决方法

嗯,这里没有特殊的解决方法,但请注意 C# 在构造函数和方法中都支持可选参数。

如果您想 100% 确定派生类将调用具体的基构造函数,您可以使用带有可选参数的单个无参数构造函数来实现基类,并使用它而不是构造函数重载:

public class A
{
    public A(string x = "hello world") // or just string x = null
    {

    }
}

现在如果一个B派生类A, B总会打电话A的基本构造函数,因为x是可选的并且有一个默认值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带构造函数的抽象类,强制继承类调用它 的相关文章

随机推荐