c#协方差和违反:值类型限制
>c#的协方差和违反功能启用灵活的类型分配。 但是,这些功能在使用价值类型时受到限制。
IEnumerable<T>
>表现出协方差,允许分配T
参考对象引用。 这不会扩展到值类型,如说明:
<code class="language-csharp">IEnumerable<string> strList = new List<string>(); IEnumerable<object> objList = strList; // Compiles fine IEnumerable<int> intList = new List<int>(); IEnumerable<object> objList = intList; // Compilation error</code>
这种差异源于拳击。 将值类型分配给参考变量需要拳击 - 创建新的堆分配的对象。 这增加了开销并引入了潜在的运行时问题。
>有了协方差,通用语言运行时(CLR)无法保证保留盒装价值身份。 例如,一种接受和修改元素的方法不能保证object[]
的盒装值保持不变。IEnumerable<int>
>
因此,为了保持类型安全性并防止与拳击相关的错误,不支持C#中的价值类型的协方差和违反率
以上是为什么协方差和违规行为与C#中的价值类型不起作用?的详细内容。更多信息请关注PHP中文网其他相关文章!