C#如何使用抽象方法设置泛型类型

时间:2012-01-24 14:42:55

标签: c# generics

我有一个带抽象方法的abstruct类,方法param是通用的。

这是param类型声明:

public class StepHandlerWrapper<T> where T : BaseStepDataModel{...}

这是父摘要:
这实际上是问题,我希望StepHandlerWrapper泛型类型在每个实现上都是动态的

public abstract class BaseStepHandler{
  protected abstract HandlerResult Handle(StepHandlerWrapper<???????????????> );
}

这些是2个实现注意每个实现的类型(不同)

     public  class LoginHandler : BaseStepHandler {
          protected override HandlerResult Handle(StepHandlerWrapper<LoginStepOneDataModel> wrapper){...}
}



  public class RegularDemoAccountHandler : BaseStepHandler{
           protected override HandlerResult Handle(StepHandlerWrapper<RegularDemoAccountStepOneDataModel> wrapper){...}
  }   

如何使抽象方法的每个实现都不同?

2 个答案:

答案 0 :(得分:3)

您还需要BaseStepHandler通用:

public abstract class BaseStepHandler<T> where T : BaseStepDataModel { 
    protected abstract HandlerResult Handle(StepHandlerWrapper<T> wrapper); 
} 

public class LoginHandler : BaseStepHandler<LoginStepOneDataModel> {
    protected override HandlerResult Handle(StepHandlerWrapper<LoginStepOneDataModel> wrapper) {...}
}  

答案 1 :(得分:0)

这两个实现都是DataModel,所以为什么不把它作为两个实现派生自的抽象类:

abstract DataModel {

}

class LoginStepOneDataModel : DataModel {

}

class RegularDemoAccountStepOneDataModel : DataModel {

}

public abstract class BaseStepHandler{
  protected abstract HandlerResult Handle(StepHandlerWrapper<DataModel>);
}