写点什么

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

评论

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

百万并发「零拷贝」技术系列之经典案例Netty

码农神说

Java Netty 零拷贝

第八周总结

Acker飏

Java中的模板设计模式,太实用了!

BUZHIDAO

Java

使用Spring Validation优雅地校验参数

Java课代表

springboot

一图看懂华为云DevCloud如何应对敏捷开发的测试挑战

华为云开发者联盟

微服务 敏捷开发 测试 云服务 华为云

判了!中科大博士写游戏外挂赚了12万获刑,被抓才知道帮团队赚了300万……

程序员生活志

游戏开发 游戏 游戏外挂 新闻

要都练基本功

架构师

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

TH

架构师训练营week08 学习总结

GunShotPanda

【解构系统设计面试】什么是系统设计?以及如何设计一个新鲜事系统?

罗远航

系统设计

第八周总结

LEAF

揭秘淘宝平台广告策略,拆解最佳投放实践

华为云开发者联盟

数据分析 广告 用户增长 淘宝 电商

Developer 转型记:一个开发平台的“魔力”

华为云开发者联盟

华为 AI 开发者 开发者工具 华为云

轻量级BI应用-Superset实践

Jackchang234987

BI 数据产品

2行代码搞定一个定时器!

简爱W

知识点梳理:聊聊iOS SDK数据采集那点事儿

易观大数据

Java SSM 框架常见面试题

老大哥

Java

架构师训练营week08 作业

GunShotPanda

BFC "苦"前端久矣!

coolion

CSS 大前端

一次线上JVM Young GC调优,搞懂了这么多东西!

南方有乔木兮

新三板专家-程晓明:四板将是推动区块链技术与资本市场结合试验田

CECBC

区块链技术 推进落地应用

区块链+国防安全,科技是核心战斗力

CECBC

新技术 国防安全 科技信息

架构师培训 -08总结 数据结构算法,网络通信协议,非阻塞网络 I/O,数据库原理

刘敏

判断两个链表是否合并

Acker飏

JVM详解之:HotSpot VM中的Intrinsic methods

程序那些事

Java JVM GC

该学一学了!零基础入门Docker

程序员的时光

Docker

信创舆情一线--50多家科技公司源代码泄露

统小信uos

MySQL的索引基础知识

guoguo 👻

求组队,PK华为HMS全球应用创新大赛!

InfoQ_e92167c73263

android

面试官问:僵尸进程和孤儿进程有了解过吗

Java小咖秀

Linux 学习 面试 进程 经验

视频丨包不同的沙雕敏捷之砸锅卖铁买兰博

华为云开发者联盟

程序员 运维 敏捷 敏捷开发 技术人

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