假設你有一個接受泛型類型的泛型方法,並且你想用特定的建構子參數實例化該類型的實例。然而,該類型的建構函數需要一個參數,你不知道是否可以這樣做。
以下程式碼片段示範了在泛型方法中建立水果物件的嘗試:
<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
類別處理。
雖然這種方法允許你實例化帶有參數化建構子的類型,但必須確保類型定義中存在特定的建構子。依賴這種方法可能表示潛在的程式碼異味,建議你應該探索其他設計方案。
以上是如何在 C# 中使用參數化建構函式實例化泛型型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!