2
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;
}

两个问题:

  1. 我如何制作它以便我可以向构造函数添加东西​​但仍会执行原始构造函数?

  2. 如何使子类可以将成员添加到参数类?

4

3 回答 3

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

您要解决的具体问题是什么?您在这里所做的似乎相当尴尬且过于复杂。

于 2010-04-11T20:21:28.820 回答
1

为什么要在 Request 类中嵌入 Parameters 类?相反,让 Request 有一个参数实例,然后在其他地方声明该类。

回答您的问题 1:从 Request 继承,并且将始终调用原始请求构造函数。

问题2:子类不能向参数类添加成员(反射除外,但您不想走那条路)。最好的方法是从参数继承并让 InheritedRequest 使用 InheritedParameter 类。请注意,在这种情况下,您不能覆盖属性和属性。您将必须在 InheritedRequest 中有一个名为 AdditionalParameters 类型的 InheritedParameters 的附加属性。

于 2010-04-11T20:23:28.203 回答
1

构造函数可以用语法链接

ctor() : this()

或者

ctor() : base()

在那里你可以传递参数等。

使参数字段通用

abstract class Request<T> where T : Parameters {
  T Parameters;
}

class Specialized : Request<SpecialParameters> {
}

从哪里SpecialParameters继承Parameters

于 2010-04-11T20:28:23.973 回答