C# 接口<;T>;T:在哪里上课 接口,其中T:class

C# 接口<;T>;T:在哪里上课 接口,其中T:class,c#,generics,C#,Generics,比如说 interface<T> where T : class 公共接口iSend,其中T:class 上面的代码是什么意思 为什么要用这个 何时使用此功能?来自: 对类型参数的限制 定义泛型类时,可以对客户端代码在实例化类时可用于类型参数的类型应用限制。如果客户机代码试图使用约束不允许的类型实例化类,则结果是编译时错误。这些限制称为约束。 … 其中T:class:类型参数必须是引用类型;这也适用于任何类、接口、委托或数组类型 如果使用此约束,则T必须是引用类型(且无值类型)

比如说

interface<T> where T : class
公共接口iSend,其中T:class
上面的代码是什么意思

为什么要用这个

何时使用此功能?

来自:

对类型参数的限制

定义泛型类时,可以对客户端代码在实例化类时可用于类型参数的类型应用限制。如果客户机代码试图使用约束不允许的类型实例化类,则结果是编译时错误。这些限制称为约束。

其中T:class
:类型参数必须是引用类型;这也适用于任何类、接口、委托或数组类型

如果使用此约束,则
T
必须是引用类型(且无值类型)


您这样做是为了能够使用
null
,因为引用类型可以是
null
,而值类型不能。

有所谓的泛型类型约束

上面的代码意味着,您有一个通用接口
iSend
,它只接受一个引用类型作为类型参数

如果您想将
iSend
的类型参数限制为引用类型

请查看我在此处的完整帖子:其中讨论了不同类型的泛型约束

它是引用类型约束

约束确保类型参数是引用类型。i、 e类、接口、委托、数组等

public interface iSend<T> where T : class
接口iSend,其中T:class
范例

interface iSend<T> where T : class
有效无效
A
A
A.
注:
应用多个约束时,始终放在第一位。

为什么要使用此选项?什么时候使用这个?@MARKANDBhatt我没有适用于接口的示例,有些情况下,您可能希望约束引用类型:当您依赖ReferenceEquals时,当您使用弱引用时,或者当您希望能够对复杂类型执行原子读写时。泛型类型的变量应该可以为null,这也可能是一种简写。你应该阅读c#中的泛型,而不是质疑它。以下是有关MSDN的文章,另请参见:
Valid             InValid
A<MyClass>        A<int>
A<InterfaceME>    A<float>   
A<float[]>