等级(T) - 什么是T?

时间:2013-12-03 23:33:29

标签: vb.net generics

我理解泛型的基础知识,即它是验证并由编译器删除。我看到很多像这样的代码:

Public Class Person(Of T)

End Class

我不完全明白T是什么。我希望我的问题域中不存在像Of Person或Of Order这样的东西。

我相信这就是说类中对T的所有引用都必须是类实例,但我不确定。

我花了一些时间谷歌搜索这个,我甚至重读了我所拥有的面向对象教科书的泛型部分。我还没有找到答案。

3 个答案:

答案 0 :(得分:1)

这是一个参数;虽然T是最常用的名称,但其他名称也是可能的。如果考虑方法定义:

Sub Foo(Bar As Integer)

类型定义中的T与方法定义中的Bar扮演的角色大致相同。关于泛型类型参数最值得注意的是与参数定义不同,参数定义在VB的合理(Option Strict Off)方言中必须始终指定类型[As Integer],泛型类型参数可以指定约束类型{{ 1}}但不要求这样做。此外,即使指定了约束类型,Class Foo(Of T As Control)也不是T实例,而是派生所需的类型Control

答案 1 :(得分:0)

T代表Type。 (但在C ++中它是模板)

这意味着该方法是静态的或通用的。

T本身表示该方法是通用的。

如果你理解泛型,那么你应该知道它是一种占位符。 (如果我理解正确的话)

这应解释原因

Public Class Person(Of T)

End Class

就像公共类(________(类型)______)

VB.net: What is static T (C#) in VB.net?

http://msdn.microsoft.com/en-us/library/ms379564%28VS.80%29.aspx

答案 2 :(得分:0)

它只是一个占位符,表示将在运行时定义Type:

Public Class Elements(Of T)
    Private mList as List(of T)

...
End Class

...

Friend El as New Elements(of String)

我的代码创建一个El对象并将T(String)传递给Class,我可以用它来定义内部工作。这是一种使用类型化对象的方法,而不是继承每种可能的数据类型的大量类,或者只是声明像Object这样的东西。

有时候你会看到其中的两个:

Foo(Of T, Of TT)

这只意味着稍后要定义2种类型。 T没有什么特别之处 - 只是惯例,Of是关键字。