当方法名称包含在字符串中时调用方法

时间:2011-10-05 22:11:33

标签: asp.net vb.net reflection

假设我有一个页面Test.aspx以及test.aspx.vb。

Test.aspx.vb包含一个类名“TestClass”。在那个类中,我有method1(),method2()和method3()

我需要能够调用其中一种方法,但我不能硬编码,要执行的方法来自字符串。

我无法做到

Select Case StringContainingTheNameOfTheDesiredMethod
    Case "Method1" 
        Method1()
    Case "Method2"
       Method2()
end case

我可以找到如何处理反射(I followed that example)。我的问题是那些方法可能需要与test.aspx交互,但是当我使用.invoke时,它似乎创建了一个新的线程或上下文,并且对test.aspx的任何引用都变为null(设置label1.text =“something”将生成一个null引用,但是直接调用method1(没有调用)会更新label1.text就好了。

有什么解决方案吗?谁能给我一些提示?

2 个答案:

答案 0 :(得分:1)

您需要将Test页面的实例传递给Invoke方法(因此您调用它on the object)。抱歉C#代码; - )

MethodInfo method = typeof(TestPage).GetMethod(StringContainingTheNameOfTheDesiredMethod);
method.Invoke(this, null);

答案 1 :(得分:1)

    Dim xAssembly As Assembly = Assembly.GetExecutingAssembly()

    Dim xClass As Object = xAssembly.CreateInstance("Paradox.Intranet2.ManageUsers", False, BindingFlags.ExactBinding, Nothing, New Object() {}, Nothing, Nothing)
    Dim xMethod As MethodInfo = xAssembly.GetType("Paradox.Intranet2.ManageUsers").GetMethod("TestCallFromString")

    Dim ret As Object = xMethod.Invoke(Me, New Object() {})