什么是MissingMethodException
試圖動態訪問不存在的方法時引發的異常。
- 繼承
說明
通常, 如果代碼嘗試訪問不存在的類方法, 則會生成編譯錯誤。 MissingMethodException旨在處理嘗試動態訪問未通過其強名稱引用的程序集的已重命名或已刪除方法的情況。 MissingMethodException當依賴程序集中的代碼嘗試訪問已修改的程序集中缺少的方法時, 將引發。
HRESULT
MissingMethodException使用具有值0x80131513 的 HRESULT COR_E_MISSINGMETHOD。
示例
此示例演示當你嘗試使用反射來調用不存在的方法並訪問不存在的字段時會發生的情況。 應用程序通過捕獲MissingMethodException、 MissingFieldException和MissingMemberException來恢復。
using namespace System; using namespace System::Reflection; ref class App { }; int main() { try { // Attempt to call a static DoSomething method defined in the App class. // However, because the App class does not define this method, // a MissingMethodException is thrown. App::typeid->InvokeMember("DoSomething", BindingFlags::Static | BindingFlags::InvokeMethod, nullptr, nullptr, nullptr); } catch (MissingMethodException^ ex) { // Show the user that the DoSomething method cannot be called. Console::WriteLine("Unable to call the DoSomething method: {0}", ex->Message); } try { // Attempt to access a static AField field defined in the App class. // However, because the App class does not define this field, // a MissingFieldException is thrown. App::typeid->InvokeMember("AField", BindingFlags::Static | BindingFlags::SetField, nullptr, nullptr, gcnew array<Object^>{5}); } catch (MissingFieldException^ ex) { // Show the user that the AField field cannot be accessed. Console::WriteLine("Unable to access the AField field: {0}", ex->Message); } try { // Attempt to access a static AnotherField field defined in the App class. // However, because the App class does not define this field, // a MissingFieldException is thrown. App::typeid->InvokeMember("AnotherField", BindingFlags::Static | BindingFlags::GetField, nullptr, nullptr, nullptr); } catch (MissingMemberException^ ex) { // Notice that this code is catching MissingMemberException which is the // base class of MissingMethodException and MissingFieldException. // Show the user that the AnotherField field cannot be accessed. Console::WriteLine("Unable to access the AnotherField field: {0}", ex->Message); } } // This code produces the following output. // // Unable to call the DoSomething method: Method 'App.DoSomething' not found. // Unable to access the AField field: Field 'App.AField' not found. // Unable to access the AnotherField field: Field 'App.AnotherField' not found.