【发布时间】:2021-04-21 16:30:31
【问题描述】:
假设我有一个通用类
public class G<T> {
}
我想将 final 类声明为
public class F<T> where T : G<T> {
}
这似乎是可能的,但是如果我想使任务复杂化并像这样向 G 类添加一个约束
public class A {
}
public class DA : A {
}
public class DB : A {
}
public class G<T> where T : A {
}
最后我想这样做
public class F<T> where T : G<T> {
}
这不起作用,它说 T 必须是 A 类型,这是可以理解的,看起来我可以像这样重写它
public class F<T, U> where T : G<U> where U : A {
}
但在这种情况下,用法有一个多余的声明
public class DF : F<G<DA>, DA> {
}
在使用类 F 时我必须重复 DA 两次,即使很清楚如果我使用 G 作为泛型类型,G 的泛型类型是 DA。有没有办法避免这种冗余?
【问题讨论】:
标签: c# generics generic-constraints