使用VB.Net中的String调用私有方法

时间:2013-07-31 09:23:21

标签: vb.net methods

好的我确实有这样的课。

Namespace mySpace

 Public Class ClassA

     Private Function MethodA(prm AS Boolean) As Boolean
       Return False
     End Function

     Private Function MethodB() As Boolean
       Return False
     End Function

 End Class

 Public Class ClassB

     Private Function MethodC() As Boolean
       Return True
     End Function

     Private Function InvokeA() As Boolean
        Dim methodObj As MethodInfo
        'null pointer except below here
        methodObj = Type.GetType("mySpace.ClassA").GetMethod("MethodA") 
        Dim params As Boolean() = {False}
        Return CBool(methodObj.Invoke(New ClassA(), params)) 
     End Function

 End Class

End Namespace

我在这里尝试的是使用其方法从具有参数的不同类调用方法。但是这会返回一个空指针异常。为什么?哪里出错了?

1 个答案:

答案 0 :(得分:1)

你做错了。以下代码应该没有任何问题:

Dim objA As ClassA = New ClassA()
methodObj = objA.GetType().GetMethod("MethodA", BindingFlags.Instance Or BindingFlags.NonPublic)
Dim params As Object() = {False}
methodObj.Invoke(objA, params)

您有各种错误,根本不允许您的代码运行,即:

  • 您正在检索没有足够的私有方法 BindingFlags
  • 您没有将参数传递为Object类型。

此外,您没有将GetMethodClassA的实例化对象(例如,上面的objA)和instance.GetType()一起使用;我不是100%确定你需要这样做(也许你可以按照你的意愿完成它),但执行这一步是一个非常快速的过程,并允许上面的代码没有任何问题。