为什么可以使用 interface
作为约束为 class
的泛型类的类型参数?
interface IB {}
class A<T> where T : class {}
...
A<IB> a; // why is IB allowed here?
无论是引用类型还是值类型都可以实现接口(interface),所以你不应该使用接口(interface)作为类型参数,因为接口(interface)声明没有限制那么“强”。
但是在上面的例子中它没有问题。为什么这是允许的?如果它是值类型,那么实现接口(interface)的实际对象是否在流程中被装箱?
最佳答案
任何类型为接口(interface)类型的变量都是引用类型,如果实现类型是值类型,它将被装箱,例如
IConvertible c = 3;
将导致值3
分配给 c
时装箱.
如果你有一个通用类型 A<T>
和 T
是一个接口(interface)类型,任何对T
的引用里面A
也将是一个引用类型,所以 class
满足约束条件。
关于c# - 在 C# 中使用接口(interface)作为泛型类的类型参数,限制为 "class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664095/