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

在每个类中指定两个泛型类型参数似乎可行:

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; }
}

ClassB需要TC它自己的属性和具有属性TB的 where 子句中的类型参数,反之亦然。到处都有两个泛型类型参数似乎是有意义的,因为类总是成对一起工作。ClassCTBClassBClassC


您可以像这样定义具体的类:

class Ape : ClassA<Bear, Cougar>
{
}

class Bear : ClassB<Bear, Cougar>
{
}

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