写点什么

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

评论

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

CIS Kubernetes 基线测试

greatersecurity

字节三面+微信四面+PayPal四面,大厂面经分享

Java 程序员 架构 面试 计算机

多数元素

Memorys

Java 面试 算法

香港云服务器的运行原理以及是微小创业公司的最具性价比的选择

九河云安全

为什么spring能最好地改变Java?成功跳槽阿里!

JVM调优资料

Java 程序员 后端

为什么大公司一定要使用微服务?神操作!

JVM调优资料

Java 程序员 后端

五分钟搞懂MySQL主从复制原理,附带学习经验

JVM调优资料

Java 程序员 后端

SpringBoot使用Junit5

Rubble

springboot JUnit 8月日更

学会这十招,轻松搜索github优质项目

Java架构师迁哥

Linux-Vim 编辑器和恢复 ext4 下误删除文件-Xmanager 工具

学神来啦

vim Linux 学习 运维

【共识专栏】共识的分类(下)

趣链科技

区块链 共识机制 共识算法 共识分类

MySQL不能没有字符串函数,就像西方不能失去耶路撒冷

北游学Java

Java MySQL 数据库

勒索软件、网络钓鱼、零信任和网络安全的新常态

九河云安全

肝到头秃!阿里爆款的顶配版Spring Security笔记

Java spring 程序员 架构 计算机

模块九毕设

c

架构实战营

京东面试真题解析,帮你解决95%以上的问题!

JVM调优资料

Java 程序员 后端

DBA:这有一份对接NBU备份故障排除指南,请查收!

华为云开发者联盟

故障 DWS 备份 NBU NetBackup

jackson1处理特殊字符有什么问题?

BUG侦探

json Java 开发 jackson特殊字符

图片风格迁移:基于实例缓解细节丢失、人脸风格化失败问题

华为云开发者联盟

神经网络 风格 实例 风格迁移 图像翻译

Java线程安全-JVM角度解析

程序员阿杜

Java JVM 多线程 并发 8月日更

高防云服务器与云服务器的区别以及如何去更好的选择?

九河云安全

五年Java开发者小米、阿里面经,附相关架构及资料

JVM调优资料

Java 程序员 后端

中国首位 K8s ingress-nginx reviewer 同时提名成为 Apache APISIX committer

API7.ai 技术团队

开源 Kubernetes 采访 APISIX

基于ECS搭建FTP服务

若尘

阿里云 ftp服务 8月日更

Apache ShardingSphere:由开源驱动的分布式数据库中间件生态

SphereEx

数据库 开源

五面阿里拿下飞猪事业部offer,帮你突破瓶颈

JVM调优资料

Java 程序员 后端

开发者进阶宝典,HarmonyOS 职业认证全奉上

科技汇

Nginx 内存池似懂非懂?一文带你看清高性能服务器内存池

Linux服务器开发

nginx Linux服务器开发 Linux后台开发 高性能服务器 内存池

阿里云 Centos7安装ssh+nginx+mysql 傻瓜式教程

九河云安全

Apache ShardingSphere 元数据加载剖析

SphereEx

数据库 开源

书单 | 7月畅销新书情报,看谁是最大黑马

博文视点Broadview

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