首頁 >後端開發 >C++ >如何從組件和類型名稱動態實例化類別?

如何從組件和類型名稱動態實例化類別?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-19 09:07:13380瀏覽

How Can I Instantiate a Class Dynamically from its Assembly and Type Name?

運行時動態建立類別實例

只知道DLL名稱和類別名,無需在專案中新增組件引用,即可在執行時建立物件實例。此功能特別適用於插件系統或依賴注入等場景。

使用 Assembly.LoadFrom()

要將組件載入到記憶體中,請使用 Assembly.LoadFrom() 方法,並提供 DLL 檔案的路徑:

<code class="language-csharp">Assembly assembly = Assembly.LoadFrom("library.dll");</code>

找 Type 物件

載入組件後,使用反射來定位特定類型:

<code class="language-csharp">Type type = assembly.GetType("Company.Project.Classname");</code>

建立實例

最後,使用 Activator.CreateInstance() 建立該類型的物件實例:

<code class="language-csharp">object instanceOfMyType = Activator.CreateInstance(type);</code>

處理未知 DLL 位置

如果您沒有 DLL 的絕對路徑,則可以依賴 .NET 類型解析機制:

<code class="language-csharp">object instanceOfMyType = Activator.CreateInstance("library.dll", "Company.Project.Classname");</code>

此方法將自動搜尋各種位置,包括應用程式根目錄、system32 和 GAC,以尋找組件並解析類型。

高級訂製

如有必要,您可以透過實作自訂的 DLL 搜尋機制來增強此解決方案,以便搜尋特定目錄中的 DLL。這在您儲存預設類型解析機制未搜尋的其他組件的場景中,將提供更大的靈活性。

以上是如何從組件和類型名稱動態實例化類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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