我有一组继承自基础的类...
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'不包含带有1个参数的构造函数"
有没有办法在没有明确声明每个继承类级别的构造函数的情况下执行此操作?
答案 0 :(得分:1)
没有
但是考虑到你想继承,我猜你想要在一些继承的字段或属性的所有级别上应用相同的逻辑。如果是这样,您可以获得的最接近的是在基类上添加类似Create< T>(字符串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;
}
}
这将允许该类的所有实现者实现BaseClass并获得与具有可选参数构造函数相同的效果。
顺便说一句,我没有测试上面的代码,所以你可能需要稍微调整一下。但希望它能提出这个想法。
我认为这可能是你能得到的最接近的。
答案 1 :(得分:0)
构造函数是特殊方法。如果你的类没有指定构造函数,那么它将有一个no-args构造函数,它继承自父的no-args构造函数。只要指定一个构造函数,就不会自动获取任何父构造函数。您必须声明所需的每个不同的构造函数。