在c#中,“T:class”是什么意思?

时间:2010-09-24 11:55:16

标签: c# syntax

在C#中where T : class是什么意思?

IE中。

public IList<T> DoThis<T>() where T : class

10 个答案:

答案 0 :(得分:97)

简单地说,这是将泛型参数约束到一个类(或者更具体地说是一个可以是类,接口,委托或数组类型的引用类型)。

有关详细信息,请参阅此MSDN article

答案 1 :(得分:37)

这是generic type constraint。在这种情况下,它意味着泛型类型T必须是引用类型(类,接口,委托或数组类型)。

答案 2 :(得分:33)

这是T的类型约束,指定它必须是一个类。

where子句可用于指定其他类型约束,例如:

where T : struct // T must be a struct
where T : new()  // T must have a default parameterless constructor
where T : IComparable // T must implement the IComparable interface

有关详细信息,请查看where clausegeneric parameter constraints上的MSDN页面。

答案 3 :(得分:13)

这会将T限制为引用类型。您将无法在其中放置值类型(struct和基本类型,除了string)。

答案 4 :(得分:9)

这意味着当使用泛型方法时,用作T的类型必须是一个类 - 即它不能是结构或内置数字,如intdouble

// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();

答案 5 :(得分:7)

where T: class字面意思是 T has to be a class 。它可以是任何引用类型。现在,只要有任何代码调用您的DoThis<T>()方法,它就必须提供一个类来替换 T 。例如,如果我打电话给你的DoThis<T>()方法,那么我将不得不称之为:

DoThis<MyClass>();

如果你的方法如下:

public IList<T> DoThis<T>() where T : class
{
   T variablename = new T();

   // other uses of T as a type

}

然后在你的方法中出现T的地方,它将被MyClass取代。因此,编译器调用的最终方法如下所示:

public IList<MyClass> DoThis<MyClass>() 
{
   MyClass variablename= new MyClass();

  //other uses of MyClass as a type

  // all occurences of T will similarly be replace by MyClass
 }

答案 6 :(得分:4)

它被称为类型参数约束。实际上它限制了T的类型。

  

type参数必须是引用   类型;这也适用于任何类,   接口,委托或数组类型。

Constraints on Type Parameters (C# Programming Guide)

答案 7 :(得分:4)

T代表一个对象类型,它暗示你可以给出任何类型的。 IList:如果IList s =新的IList; 现在s.add(“总是接受字符串。”)。

答案 8 :(得分:2)

这里T指的是Class.It可以是引用类型。

答案 9 :(得分:1)

'T'代表通用类型。这意味着它可以接受任何类型的类。以下文章可能有所帮助:

http://www.15seconds.com/issue/031024.htm