2011-07-04 13 views
3

タイトルに対する謝罪 - 私の要件を記述するための非常に良い方法とは思えません。一般的なタイプで定義されたタイプを使用する

一般的なインターフェイス(またはクラスではありません)を定義して、Typeパラメーターがクラスからアクセスできる別のTypeを提供できるようにしたいと考えています。うまくいけば、このコードスニペットは説明します。

interface IFoo 
{ 
    TOtherType DependentType { get; } 
} 

interface IMyGeneric<TBar> where TBar : IFoo 
{ 
    TBar ReturnSomeTBar(); 
    TBar.DependentType ReturnSomeTypeOnTBar(); 
} 

したがって、この例では、私はクラスがIFoo(例えばFoo)を実現し、別のタイプ、DependentType(例えばint)を公開したいので、私は、メソッドを持ってIMyGeneric<Foo>を使用することができます明らかに

public Foo ReturnSomeTBar() 
{ 
} 

public int ReturnSomeTypeOnTBar() 
{ 
} 

上記のコードはコンパイルされないので、ジェネリックチェーンのこの動作を実現する方法はありますか?

答えて

2

まず第一に、IFooはその後IMyGenericは2型のparams

interface IMyGeneric<TBar,TDependent> where TBar : IFoo<TDependent> 
{ 
    TBar ReturnSomeTBar(); 
    TDependent ReturnSomeTypeOnTBar(); 
} 

を持っている必要がありますあまりにも

interface IFoo<TDependent> 
{ 
    TDependent DependentType { get; } 
} 

総称する必要がありますおそらく、これは近いsolutinあなたにあなたを取得、再後。

1

TBar.DependentTypeは、TBarの一部である必要があります。これは、ジェネリック型パラメータに対して制約を加えることができる種類のものではありません。

代わりに2つのタイプのパラメータを使用することはどうですか? IMyGenertic<TBar, TFoo>?使用可能な回避策?

+0

実際、2つのタイプのパラメータは、私が検討した回避策でしたが、タイプが独立しているので必要な動作ではありません。しかし、それは容認できる妥協である – RichK

関連する問題