首頁 >後端開發 >C++ >在 C# 中實例化泛型類型時如何將參數傳遞給建構子?

在 C# 中實例化泛型類型時如何將參數傳遞給建構子?

Susan Sarandon
Susan Sarandon原創
2025-01-22 13:46:10336瀏覽

How Can I Pass Arguments to a Constructor When Instantiating a Generic Type in C#?

將建構子參數傳遞給 C# 中的泛型型別

在 C# 中使用參數化建構函式建立泛型類型的實例可能會帶來挑戰。 嘗試直接實例化通常會導致錯誤:「建立變數實例時無法提供參數」。這是因為編譯器在編譯時並不知道具體的建構函式簽章。

new() 限制僅允許無參數建構子。要處理帶有參數的建構函數,常見的解決方案涉及使用工廠方法(通常表示為委託)。

以下是實現此目標的方法:

不要直接實例化泛型類型,而是將委託(例如 Func)傳遞給泛型方法。該委託將充當工廠,負責使用必要的建構函數參數來建立物件。

範例:

<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> factoryMethod) {
  // ...
  List<T> tabListItems = new List<T>();
  foreach (ListItem listItem in listCollection) 
  {
    tabListItems.Add(factoryMethod(listItem));
  }
  // ...
}</code>

GetAllItems 方法現在接受 Func<ListItem, T> 委託。 該委託接受 ListItem 作為輸入並傳回 T 類型的實例。

用法:

<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l)); </code>

在此範例中,lambda 表達式 l => new Foo(l) 用作工廠方法。它需要一個 ListItem (l) 並使用它透過 Foo 的建構子建立一個新的 Foo 物件。 這有效地將 ListItem 參數傳遞給 Foo 建構子。

透過將物件建立邏輯與泛型方法本身分離,這種方法允許靈活地實例化泛型類型,即使是那些具有參數化建構函數的類型。

以上是在 C# 中實例化泛型類型時如何將參數傳遞給建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn