当泛型类型作为泛型类型引用传递时,C#(不知何故)可以解决类型约束吗?

时间:2018-01-17 11:00:17

标签: c# generics

鉴于以下类别:

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>
{
}

提前感谢您的回复。

1 个答案:

答案 0 :(得分:2)

不,这是不可能的。如果您希望在类中的任何位置使用它们,则需要定义通用类级别类型参数。你试图用ClassA定义T0,类型参数不属于ClassB定义,所以很明显它不会编译。

您可以执行以下操作:

ClassB<T0> where T0: ClassA<Int, Int, String> { }

这会将ClassB限制为仅接受类型参数为ClassA的{​​{1}}或ClassA个子类型的实例。

或者你也可以这样做:

Int, Int, String

这将允许你保留ClassB对ClassA泛型的引用(而不是限制ClassA中ClassA的类型参数。但是,它对我来说有点可疑。