C#中的方差特性指的是類型參與協變或逆變賦值的能力。然而,在C# 2.0中嘗試將List賦值給List會面臨一些限制,這可能導致不安全的方差:
<code class="language-csharp">List<动物> animalsList = new List<长颈鹿>();</code>
即使顯式轉換也會失敗,這凸顯了方差問題。需要明確的是,這不是協變問題,協變問題會在以後的C#版本中解決。事實上,為了確保編譯時類型安全,這種賦值是被明確禁止的。
方差潛在的風險可以通過以下示例來說明:
<code class="language-csharp">List<长颈鹿> giraffes = new List<长颈鹿>(); giraffes.Add(new 长颈鹿()); List<动物> animals = giraffes; animals.Add(new 狮子());</code>
這段代碼看似無害,但可能導致意外行為和數據損壞。將派生類型(獅子)賦值給基類型(動物)允許違反類型安全規則。
儘管數組支持運行時檢查的引用類型方差,但泛型旨在實現編譯時類型安全。
在C# 4中引入了安全的方差支持,但僅限於接口和委託。協變允許用於Func
對於C# 2.0的解決方法,建議使用List
以上是為什麼我不能將列表分配給C#2.0中的列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!