在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
相同,只是它允许您只存储T
types的项目。 这提供了types安全性 – 您不能(意外地或以其他方式)将错误types的项目放入列表中。 System.Collections.Generic
命名空间包含几个其他不同的集合types,利用这个。
至于你在哪里可以使用它 – 这取决于你。 有许多用例不时出现。 大多数情况下它是某种自制的collections品(当内build的collections不足时),但它可能确实是任何东西。
最好的办法是让自己熟悉networking上的“generics”,这里有很多资源
T不是一个关键字,而是一个名字,可以是我所知道的任何东西,但是T是约定(当只有一种types是需要的时候,
这意味着“任何阶级”。 可以是“B”,“A”等等。 我认为T是因为“模板”
T
是generics类中的types参数的名称。 它代表“types”,但你可以称之为“爱丽丝”。
您可以使用generics以types安全的方式提高可重用性,而不必不必要地复制代码。 因此,您不需要为ListOfStrings
, ListOfStrings
, ListOfChars
, ListOfPersons
等编写类,而是可以编写generics类List<T>
,然后实例化types为List<Int32>
, List<string>
, List<char>
和List<Person>
。 编译器为你做的工作。