1

好的,我确实有这样的课。

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

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

4

1 回答 1

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类型传递。

此外,您没有使用(例如,上面)和GetMethod的实例化对象;我不能 100% 确定您需要这样做(也许您可以按照自己的意愿完成),但是执行此步骤是一个非常快速的过程,并且可以让上面的代码毫无问题地工作。ClassAobjAinstance.GetType()

于 2013-07-31T09:46:44.077 回答