c# - 在 C# 中使用接口(interface)作为泛型类的类型参数,限制为 "class"

标签 c# generics interface

为什么可以使用 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/

相关文章:

java - 不同类中的通用接口(interface)

java - 模型对象应该有接口(interface)吗?

java - ThreadLocal 与参数传递 - 在界面设计中选择什么?

java - 如何将刻度从 java 转换为带有时区的 DateTime c#

c# - 从 C# Codebehind 访问 App_Code 中的 VB 代码

c# - 为什么 DateTime.Parse 这么慢?

c# - 为什么最终用户必须注销两次?

python - 从 generic.DetailView 传递上下文数据

c# - 将泛型参数限制为抽象的

java - 为什么 Optional.map 使这项任务有效?