写点什么

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

评论

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

多人协同开发场景,如何做到高效发布

阿里巴巴云原生

阿里云 微服务 云原生 云效

安全利器!龙蜥推出机密计算远程证明服务—OAAS 诚邀广大用户测试

OpenAnolis小助手

开源 安全 龙蜥社区 机密计算 OAAS

提升网络灵活性,SD-WAN助您快速应对备用线路需求

Ogcloud

网络 SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商

户外全彩LED显示屏的验收标准

Dylan

全彩LED显示屏 户外LED显示屏 led显示屏厂家

AI 大模型微调训练营第 0 期 -- 毕业总结

Jabez

人工智能的起源和应用场景

小齐写代码

旁门左道:借助 HttpClientHandler 拦截请求,体验 Semantic Kernel 插件

不在线第一只蜗牛

Java c++ 开发语言

为什么程序员不能一次性写好,需要不停改bug?

伤感汤姆布利柏

分布式场景怎么Join | 京东云技术团队

京东科技开发者

APISIX 可观测性最佳实践

观测云

APISIX

跨国制造商部署SD-WAN提升全球业务案例分析

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

技术专栏丨Rust 语言简介及其在 Fabarta 技术栈中的应用

Fabarta

多人协同开发场景,如何做到高效发布

阿里云云效

阿里云 云原生 云效

spark为什么比mapreduce快?

京东科技开发者

如何做代币分析:以 BNB 币为例

Footprint Analytics

Token 代币 bnb

正式发布后的一年,我们都做了什么? | Sermant 2023年度总结

华为云开源

开源 微服务 服务治理 sermant

区块链游戏解说:什么是 Nine Chronicles

Footprint Analytics

区块链游戏

一条Linux命令打败99%的运维

伤感汤姆布利柏

京东商品详情数据采集方法代码展示

tbapi

京东API接口 京东商品详情接口

技术分享 | 神级程序员都在用什么工具?

互联网工科生

IntelliJ IDEA 数据源 JNPF

面试官:如何实现多级缓存?

王磊

Java 面试

Sora文生视频模型深度剖析:全网独家指南,洞悉98%关键信息,纯干货

汀丶人工智能

Pika sora 文生视频 文生视频模型

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