1

タイプ強制を使用できるように適切に宣言する方法がわからないという次のシナリオがあります。句を削除してもwhere問題ありませんが、それらを使用してタイプ セーフを適用できるようにしたいと考えています。これを機能させる方法はありますか?

class ClassA<TB, TC> where TB : ClassB where TC : ClassC
{
    private TB MyPropB;
    private TC MyPropC;
}

class ClassB<TC> where TC : ClassC
{
    private TC MyPropC;
}

class ClassC<TB> where TB : ClassB
{
    private TB MyPropB;
}
4

1 に答える 1

3

各クラスで2つのジェネリック型パラメーターを指定すると、うまくいくようです。

class ClassA<TB, TC>
    where TB : ClassB<TB, TC>
    where TC : ClassC<TB, TC>
{
    public TB MyPropB { get; set; }
    public TC MyPropC { get; set; }
}

class ClassB<TB, TC>
    where TB : ClassB<TB, TC>
    where TC : ClassC<TB, TC>
{
    public TC MyPropC { get; set; }
}

class ClassC<TB, TC>
    where TB : ClassB<TB, TC>
    where TC : ClassC<TB, TC>
{
    public TB MyPropB { get; set; }
}

ClassBTC独自のプロパティと、プロパティを持つTBwhere句のtypeパラメータが必要です。その逆も同様です。クラスとは常にペアとして連携するため、どこにでも2つのジェネリック型パラメーターを設定することは理にかなっているようです。ClassCTBClassBClassC


次のように具象クラスを定義できます。

class Ape : ClassA<Bear, Cougar>
{
}

class Bear : ClassB<Bear, Cougar>
{
}

class Cougar : ClassC<Bear, Cougar>
{
}
于 2013-01-30T23:20:51.000 に答える