首頁 > 後端開發 > C++ > 如何在 C# 中建立開放泛型類型(類別)清單?

如何在 C# 中建立開放泛型類型(類別)清單?

Susan Sarandon
發布: 2025-01-11 08:30:10
原創
197 人瀏覽過

How to Create a List of Open Generic Types (Class) in C#?

在C#中建立開放泛型類型(Class)清單的方法

在程式設計中,您可能會遇到需要在一個集合中處理多種類型資料的場景。在這種情況下,泛型可以提供靈活的解決方案。然而,使用開放泛型類型,例如List,有時會導致編譯器錯誤。

假設您有一個表示不同類型資料的類別Data,例如StringData和DecimalData。為了維護這些不同資料類型的列表,您可能會嘗試使用List,如下所示:

<code class="language-c#">List<Data> dataCollection = new List<Data>();</code>
登入後複製

但是,這段程式碼無法編譯,因為編譯器會報錯,指出泛型類型「Data」需要一個型別參數。這是因為,對於開放泛型類型,編譯器在建構清單時無法推斷類型參數。

理解開放與封閉泛型類型

為了解決這個問題,理解開放和封閉泛型類型的差異非常重要。在List的情況下,它表示一個開放泛型類型,這表示類型參數T仍然未指定。另一方面,封閉泛型類型指定了類型參數,例如List>或List>。

建立封閉泛型類型的清單

要建立封閉泛型類型的列表,您需要在建構列表時指定類型參數。例如:

<code class="language-c#">List<Data<string>> stringDataCollection = new List<Data<string>>();
List<Data<decimal>> decimalDataCollection = new List<Data<decimal>>();</code>
登入後複製

這些清單現在可以分別接受StringData和DecimalData的實例。

開放泛型類型多態性的限制

不幸的是,在C#中,沒有直接的機制可以實現開放泛型類型的真正多態性。這表示您無法建立像List>這樣的列表,並在其中儲存不同的封閉類型,例如Data和Data。這是C#泛型設計中的一個限制。

替代方法

如果您需要維護一個包含不同類型物件的集合,您可以考慮以下替代方法:

  • 使用非泛型介面或抽象類別來定義公共行為,並在需要時將物件強制轉換為適當的類型。
  • 使用動態程式設計來提高靈活性,但會犧牲型別安全。
  • 使用可能提供更高階泛型功能的第三方函式庫。

以上是如何在 C# 中建立開放泛型類型(類別)清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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