在C#中建立開放泛型類型(Class
在程式設計中,您可能會遇到需要在一個集合中處理多種類型資料的場景。在這種情況下,泛型可以提供靈活的解決方案。然而,使用開放泛型類型,例如List,有時會導致編譯器錯誤。
假設您有一個表示不同類型資料的類別Data
<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
替代方法
如果您需要維護一個包含不同類型物件的集合,您可以考慮以下替代方法:
以上是如何在 C# 中建立開放泛型類型(類別)清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!