我们说我有一个这样的课程:
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
答案 0 :(得分:3)
C#不允许在switch
上typeof
。但是,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
将正确地直接分派给正确的方法。如果代码中有多个位置,其行为需要在不同的类中变化,只需定义更多静态(共享)委托。