本文探討如何在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
類別具有一個需要整數weight
作為參數的建構子。
問題: 我們能否在這個泛型方法中,使用特定重量實例化一個水果物件?
答案: 可以,但不能直接像範例。有兩種方法:
1. 使用Activator類別:
利用Activator
類,我們可以動態實例化類型為T
的對象,並將所需參數作為對象數組傳遞:
<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
請注意,這需要BaseFruit
類別具有一個公共的無參數建構函數,以便編譯器進行檢查,但實際上它使用Activator
類別來建立實例。
2. 使用帶建構子的泛型參數:
C#限制了使用需要參數的建構子來實例化泛型類型。作為變通方法,您可以建立一個與類型同名的泛型參數,並在其定義中指定建構函式參數:
<code class="language-csharp">public void AddFruit<T>(T fruit) where T : new(int weight) { fruit.Enlist(fruitManager); } // 使用示例: AddFruit(new Apple(150));</code>
然而,這種方法通常不被推薦,因為它可能導致與泛型類型中建構函數要求相關的程式碼異味。
以上是可以在 C# 中實例化具有參數化建構函數的泛型類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!