假设我有一个页面测试。与test.aspx.vb.
Test.aspx.vb包含一个类名"TestClass"。在这个类中我有method1() method2()和method3()
我需要能够调用其中一个方法,但我不能硬编码,要执行的方法来自一个字符串。
我不能做
Select Case StringContainingTheNameOfTheDesiredMethod
Case "Method1"
Method1()
Case "Method2"
Method2()
end case
.
我可以找到如何做反射(我跟随那个例子)。我的问题是这些方法可能需要与test交互。但是当我使用.invoke时,它似乎创建了一个新的线程或上下文以及任何对test的引用。Aspx变为null(设置label1)。Text = "something"将生成一个空引用,但是直接调用method1(不调用)将更新label1。文字很好。
有解决办法吗?有人能给我一些建议吗?
您需要将Test page的实例传递给Invoke
方法(因此您调用它on the object
)。抱歉c#代码;-)
MethodInfo method = typeof(TestPage).GetMethod(StringContainingTheNameOfTheDesiredMethod);
method.Invoke(this, null);
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() {})