如何从字符串变量调用子例程?

时间:2015-05-05 12:12:45

标签: vb.net string converter subroutine

使用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

如何使用字符串从不同的模块调用正确的子例程?

2 个答案:

答案 0 :(得分:0)

查看System.Reflection命名空间,它包含一个名为MethodInfo的类。

您可以使用方法名称获取给定对象的MethodInfo,然后调用它:

Dim method As MethodInfo = obj.GetType().GetMethod(methodName, BindingFlags.Instance Or BindingFlags.Public)
method.Invoke()

答案 1 :(得分:0)

source

有一个函数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