在 C# 中,開發人員經常需要動態載入動態連結程式庫 (DLL),尤其是在使用第三方程式庫或執行時間設定時。本文旨在解決關於使用 Assembly.LoadFile() 方法的局限性這一常見問題中提出的問題,並提供基於反射和動態物件的解決方案。
如問題所述,使用 Assembly.LoadFile() 可以成功載入 DLL 並允許檢索類別名稱等資訊。但是,可能無法直接呼叫載入的 DLL 中的方法。
為了克服此限制,開發人員可以使用反射,它能夠在運行時動態呼叫方法和操作物件。為此:
取得類別的 Type 物件:var type = DLL.GetExportedTypes().FirstOrDefault();
建立類別的實例:var c = Activator.CreateInstance(type);
使用 InvokeMember() 方法呼叫目標方法:
<code class="language-csharp"> type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] { "Hello" });</code>
對於目標為 .NET 4.0 或更高版本的應用程序,dynamic 關鍵字可以進一步簡化此過程。使用這種方法,您可以直接存取成員,而無需類型反射:
<code class="language-csharp">dynamic c = Activator.CreateInstance(type); c.Output("Hello");</code>
總而言之,雖然 Assembly.LoadFile() 允許載入 DLL,但需要反射或動態物件才能呼叫載入的模組中的方法。根據應用程式的要求,這兩種方法都為在 C# 中執行時間動態載入和使用 DLL 提供了可行的解決方案。
以上是除了 Assembly.LoadFile() 之外,如何在 C# 中動態載入和使用 DLL 中的方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!