为什么您可以使用interface
约束作为约束所在的泛型类的类型参数class
?
interface IB {}
class A<T> where T : class {}
...
A<IB> a; // why is IB allowed here?
引用类型或值类型都可以实现接口,因此您不应使用接口作为类型参数,因为接口声明不像限制那样“强”。
但是在上面的示例中,它可以正常工作。为什么允许这样做?如果它是值类型,则实际对象是否实现了在过程中装箱的接口?
类型为接口类型的任何变量都是引用类型,如果实现类型是值类型,则将其装箱,例如
IConvertible c = 3;
3
分配给时,将使该值被装箱c
。
如果您具有通用类型A<T>
并且T
是接口类型,则对T
inside的任何引用A
也将是引用类型,因此class
可以满足约束。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句