首頁 >後端開發 >C++ >除了 Assembly.LoadFile() 之外,如何在 C# 中動態載入和使用 DLL 中的方法?

除了 Assembly.LoadFile() 之外,如何在 C# 中動態載入和使用 DLL 中的方法?

Susan Sarandon
Susan Sarandon原創
2025-01-14 09:35:43265瀏覽

How Can I Dynamically Load and Use Methods from a DLL in C# Beyond Assembly.LoadFile()?

C# 中的動態 DLL 載入

在 C# 中,開發人員經常需要動態載入動態連結程式庫 (DLL),尤其是在使用第三方程式庫或執行時間設定時。本文旨在解決關於使用 Assembly.LoadFile() 方法的局限性這一常見問題中提出的問題,並提供基於反射和動態物件的解決方案。

Assembly.LoadFile() 的限制

如問題所述,使用 Assembly.LoadFile() 可以成功載入 DLL 並允許檢索類別名稱等資訊。但是,可能無法直接呼叫載入的 DLL 中的方法。

反射作為解

為了克服此限制,開發人員可以使用反射,它能夠在運行時動態呼叫方法和操作物件。為此:

  1. 取得類別的 Type 物件:var type = DLL.GetExportedTypes().FirstOrDefault();

  2. 建立類別的實例:var c = Activator.CreateInstance(type);

  3. 使用 InvokeMember() 方法呼叫目標方法:

    <code class="language-csharp"> type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] { "Hello" });</code>

.NET 4.0 中的動態物件

對於目標為 .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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn