我有以下场景,我无法弄清楚如何正确声明允许我使用类型强制。删除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;
}
答案 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
,反之亦然。在任何地方都有两个泛型类型参数似乎是有意义的,因为类ClassC
和class Ape : ClassA<Bear, Cougar>
{
}
class Bear : ClassB<Bear, Cougar>
{
}
class Cougar : ClassC<Bear, Cougar>
{
}
总是作为成对一起工作。
您可以定义这样的具体类:
{{1}}