循环泛型语法

时间:2013-01-30 23:05:44

标签: c# generics

我有以下场景,我无法弄清楚如何正确声明允许我使用类型强制。删除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;
}

1 个答案:

答案 0 :(得分: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表示ClassC的where子句中的type参数,其TB属性为ClassB,反之亦然。在任何地方都有两个泛型类型参数似乎是有意义的,因为类ClassCclass Ape : ClassA<Bear, Cougar> { } class Bear : ClassB<Bear, Cougar> { } class Cougar : ClassC<Bear, Cougar> { } 总是作为成对一起工作。


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

{{1}}