C#泛型型別實例化與建構子參數
在建構泛型類型時,一個常見問題是:如何在泛型方法中實例化一個需要參數的建構子?例如,BaseFruit
類別有一個接收整數類型的重量參數的建構子。
如何在泛型方法中實例化指定重量的水果?
以下程式碼嘗試在泛型方法中建立一個指定重量的水果實例:
<code class="language-csharp">public void AddFruit<T>() where T : BaseFruit { BaseFruit fruit = new T(weight); /*new Apple(150);*/ fruit.Enlist(fruitManager); }</code>
這種方法只有在BaseFruit
具有無參數建構子(隨後透過成員變數修改屬性)的情況下才可行。然而,在實際應用中,這可能並不實用。
替代方案:
可以使用Activator
類別:
<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
這種情況下,對T
的new()
約束確保在編譯時存在一個公共的無參數構造函數,而Activator
類別負責實際的類型創建。
注意事項:
雖然此方案提供了一種解決方法,但必須在程式碼中驗證特定建構函式的存在。此外,依賴此方法可能表示程式碼層面有問題,應盡量避免在目前版本的C#中使用此方法。
以上是泛型型別實例化可以處理 C# 中的建構子參數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!