使用反射呼叫帶參數的方法
問題描述:
嘗試透過反射呼叫帶參數的方法時,遇到異常「物件與目標類型不符」。但是,如果呼叫不帶參數的方法,則可以成功執行。
解:
要解決此問題,請確保在呼叫方法時使用了正確的實例。在“else”區塊中的以下行中,將“methodInfo”替換為“classInstance”:
<code class="language-csharp">result = methodInfo.Invoke(classInstance, parametersArray);</code>
詳細解釋:
在物件導向程式設計中,每個方法都與一個物件實例關聯。透過反射呼叫方法時,務必提供正確的實例以執行呼叫。在提供的程式碼中,“Run”方法定義為“Main”類別的實例方法。因此,必須在該類別的實例上呼叫它。
最初,嘗試使用「methodInfo」作為「Invoke」方法的第一個參數來呼叫該方法。但是,「methodInfo」表示MethodInfo對象,而不是「Main」類別的實例。 「classInstance」變數(先前使用「Activator.CreateInstance」建立)保存了應該用於呼叫的實例。
透過修改程式碼以使用「classInstance」作為第一個參數呼叫方法,提供了正確的實例,並且該方法可以成功地使用指定的參數呼叫。
修改後的程式碼:
<code class="language-csharp">... if (parameters.Length == 0) { // 这部分工作正常 result = methodInfo.Invoke(classInstance, null); } else { object[] parametersArray = new object[] { "Hello" }; // 现在调用可以正常工作了 result = methodInfo.Invoke(classInstance, parametersArray); } ...</code>
以上是為什麼在呼叫參數化方法時我的反射程式碼會拋出「物件與目標類型不符」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!