使用接口作为通用类的类型参数,但在C#中使用“类”的限制

汤米·T

为什么您可以使用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是接口类型,则对Tinside的任何引用A也将是引用类型,因此class可以满足约束。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C#中使用通用类型实现接口的类的工厂?

使用嵌套在通用类中的类作为C#中的类型参数

使用通用类的参数作为事件类型

使用通用类型的接口通用类型的类

C# OOP:在基础具体类中使用带有类型参数的接口

在通用类中使用类型变量作为返回类型

查找使用类型'x'作为通用类型参数的实现通用类的类

在c#中使用类型作为函数参数的通用对象创建

使用静态嵌套类作为通用参数

泛型类中可接受的类型对接口中使用的类型的限制

在 C++ 中使用派生类类型作为基方法的参数

使用基类进行C#接口类型转换

如何引用父类在 C# 中使用的接口?

c#实现派生类中使用的接口变量

我可以使用类型作为值(或从构造函数参数正确推断通用类类型)吗?

使用抽象基类来强制模板参数类型的通用接口是不好的做法吗?

具有某些接口类型的通用C#类未使用第一个接口的成员实现其他接口

在C ++中使用抽象类作为函数的参数

使用“类”或“类型名”作为模板参数?

使用路径相关类型作为类参数

可以推断参数的通用接口中使用的类型吗?

在Powershell中,如何使用字节数组作为C#通用类之一的键类型?

在C#中使用double类型作为参数

在 C# 中使用泛型类型作为参数

我可以在通用类中使用类型缩写作为别名吗?

在C ++中使用匿名类实现接口

我可以将基类类型作为通用参数传递给接口吗

使用TypeScript声明类类型(将类作为参数)

如何在模板类中使用嵌套类作为类型?