继承具有单个可选参数的构造函数

Inheriting constructor with single optional argument

我有一组 class 继承自基...

public abstract class BaseClass
{
    public BaseClass()
    {
        // ...
    }
}

public abstract class BaseMessageClass : BaseClass
{
    // ...
}

public SpecificMessageClass : BaseMessageClass
{
   // ...
}

像这样实例化对象有效:

SpecificMessageClass myMessage = new SpecificMessageClass();

但是,我需要将所有构造函数更改为具有可选的字符串参数,如下所示:

public abstract class BaseClass
{
    public BaseClass(string optParam="whatever")
    {
        // ...
    }
}

现在,当我尝试使用可选参数实例化对象时:

SpecificMessageClass myMessage = new SpecificMessageClass("coolstring");

我收到错误:

'SpecificMessageClass' does not contain a constructor that takes 1 arguments"

有没有办法在不显式声明继承的每个级别中的构造函数的情况下执行此操作class?

没有

但是鉴于您想要继承,我猜您希望相同的逻辑在某些继承字段或 属性 的所有级别上应用。如果是这样,您可以获得的最接近的方法是在基础 class 上添加类似 Create(string optParam="whatever") 的工厂方法,如下所示:

public class BaseClass
{
    public static T Create<T>(string optParam="whatever") where T : BaseClass
    {
        var t = new T(); //which invokes the paramterless constructor
        ((BaseClass)t).SomePropertyOrFieldInheritedFromTheBaseClass = optParam; //and then modifies the object however your BaseClass constructor was going to.
        return t;
    }
}

这将允许 class 的所有实现者实现 BaseClass 并获得与具有可选参数构造函数相同的效果。

顺便说一句,我没有测试上面的代码,所以你可能需要稍微调整一下。但希望它能给出想法。

我认为这可能是最接近的。

构造函数是特殊的方法。如果您的 class 没有指定构造函数,它将有一个从父级的无参数构造函数继承的无参数构造函数。一旦您指定了一个构造函数,您就不会自动免费获得父级的任何构造函数。您必须声明您需要的每个不同的构造函数。