我理解泛型的基础知识,即它是验证并由编译器删除。我看到很多像这样的代码:
Public Class Person(Of T)
End Class
我不完全明白T是什么。我希望我的问题域中不存在像Of Person或Of Order这样的东西。
我相信这就是说类中对T的所有引用都必须是类实例,但我不确定。
我花了一些时间谷歌搜索这个,我甚至重读了我所拥有的面向对象教科书的泛型部分。我还没有找到答案。
答案 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
是关键字。