1
我只是測試反映事情的好奇心,我嘗試調用私有方法,但我找不到它,因爲是Private
。如何通過反射調用非公開方法而不用擔心方法的可見性?
但我真正想知道的是,如果該方法的可視性可以在反射搜索不用擔心,如果調用該方法是私有的,共享的,朋友,公共等被自動檢索...所以有BindingFlags
標誌組合能夠漠然其中的方法知名度?我的意思是調用一個方法,而不用擔心將方法可視性。
這裏是我的代碼:
Public Class Form1
Private Shadows Sub Load() Handles MyBase.Load
Dim Method As System.Reflection.MethodInfo = Me.GetType().GetMethod("Test")
If Method IsNot Nothing Then
Method.Invoke(Me, BindingFlags.InvokeMethod Or BindingFlags.NonPublic, Nothing,
New Object() {"Hello World!", Type.Missing}, CultureInfo.InvariantCulture)
Else
MsgBox("Method not found or maybe is not public.")
End If
End Sub
Private Sub Test(ByVal Value As String, Optional ByVal Value2 As Integer = 1)
MsgBox(Value)
End Sub
End Class
謝謝,但我已經試過了,我仍然無法調用該方法,代碼是我」 m使用與我在我的問題中發表的相同,但只是用你所說的標誌。如果我將該方法設置爲public,則一切正常,那麼上面的私有方法的代碼有什麼問題? – ElektroStudios
我上面的代碼(使用標誌)不工作了'Private','Friend','Protected'和'保護Friend'方法。 – ElektroStudios
我更仔細地查看了你的代碼。您需要指定相應的BindingFlags當你調用GetMethod擺在首位:'Me.GetType()GetMethod( 「測試」,BindingFlags.Instance或者BindingFlags.Public或者BindingFlags.NonPublic)'。 – jmcilhinney