写点什么

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:1610792

评论

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

LED显示屏行业可突破的六大领域

Dylan

云计算 虚拟现实 LED显示屏 全彩LED显示屏 led显示屏厂家

数据分析慢?火山引擎ByteHouse发布六大场景性能提升方案

字节跳动数据平台

数据库 云原生 OLAP 数仓

聚焦OLAP性能提升,火山引擎ByteHouse发布六大场景方案

字节跳动数据平台

数据库 云原生 Clickhouse 数仓

AI安全新纪元:智能体驱动的网络安全新范式

云起无垠

AI 智能体

24年内蒙古等级保护测评机构看这里!

行云管家

网络安全 等保 等级保护 内蒙古

macOS Ventura 13.6.9 (22G830) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos ISO ventura

高价值数据源于结构化和非结构化融合分析

AI数据云Relyt

数据仓库 数据湖 数据分析 非结构化数据 AI-ready Data Cloud

大咖公开课 | AI自动化应用开发,让创意与效率并驾齐驱!

测试人

软件测试

海外成品语聊交友软件APP(英语+阿拉伯语版本)相比定制研发,优势有哪些?

山东布谷科技胡月

源码搭建 语音直播源码 语音聊天APP源码 海外直播App开发 海外语聊APP

观测云产品更新 | 异常追踪、用户访问监测、链路、监控等

观测云

异常追踪

全国高校软件测试开发教学师资培训会圆满落幕

霍格沃兹测试开发学社

如何保护您的 Angular 应用程序:API 调用的端到端加密

哦豁完蛋了

聚焦OLAP性能提升,火山引擎ByteHouse发布六大场景方案

字节跳动数据平台

数据库 大数据 云原生 Clickhouse 数仓

无缝集成,全域监控:观测云引领企业运维新纪元

可观测技术

运维

使用观测云构建业务的可观测性

观测云

可观测性 业务监控

AI自动化应用开发,让创意与效率并驾齐驱!

霍格沃兹测试开发学社

京东企业业务前端监控实践

京东零售技术

前端 监控 企业号 8 月 PK 榜

【AIGC】 0成本学习:AI工作流生成Joy(ComfyUI)

京东零售技术

AIGC 企业号 8 月 PK 榜

云图说|一图告诉你主机安全的运维效率如何提升超出预期

华为云开发者联盟

运维 主机安全 新版本 企业号 8 月 PK 榜 2024企业号8月pk

macOS Sonoma 14.6.1 (23G93) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos ISO Sonoma

危化品安全生产风险监测预警系统的构建与实施

天津汇柏科技有限公司

安全生产 安全生产平台

和鲸科技CEO范向伟出席江苏省信息技术应用学会软件技术专委会学术年会,解读“AI+教育”创新实践

ModelWhale

人工智能 软件 信息技术 产学研

和鲸科技助力 Datathon 会前培训成功举行,“理-工-医-信”跨学科合作,以数据驱动医疗实践

ModelWhale

医疗AI R 语言 datathon 医疗大数据

我叫小舞,跳舞的舞!新斗罗大陆游戏详细图文架设教程

echeverra

斗罗大陆

技术同学如何应对降薪裁员

老张

职场 裁员 认知 互联网裁员

全国高校软件测试开发教学师资培训会圆满落幕

测试人

软件测试

不可重复读和幻读有什么区别

江南一点雨

Java MySQL 面试题

数据分析的关键点有哪些?如何做好数据分析?

Aloudata

数据分析 指标平台 noetl

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