写点什么

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

评论

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

架构师课作业 - 第十周

Tulane

架构训练营第十周感悟

张锐

【架构师训练营】第 10 周总结

花生无翼

微服务、中台和 DDD

dongge

架构训练营第十周作业

张锐

week10 作业

雪涛公子

架构师训练营——第10周学习总结

jiangnanage

iOS Abort问题系统性解决方案

移动研发平台EMAS

ios 监控 移动

Dubbo的服务注册与调用

superman

架构师课程第十周总结

dongge

微服务与DDD

走过路过飞过

浅析Python3列表操作之*和*=

王坤祥

Python Python基础

致力打造下一代云原生分布式消息系统,StreamNative 完成源码资本数百万美元 Pre-A 轮融资,红杉中国种子基金跟投

Apache Pulsar

kafka Apache Pulsar StreamNative

架构师训练营第十周学习总结

Bruce Xiong

手动实现mini-vue

晓枫

Java vue.js

下载的附件名总乱码?你该去读一下 RFC 文档了!

Java课代表

Spring Boot

让我们慢慢地成长

姜海天

个人成长

Django单元测试用法及Fixtures用法

BigYoung

Python django 单元测试 Fixtures

week10 总结

雪涛公子

基于小程序云Serverless开发微信小程序

移动研发平台EMAS

微服务架构关键点思考

dony.zhang

架构师训练营——第 10 周作业

jiangnanage

Dubbo微服务调用过程时序图

2流程序员

OAuth 2.0

陈皮

Python中list操作之append、extend

王坤祥

Python Python基础

威联通(NAS)应用篇:搭建个人图床

BigYoung

图床 NAS QNAP 威联通 自建

服务化问题与方案简述

superman

微服务 服务化改造

架构师第十周

Tulane

【架构师训练营】第 10 周作业

花生无翼

hive拉链表优化·百亿量级数据支持准实时更新

誓约·追光者

hive 实时数仓 海量数据库的设计与实践

【数据结构与算法】如何高效学习数据结构与算法

三钻

学习 数据结构与算法

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