首頁 > 後端開發 > C++ > 泛型型別實例化可以處理 C# 中的建構子參數嗎?

泛型型別實例化可以處理 C# 中的建構子參數嗎?

Mary-Kate Olsen
發布: 2025-01-09 12:11:42
原創
178 人瀏覽過

Can Generic Type Instantiation Handle Constructor Arguments in C#?

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>
登入後複製

這種情況下,對Tnew()約束確保在編譯時存在一個公共的無參數構造函數,而Activator類別負責實際的類型創建。

注意事項:

雖然此方案提供了一種解決方法,但必須在程式碼中驗證特定建構函式的存在。此外,依賴此方法可能表示程式碼層面有問題,應盡量避免在目前版本的C#中使用此方法。

以上是泛型型別實例化可以處理 C# 中的建構子參數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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