interface <t>其中T:class </t>

时间:2014-02-14 11:47:38

标签: c# generics

interface<T> where T : class

例如

public interface iSend<T> where T : class

上述代码是什么意思?

为什么要使用它?

何时使用?

3 个答案:

答案 0 :(得分:5)

来自docs

  

类型参数的约束

     

定义泛型类时,可以对实例化类时客户端代码可用于类型参数的类型类型应用限制。如果客户端代码尝试使用约束不允许的类型来实例化您的类,则结果是编译时错误。这些限制称为约束    ...
  where T : class:type参数必须是引用类型;这也适用于任何类,接口,委托或数组类型。

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

你这样做,例如能够使用null,因为引用类型可以是null而值类型不能。{/ p>

答案 1 :(得分:5)

在此处查看我的完整帖子:Constrain on custom generic type,其中讨论了不同类型的通用约束

参考类型约束

约束确保类型参数是引用类型。即类,接口,代表,数组等。

interface iSend<T> where T : class

实施例

Valid             InValid
A<MyClass>        A<int>
A<InterfaceME>    A<float>   
A<float[]>  

注意: 当应用多个约束时,总是先到。

答案 2 :(得分:2)

称为泛型类型约束。

上面的代码表示你有一个通用接口iSend,它只需要一个引用类型作为类型参数

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