写点什么

C# 的未来:主构造函数

  • 2020-02-18
  • 本文字数:852 字

    阅读完需:约 3 分钟

C# 的未来:主构造函数

我们上次提到主构造函数是 2014 年,当时,C# 6和VB 12的候选列表上去掉了主构造函数。去年底,主构造函数重新出现,作为提案#2691,现在成为 C# 9 的一个候选项。


主构造函数背后的基本思想是减少初始化类所需的样板代码量。


class C(string x){    public string X    {        get => x;        set {             if (value == null)                 throw new NullArgumentException(nameof(X));             x = value;         }    }}
复制代码


编译为…


class C{    private string _x;        public C(string x)    {        _x = x;    }    public string X    {        get => x;        set {             if (value == null)                 throw new NullArgumentException(nameof(X));             x = value;         }    }}
复制代码


Richard Gibson 对它们的用处进行了总结:


从我们 30 个类的代码库中快速抽样表明,其中的 22 个(73%)已定义了显式构造函数,而有 21 个(>95%)什么也没做,只是设置了私有只读字段)人们很少阅读可以自动生成的代码(通常被跳过,因为它们通常看上去很傻),因此,它们常常是让人大吃一惊的错误来源。


他继续解释道,这些错误通常是因为不小心把构造函数参数赋给了错误的字段。


这个概念跟我们在C#和VB中更简单的不可变对象报告的记录提案有很大的重合。MgSam 写道:


该提案似乎与目前的记录提案完全不相容。我不同意提案中的说法,提案提到这比记录更有用。我认为,这可以节省一些样板记录,而记录(以及自动生成 GetHashCode、Equals 和 ToString 相关的功能)在很多场景中有可能节约大量模板。


HaloFour 也参与了该话题:


按照为 C#提出的记录方式,它们包括对称构造和解构,以及基于一组特定属性的识别。假设这些参数也是属性,那么主构造函数把这些都放在一个参数列表中,并且该列表给我们提供了一个可以解构这些属性的顺序。

正如他们所提出的,C#记录更像 Scala 的 case 类或 F#单例联合,并且,这两种语言都根据它们的构造方式定义构造。


原文链接:


C# Futures: Primary Constructors


2020-02-18 10:1610735

评论

发布
暂无评论
发现更多内容

Easydict for mac(简洁的翻译工具)v2.12.0激活版

Rose

从政府工作报告看北斗应用发展方向

江湖老铁

团队协作的痛点:如何破解项目中任务责任不明确的困局

axe

项目管理 项目管理软件 项目协作 项目协作工具 办公工具

数字水印系统(源码+文档+讲解+演示)

深圳亥时科技

当代企业财务规划新方式:从风险管理转向长期可持续发展

智达方通

企业管理 全面预算管理 财务转型 财务规划 财务预测

AI测试实战:从代码扫描到缺陷预测,如何实现90%覆盖率跃升?

测试人

人工智能 软件测试

主流远控软件横评:画质、性能、功能全覆盖,带你找出最靠谱的一款!

科技热闻

初步探索SQL Server 2025 AI相关能力

伤感汤姆布利柏

DeepSeek们,会让文科无用吗?

脑极体

AI

《Operating System Concepts》阅读笔记:p228-p257

codists

操作系统

CAD怎么偏移图形对象?详细教程来了!

在路上

cad cad看图 CAD看图王

特斯拉、宇树、Figure AI核心供应链企业梳理与商业化壁垒,「汇丰银行」人形机器人研报解读

机器人头条

机器人 科技 人形机器人 具身智能

DeepSeek的开源之路:一文读懂从V1-R1的技术发展,见证从开源新秀到推理革命的领跑者

京东科技开发者

培训讲师管理系统(源码+文档+讲解+演示)

深圳亥时科技

何必舍近求远 计算工厂帮你一键部署DeepSeek云主机

京东科技开发者

商品管理中的“DeepSeek” AI赋能零售品牌释放利润空间

第七在线

见证时刻!智元发布首个通用具身基座模型——智元启元大模型(GO-1)

科技热闻

IPv6改造:翻译技术的原理和优缺点分析

国科云

面试官:在项目中用过责任链模式吗?

Geek_e3e86e

编程 计算机

"打通设计与研发效率最后一公里”-云事业部前端团队 D2C/C2D落地经验分享

京东科技开发者

首次覆盖超 11 类真实编程场景!豆包大模型团队开源代码大模型全新基准

火山引擎开发者社区

编程 大模型 豆包

如何保障 MySQL 和 Redis 的数据一致性?4种缓存同步策略+真实业务场景详解,建议收藏

Fox666

MySQL redis 面试 美团 大厂面试

AI 驱动的智能化单元测试生成:字节跳动的实践与创新

火山引擎开发者社区

C# 的未来:主构造函数_语言 & 开发_Jonathan Allen_InfoQ精选文章