首页 > 后端开发 > C++ > 为什么协方差和违规行为与C#中的价值类型不起作用?

为什么协方差和违规行为与C#中的价值类型不起作用?

Susan Sarandon
发布: 2025-01-30 21:16:10
原创
114 人浏览过

Why Don't Covariance and Contravariance Work with Value Types in C#?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板