循环泛型语法

本文关键字:语法 泛型 循环 | 更新日期: 2023-09-27 17:56:40

我有以下情况,我不知道如何正确声明允许我使用类型强制。 删除 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;
}

循环泛型语法

在每个类中指定两个泛型类型参数似乎有效:

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 子句中的类型参数,ClassC具有TB属性,反之亦然。在任何地方都有两个泛型类型参数似乎是有意义的,因为类ClassBClassC总是成对地一起工作。


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

class Ape : ClassA<Bear, Cougar>
{
}
class Bear : ClassB<Bear, Cougar>
{
}
class Cougar : ClassC<Bear, Cougar>
{
}