public abstract class Request
{
public class Parameters
{
//Threre are no members here
//But there should be in inherited classes
}
public Request()
{
parameters = new Parameters();
}
public Parameters parameters;
}
两个问题:
如何制作,以便我可以将内容添加到构造函数,但原始构造函数仍会被执行?
如何创建它以便子类可以将成员添加到 Parameters 类?
答案 0 :(得分:7)
如果你正在做我认为你的事情,你将不得不稍微改变你的构造函数:
public Request(Parameters parameters) {
this.Parameters = parameters;
}
然后你可以这样做:
public class SpecificRequest : Request {
public class SpecificRequestParameters : Request.Parameters {
}
public SpecificRequest() : base(new SpecificRequestParameters()) {
//More stuff here
}
}
您要解决的具体问题是什么?你在这里做的事情似乎相当尴尬和过于复杂。
答案 1 :(得分:1)
为什么要在Request类中嵌入Parameters类?相反,让Request有一个参数实例,只需在其他地方声明该类。
回答你的问题1: 继承自Request,始终会调用原始请求构造函数。
问题2: 子类不能将成员添加到参数类(除了反射,但你不想走这条路径)。您可以做的最好是从参数继承并让InheritedRequest使用InheritedParameter类。请注意,在这种情况下,您无法覆盖属性和属性。您必须在InheritedRequest中有一个名为AdditionalParameters的附加属性,类型为InheritedParameters。
答案 2 :(得分:1)
可以使用语法
链接构造函数ctor() : this()
或
ctor() : base()
在那里你可以传递参数等。
使参数字段成为通用
abstract class Request<T> where T : Parameters {
T Parameters;
}
class Specialized : Request<SpecialParameters> {
}
其中SpecialParameters
继承自Parameters
。