2016-08-06 6 views
-1

私はPOCOオブジェクトをラップおよび追加機能を提供WrapperBase<PocoBase>クラスを有しています。BaseType <any>はどのように指定できますか?</p> <pre><code>public class WrapperBase<T> where T : PocoBase </code></pre><p>といくつかの実装をその基底クラスの上に:

public class ButtonWrapper : WrapperBase<Button> 
public class ZipperWrapper : WrapperBase<Zipper> 

私は、コンストラクタのパラメータとしてWrapperBase<T>を取るクラスを作成しようとしています。

public class ThingDoer 
    where T : PocoBase 
{ 
    public ThingDoer(WrapperBase<T> wrapper) 
    { 
    } 
} 

が、私がしようとするものに関係なくは、ThingDoerは望んでいるTの定義:

new ThingDoer<Zipper>(zipperWrapper); 
// I don't care what T is... get rid of <Zipper> 

私は私が望むすべての機能があるので、私は、Tが何であるかを気にしない」と言うことができますどのようにWrapperBase "?

+1

ジェネリックで作業する場合、「<' and '>」は名前の一部にすぎないと想像してください。 2つのクラスが 'public class ButtonWrapper:WrapperBase_Button'と' public class ZipperWrapper:WrapperBase_Zipper'として定義されていることをもう一度想像してみてください。あなたの質問についてもう一度考えてみましょう。クラスを持たないので 'WrapperBase' 'WrapperBase_Button'と' WrapperBase_Zipper'という名前の2つのクラスがあります。これらのクラスは名前の最初の12文字を共有する以外には何もしません。 –

答えて

2

「私が望むすべての機能がWrapperBaseにあるため、Tが何であるか気にしない」とはどうすればいいですか?

この機能を提供するメソッドを指定するインターフェイスIWrapperFunctionalityを定義できます。 WrapperBase<T>にそのインターフェイスを実装し、それをコンストラクターの引数として使用します。

public ThingDoer(IWrapperFunctionality wrapper) 
{ 
} 
関連する問題

 関連する問題