如何确定泛型类VB.NET中的类型

时间:2015-02-18 15:41:28

标签: vb.net generics

我们说我有一个这样的课程:

Public Class(Of T As Bar) Foo
...
End Class

我想设置如下内容:

Public Class(Of T As Bar) Foo
    Public Sub New()
        Select T
        Case Class1 'Inherits Bar
            'do stuff
        Case Class2 'Inherits Bar
            'do stuff
        Case Class3 'Inherits Bar
            'do stuff
        End Select
    End Sub
End Class

显然 这项工作没有成功,但您可以从这个片段中了解我尝试做的事情。那么如何正确地确定传递给VB.NET中构造函数的Type?令人惊讶的是,我还无法在Stack Overflow上找到任何关于此问题的内容。

C#具有以下语法:

Type typeParameterType = typeof(T);

然而,

Dim typeParameterType As Type = TypeOf T

不起作用,也不起作用

Dim typeParameterType As Type = T

2 个答案:

答案 0 :(得分:3)

C#不允许在switchtypeof。但是,VB允许它,所以你可以尝试这样的事情:

Public Class Foo(Of T As Bar)
    Public Sub New()
        Select Case GetType(T)
            Case GetType(BarA)
                ' Do stuff

            Case GetType(BarB)
                ' Do stuff
        End Select
    End Sub
End Class

答案 1 :(得分:1)

我发现这样做的最有效方法是将委托作为通用类的静态(共享)成员,该成员在静态构造函数中分配。类似的东西:

Public Class Foo(Of T As Bar)
    Shared DoStuff As Action(of T) = AddressOf NormalDoStuff
    Shared Sub New()
      Foo(Of Class1).DoStuff = AddressOf Class1DoStuff
      Foo(Of Class2).DoStuff = AddressOf Class2DoStuff
      Foo(Of Class3).DoStuff = AddressOf Class3DoStuff
    End Sub

    Public Sub New(SomeParameter As T)
        DoStuff(SomeParameter)
    End Sub
End Class

这种方法需要在第一次尝试使用具有特定泛型类型的类时执行一些额外的工作,但在此之后DoStuff将正确地直接分派给正确的方法。如果代码中有多个位置,其行为需要在不同的类中变化,只需定义更多静态(共享)委托。