泛型接口<T>,其中T是类。

4
interface<T> where T : class

例如
public interface iSend<T> where T : class

以上代码是什么意思?

为什么要使用这个代码?

何时使用这个代码?


3
你应该阅读关于C#中泛型的内容,而不是质疑它。这里是一篇MSDN文章:http://msdn.microsoft.com/en-us/library/512aeb7t.aspx - Sarrus
1
另请参阅:C#中的<T>表示什么 - Theraot
3个回答

9

请查看完整文章:自定义泛型类型的约束条件,其中讨论了不同类型的泛型约束。

这是引用类型约束。

约束确保类型参数为引用类型。即类、接口、委托、数组等。

interface iSend<T> where T : class

示例

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

注意: 当应用多个约束条件时,始终将此放在首位。

5

文档中:

类型参数限制

当定义一个泛型类时,你可以对客户端代码在实例化类时使用的类型参数的种类应用限制条件。如果客户端代码尝试使用不被限制允许的类型来实例化你的类,则会产生编译时错误。这些限制条件称为约束。
...
where T : class: 类型参数必须是引用类型;这同样适用于任何类、接口、委托或数组类型。

如果使用此约束,那么T必须是引用类型(不能是值类型)。

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


2

这些被称为通用类型约束。

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

当您想要限制iSend的类型参数为引用类型时。


为什么要使用它?何时使用它? - MARKAND Bhatt
2
@MARKANDBhatt 我没有适用于接口的示例,一些需要约束为引用类型的情况包括:当您依赖ReferenceEquals时,当您使用弱引用时,或者当您想要对复杂类型进行原子读写时。这也可能是一个简写,表示泛型类型的变量应该能够为空。 - Theraot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接