將參數注入到泛型建構函式實例
在需要建立特定型別實例的泛型方法的脈絡中,出現了問題:我們如何處理該類型的建構函數需要參數的情況?考慮這樣一種情況:BaseFruit 擁有一個接受整數權重的建構子。我們可以透過以下方式在通用方法中實例化一個水果嗎:
public void AddFruit<T>() where T: BaseFruit { BaseFruit fruit = new T(weight); // new Apple(150) fruit.Enlist(fruitManager); }
在提供的範例中,我們可以觀察到嘗試實例化權重為 150 的 Apple 實例。但是,這種方法並不可行除非 BaseFruit 配備無參數建構函數,允許隨後分配成員變量,否則可行。不幸的是,在實際場景中,這種方法可能不方便。
為了解決這個問題,我們可以利用Activator 類,如以下簡化範例所示:
return (T)Activator.CreateInstance(typeof(T), new object[] { weight });
請注意,使用T 上的new() 限制只是為了確保編譯器在編譯期間驗證公有無參數建構函式是否存在。 Activator 類別最終負責類型建立流程。
驗證您打算使用的特定建構函式是否存在至關重要。此外,值得考慮這樣的要求是否必要,因為它可能表明當前 C# 實作中可以避免的程式碼設計問題。
以上是如何將參數注入到 C# 中的泛型建構函數實例中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!