VB.NET未知类型的通用变量

时间:2015-05-27 16:13:13

标签: .net vb.net generics

在其中一个方法中,我需要未指定泛型类型Public Class SWTTField(Of dataType)的变量,只有在知道dataType的类型时才会实例化。但是,我无法创建变量Dim f As SWTTField,因为它会给我一个错误To few type arguments to SWTTField(Of dataType)。如何延迟指定泛型变量的类型,但仍然有变量?

1 个答案:

答案 0 :(得分:3)

为了做到这一点,您还需要使用它的类是通用的。例如,假设您有一个使用通用列表的类,如下所示:

Public Class Registry
    Private _items As New List(Of Object)()

    Public Sub Register(item As Object)
         _items.Add(item)
    End Sub
End Class

但你不希望它成为List(Of Object)。相反,您希望它是List(Of ?),它将是某个特定类型的列表,但您希望稍后在其他地方指定该类型。在这种情况下,您只需要使外部类也是通用的,如下所示:

Public Class Registry(Of T)
    Private _items As New List(Of T)()

    Public Sub Register(item As T)
         _items.Add(item)
    End Sub
End Class

然后,当您使用Registry类时,您将被迫指定它注册的项目的类型:

Dim x As New Registry(Of User)()