3

これは非常に基本的な問題ですが、まだクリアする方法が見つかりません。A から継承する B や C のような単純な継承がある場合

   A
   |
|-----|
B     C

これらが次のようなインターフェースであるとしましょう:

public interface A
{
    List<A> Children { get; }
}

私の問題:通過したら、その詳細を使用するたびB.Childrenにキャストする必要があります。B継承ツリーの葉で子を宣言することなく、子のリストを持つ方法はありますか?

精度: 子は常にその親 (またはサブタイプ) と同じタイプです。そして、木はより深くなることができます。例として、オブジェクト、コンテナー、コントロール、ラベルを備えた UI システムについて考えてみましょう。クラスは、それ自体の同じタイプまたはサブタイプのもののみを子として持ちます。


これが私のコードです。私はトップレベルを持っています

public interface ITerm
{
    String text { get; }
}

次に、@Damien_The_Unbeliever の提供による

public interface ITerm<T> : ITerm where T : ITerm
{
    List<T> Children { get; }
}

public interface ITermControl : ITerm<ITermControl> { ... }

public class TermControl : ITermControl { ... }

List<ITerm> ITerm.Childrenや にアクセスするのは無意味だと思い始めていますList<ITermControl> ITermControl.Children。それが私が説明しようとしていたことです。

ありがとう

4

1 に答える 1