在C#中使用抽象子类的基类?

时间:2010-04-11 20:15:17

标签: c# oop abstract

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. 如何创建它以便子类可以将成员添加到 Parameters 类?

3 个答案:

答案 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