2011-10-05 60 views
1

假设我有一个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”将生成空引用,但方法1(不调用)的直接调用将更新label1.text就好了。

有没有什么解决办法吗?谁能给我一些建议吗?

+0

究竟你难道不能硬编码?方法字符串或方法调用自己? –

+0

我能找到的唯一解决方案是调用一个方法,该方法返回一个对象并将该对象用作数据源与test.aspx进行交互,但由于所有方法都已经在test.aspx.vb中,因此它会更简单我可以简单地在这些方法中与test.aspx进行交互。 – David

+0

我需要找到一种方法来避免选择的情况下(或如果语句)调用?方法。我有一个字符串,其中包含需要调用的方法的名称,在完美的世界中,我会简单地执行诸如excecuteMethod(StringWithMethodName) – David

回答

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() {}) 
1

您需要通过测试的实例到Invoke方法页(所以你调用它on the object)。对不起,C#代码;-)

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

这帮了我,谢谢。 – David

+1

很高兴听到这个消息 - 请问您能接受答案吗? –

+0

嗯,它帮助我找到答案,但它不是确切的答案......所以我提出了你的评论和答案。 – David

相关问题