2012-01-24 14 views
0

抽象メソッドを持つabstructクラスを持っていますが、メソッドparamは汎用です。C#抽象メソッドで汎用タイプを設定する

これはのparam型宣言です:

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

これは親抽象的です:これは実際に問題である
、私はStepHandlerWrapperジェネリック型は、各implementaionにダイナミックになりたい:

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){...} 
    } 

抽象メソッドの各実装をどのように異ならせるのですか?

答えて

3

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) {...} 
} 
0

2つの実装は、両方のDataModelsあるので、なぜ両方の実装から派生抽象クラスということはありませ:あなたにもBaseStepHandlerは一般的なようにする必要があり

abstract DataModel { 

} 

class LoginStepOneDataModel : DataModel { 

} 

class RegularDemoAccountStepOneDataModel : DataModel { 

} 

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

のDataModelは実際にありますちょうど "マーカー"。私は各実装に異なるタイプを持たせたい(これはキャストを避けるのに役立つだろう)。 – SexyMF

関連する問題