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中文网其他相关文章!