2011-09-10 8 views
3

汎用インターフェイスを使用しているときに問題が発生しました。初期状態は次のとおりです。2つの従属汎用インターフェイスを定義するにはどうすればよいですか?

interface Itemplate1 
{ 
    ... 
} 

interface Itemplate2<T> where T : Itemplate1 
{ 
    ... 
} 

魅力的です。しかし、私がアプリケーションデザインをやり続けると、Itemplate1メンバーにもItemplate2が必要であることがわかりました。

interface Itemplate1<T> where T : Itemplate2<?> 
{ 
    ... 
} 

interface Itemplate2<T> where T: Itemplate1<?> 
{ 
    ... 
} 

どうすればいいですか? 多くのありがとう

+1

これは、一般的な実装が解決しようとしている問題を記述するのに役立ちます。より単純な方法があるかもしれません。おそらく、インターフェイスを独立して定義し、階層を構築する代わりに両方から継承する必要のあるクラスを持つだけかもしれません。あなたが私たちに与えた制限された情報から伝えるのは難しいです。 – tvanfosson

答えて

4

私はmy Protocol Buffers portにまったく同じ種類のことをしています。私はそれが少し痛みを終えることをあなたに警告する必要がありますが、それはが動作します。

私が必要私の場合は

public interface IMessage<TMessage, TBuilder> 
    where TMessage : IMessage<TMessage, TBuilder> 
    where TBuilder : IBuilder<TMessage, TBuilder> 

public interface IBuilder<TMessage, TBuilder> 
    where TMessage : IMessage<TMessage, TBuilder> 
    where TBuilder : IBuilder<TMessage, TBuilder> 

をそれはあなたのコードまたは類似だけで何かでまったく同じパターンが必要になりますかどうかを言うのは難しいのですが、これは働いています私のために。確かに実際の具体的な実装が自動生成されるのに役立ちます...

+0

素晴らしい!どうもありがとう ;) – Mimi

関連する問題