似乎是一个模棱两可的问题,但问题是,我有一些像:
Dim a As MyObject
a = GetData(a.GetType)
Function GetData(tp as Type)
DotheWork(tp)
End Function
所以,我想知道是否有任何方法可以省略GetData()中的Type参数,并从赋值左侧的变量中获取它。(基本上是因为我在GetData()中使用反射所以我需要一个来自参数类型的实例)
这可能吗?很多谢谢!
这是不可能的,因为GetData()
是在赋值之前求值的。你能做的是一个通用的方法:
dim a as MyObject = GetData(of MyObject)()
Function GetData(Of T)()
Dim _t As Type = GetType(T)
DotheWork(_t)
End Function
我就是这么做的。
请注意,初始代码中的a.GetType
将失败,因为a是Nothing,并且您的函数不返回任何内容,因此a
将在GetData()
之后也不分配任何内容。
也许你想达到这样的效果:
Function GetData(Of T As { IMyType, New })()
Dim instance As T = Activator.CreateInstance(Of T)()
DotheWork(instance)
Return instance
End Function
Function DotheWork(instance As IMyType)
instance.Init()
End Function
Interface IMyType
Sub Init()
End Interface