鉴于以下类别:
public class ClassA<T1, T2, T3>
{
}
public class ClassB<T0, T1, T2, T3>
where T0 : ClassA<T1, T2, T3>
{
}
C#中是否有办法声明 ClassB 而不会复制 ClassA 上的所有类型; C#可以从传入的类型中解决这些问题吗?例如:
public class ClassB<T0>
where T0 : ClassA<T1, T2, T3>
{
}
提前感谢您的回复。
答案 0 :(得分:2)
不,这是不可能的。如果您希望在类中的任何位置使用它们,则需要定义通用类级别类型参数。你试图用ClassA定义T0,类型参数不属于ClassB定义,所以很明显它不会编译。
您可以执行以下操作:
ClassB<T0> where T0: ClassA<Int, Int, String> { }
这会将ClassB
限制为仅接受类型参数为ClassA
的{{1}}或ClassA
个子类型的实例。
或者你也可以这样做:
Int, Int, String
这将允许你保留ClassB对ClassA泛型的引用(而不是限制ClassA中ClassA的类型参数。但是,它对我来说有点可疑。