假设我有一个页面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就好了。
有什么解决方案吗?谁能给我一些提示?
答案 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() {})