首页 > 后端开发 > C++ > 为什么 C# 4.0 不支持协变类?

为什么 C# 4.0 不支持协变类?

Linda Hamilton
发布: 2025-01-12 21:52:43
原创
892 人浏览过

Why Aren't Covariant Classes Supported in C# 4.0?

C# 4.0 协变类的省略:深入了解

C# 4.0 引入了接口的通用变体,支持灵活的类型参数使用。 但是,此功能并未扩展到类。本文深入探讨了这种设计选择背后的基本原理。

实施的障碍

向类(例如,假设的 C<T> 类)引入协变方差带来了重大的实施挑战。 主要限制来自于 T 只能用作输出参数、setter 或字段。

这个约束是字段缺少 getter 的直接结果。 与属性不同,字段不提供只读访问权限。 因此,协变类不能拥有可变状态,严重限制了它的实际应用。

权衡成本和收益

虽然协变不可变类(如列表和堆栈)无疑具有优势,但在 C# 4.0 发布时,支持它们所需的对 C# 类型系统的大量修改并不被认为是合理的。

说明不可变结构中的协方差

以下示例演示了不可变堆栈中的协方差:

<code class="language-csharp">sealed class Stack<out T>
{
    private readonly T head;
    private readonly Stack<T> tail;
}</code>
登录后复制

这允许协变分配:

<code class="language-csharp">Stack<string> strings = null;
strings = strings.Push("hello");
strings = strings.Push("goodbye");
Stack<object> objects = strings; // Covariant assignment
objects = objects.Push(123); //This would be an error if Stack<T> was mutable</code>
登录后复制

由于堆栈的不变性,向堆栈添加整数仍然是类型安全的。 该操作不违反类型安全。

以上是为什么 C# 4.0 不支持协变类?的详细内容。更多信息请关注PHP中文网其他相关文章!

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