C#中"T"是什么意思?

Jim*_*Jim 74 .net c# generics

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

public class SomeBase<T> where T : SomeBase<T>, new()
Run Code Online (Sandbox Code Playgroud)

怎么T办?我为什么要使用它?

use*_*603 50

它是泛型类型参数的符号.它也可能是其他东西,例如:

public class SomeBase<GenericThingy> where GenericThingy : SomeBase<GenericThingy>, new()
Run Code Online (Sandbox Code Playgroud)

只有T是Microsoft使用和鼓励的默认值.


Rob*_*ker 45

T不是关键字本身,而是泛型类型的占位符.请参阅Microsoft的泛型简介

等效的VB.Net语法是:

Public Class SomeBase(Of T As {Class, New}))
Run Code Online (Sandbox Code Playgroud)


bio*_*inc 15

用于代替T的另一个名称的一个很好的例子would是哈希表类,例如

public class Dictionary<K,V> ...
Run Code Online (Sandbox Code Playgroud)

K代表重点和V对价值.我认为T代表类型.

你可能已经看过这个了.如果你可以建立连接,它应该是相当有用的.


Yos*_*han 5

最好的方法是让自己熟悉“泛型”,网络上有很多资源,这里有一个

T 不是关键字而是名称,据我所知,可以是任何东西,但 T 是约定(当只需要一种类型时,当然)


Vil*_*lx- 5

这将是一个"通用".正如人们已经提到的那样,微软对这个概念有一个解释.至于为什么"T" - 看到这个问题.

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

至于你可以在哪里使用它 - 这取决于你.有许多用例不时出现.大多数情况下它是某种自制的系列(当内置的系列不够时),但它确实可以是任何东西.