首頁 > 後端開發 > C++ > 如何在 C# 中使用參數化建構函式實例化泛型型別?

如何在 C# 中使用參數化建構函式實例化泛型型別?

Susan Sarandon
發布: 2025-01-09 12:27:49
原創
924 人瀏覽過

C#泛型型別及帶參數建構子的實例化

假設你有一個接受泛型類型的泛型方法,並且你想用特定的建構子參數實例化該類型的實例。然而,該類型的建構函數需要一個參數,你不知道是否可以這樣做。

以下程式碼片段示範了在泛型方法中建立水果物件的嘗試:

<code class="language-csharp">public void AddFruit<T>() where T : BaseFruit
{
    BaseFruit fruit = new T(weight); /*new Apple(150);*/
    fruit.Enlist(fruitManager);
}</code>
登入後複製

這種方法可能會失敗,因為BaseFruit沒有無參數建構子。它需要一個整數參數來指定水果的重量。

為了解決這個問題,C#提供了Activator類別。你可以使用Activator.CreateInstance方法來建立類型的實例,並傳遞一個物件陣列作為建構函數的參數:

<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
登入後複製

注意,對T使用new()限制只能確保編譯器在編譯時檢查公有無參數建構子。用於建立類型的實際程式碼由Activator類別處理。

雖然這種方法允許你實例化帶有參數化建構子的類型,但必須確保類型定義中存在特定的建構子。依賴這種方法可能表示潛在的程式碼異味,建議你應該探索其他設計方案。

How Can I Instantiate Generic Types with Parameterized Constructors in C#?

以上是如何在 C# 中使用參數化建構函式實例化泛型型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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