在C#中“T”是什么意思?

我有一个VB背景,我转换到C#为我的新工作。 一般来说,我也试图在.NET中变得更好。 我已经在人们发布的样本中看到了很多关键字“T”。 C中的“T”是什么意思? 例如:

public class SomeBase<T> where T : SomeBase<T>, new() 

T做什么? 我为什么要使用它?

这是genericstypes参数的符号。 它也可以是其他的东西,例如:

 public class SomeBase<GenericThingy> where GenericThingy : SomeBase<GenericThingy>, new() 

只有T是微软使用和鼓励的默认产品。

T不是关键字,而是genericstypes的占位符。 请参阅Microsoft的generics简介

等效的VB.Net语法是:

 Public Class SomeBase(Of T As {Class, New})) 

用另一个名字代替T的一个好例子就是哈希表类,例如

 public class Dictionary<K,V> ... 

其中K代表Key和V代表价值。 我认为T代表types。

你可能已经看到了这一点。 如果你能build立联系,那应该是相当有帮助的。

这将是一个“通用”。 正如人们已经提到的, 微软对这个概念有一个解释 。 至于为什么“T” – 看到这个问题 。

简而言之,它允许您创build专门针对特定types的类/方法。 一个经典的例子是System.Collections.Generic.List<T>类。 它与System.Collections.ArrayList相同,只是它允许您只存储Ttypes的项目。 这提供了types安全性 – 您不能(意外地或以其他方式)将错误types的项目放入列表中。 System.Collections.Generic命名空间包含几个其他不同的集合types,利用这个。

至于你在哪里可以使用它 – 这取决于你。 有许多用例不时出现。 大多数情况下它是某种自制的collections品(当内build的collections不足时),但它可能确实是任何东西。

最好的办法是让自己熟悉networking上的“generics”,这里有很多资源

T不是一个关键字,而是一个名字,可以是我所知道的任何东西,但是T是约定(当只有一种types是需要的时候,

这意味着“任何阶级”。 可以是“B”,“A”等等。 我认为T是因为“模板”

T是generics类中的types参数的名称。 它代表“types”,但你可以称之为“爱丽丝”。

您可以使用generics以types安全的方式提高可重用性,而不必不必要地复制代码。 因此,您不需要为ListOfStringsListOfStringsListOfCharsListOfPersons等编写类,而是可以编写generics类List<T> ,然后实例化types为List<Int32>List<string>List<char>List<Person> 。 编译器为你做的工作。