首頁 > 後端開發 > C++ > 如何使用反射建立具有動態類型規格的通用 C# 物件?

如何使用反射建立具有動態類型規格的通用 C# 物件?

Mary-Kate Olsen
發布: 2025-01-22 09:41:08
原創
949 人瀏覽過

How Can I Create Generic C# Objects with Dynamic Type Specification Using Reflection?

使用反射來建立具有動態型別規格的 C# 泛型物件

在 C# 中,您可能需要動態建立泛型對象,例如 Task 類別的實例,其中類型 T 事先未知。可以使用 Activator.CreateInstance 方法結合 C# 反射來解決此問題。

要動態建立泛型 TaskA 或 TaskB 對象,請依照下列步驟操作:

  1. 確定泛型類別類型: 使用 Type.GetType() 取得泛型類別的類型信息,例如「namespace.TaskA」或「namespace.TaskB」。
  2. 指定泛型型別參數: 決定泛型類別的型別參數,例如 typeof(Item)。
  3. 建立泛型類型: 使用 MakeGenericType 在泛型類別類型上建立特定的泛型類型,例如 makeme = d1.MakeGenericType(typeArgs)。
  4. 建立實例: 使用 Activator.CreateInstance 建立動態產生的泛型類型的實例,例如 object o = Activator.CreateInstance(makeme)。

例如:

<code class="language-csharp">Type d1 = Type.GetType("namespace.TaskA`1");
Type[] typeArgs = { typeof(Item) };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);</code>
登入後複製

如果泛型類別接受多個型別參數,請確保在省略型別名稱時包含逗號,例如:

<code class="language-csharp">Type type = typeof(IReadOnlyDictionary<,>); </code>
登入後複製

注意: 程式碼範例中假設 "namespace.TaskA1" 和Item是已定义的类型。 实际应用中,需要根据您的具体项目替换这些占位符。 此外,错误处理(例如,处理Type.GetType()` 傳回 null 的情況)在生產環境中至關重要。

以上是如何使用反射建立具有動態類型規格的通用 C# 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板