使用VB.Net 4和VS2012
我有一个模块,里面有一些逻辑:
Module Mod1
If x = 1 then
Mod2("Mod3","save_it")
else
Mod2("Mod4","edit_it")
end if
End Module
Module Mod2(which_mod, which_action)
' call the correct subroutine
which_mod.which_action()
End Module
如何使用字符串从不同的模块调用正确的子例程?
答案 0 :(得分:0)
查看System.Reflection命名空间,它包含一个名为MethodInfo的类。
您可以使用方法名称获取给定对象的MethodInfo,然后调用它:
Dim method As MethodInfo = obj.GetType().GetMethod(methodName, BindingFlags.Instance Or BindingFlags.Public)
method.Invoke()
答案 1 :(得分:0)
有一个函数CallByName
正是这样做的。
该函数接受4个参数:
对象/类
功能/ PROCNAME
calltype(CallType.method,CallType.Get,CallType.Set)
(可选):参数(在arrayformat中)
第一个参数(对象/类)不能是一个字符串,所以我们必须将你的字符串转换为一个对象。最好的方法是
Dim MyInstance As Object = Activator.CreateInstance(Type.GetType(which_mod))
所以对于你的代码:
Imports Microsoft.VisualBasic.CallType
Imports System.Reflection
Class Mod1
If x = 1 then
Mod2("Mod3","save_it")
else
Mod2("Mod4","edit_it")
end if
End Class
Module Mod2(which_mod, which_action)
' call the correct subroutine
Dim MyInstance As Object = Activator.CreateInstance(Type.GetType(which_mod))
CallByName(MyInstance , which_action, CallType.Method)
End Module