OceanBase 开发者大会来啦!一起围观数据库前沿趋势!报名戳 了解详情
写点什么

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

评论

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

分布式架构下如何选择最佳 Store?

KaiwuDB

数据库 分布式数据库 数据存储

【C语言】动态内存管理 [进阶篇_ 复习专用]

Dream-Y.ocean

c c++ 9月月更

“企业级零代码黑客马拉松大赛”决赛名单公布

明道云

低代码 零代码 企业数字化转型 黑客马拉松

Wordpress 如何添加 Ads.txt 文件

HoneyMoose

漫谈 SAP 产品里页面上的 Checkbox 设计与实现

Jerry Wang

JavaScript 前端开发 web开发 SAP 9月月更

OpenHarmony 3.2 Beta源码分析之MediaLibrary

OpenHarmony开发者

OpenHarmony

【数据结构】顺序表(增、删、查、改)的实现 [初阶篇_ 复习专用]

Dream-Y.ocean

c 顺序表 9月月更

Java之static关键字【实例变量与类变量、实例方法与类方法】

Fire_Shield

Java static 9月月更

OSCAR开源产业大会|中国信通院可信开源评估最新结果正式发布

Ada@SegmentFault

元宇宙会议来了,3DCAT助力2022长宁区科技创新主题论坛开展

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

“3” 生万物,勇敢前行

秒云

LP双币流动性质押挖矿系统开发搭建

l8l259l3365

【数据结构】带头+双向+循环链表(增、删、查、改)的实现_【附源码、图片示例】_ [初阶篇_ 复习专用]

Dream-Y.ocean

c 双向循环链表 9月月更

海龟绘图简单科普

吉师职业混子

9月月更

DCAT亮相WAIC 2022浦东分会场——元宇宙博览会暨数字光影大会

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

拒绝花里胡哨,零基础也能把机器学习给你捣鼓明白

博文视点Broadview

【数据结构】单链表(增、删、查、改)的实现 [初阶篇_ 复习专用]

Dream-Y.ocean

c 单向链表 9月月更

【Vue3】穿梭框 -- 思路与实现分析

Sam9029

前端 Vue 3 9月月更

【C语言】深度剖析文件操作 [进阶篇_ 复习专用]

Dream-Y.ocean

c 文件 9月月更

一款开源的基于 Angular 的电商 Storefront 开发框架介绍

Jerry Wang

typescript 前端开发 angular 电商 9月月更

瑞云科技总经理邹琼出席2022世界人工智能大会投融资主题论坛

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

速度与安全可兼得!改造异步布局大幅提升客户端布局性能

小红书技术REDtech

性能优化 安卓 客户端 Andriod

手把手教大家在 Spring Boot 中处理 flowable 中的用户和组!

江南一点雨

springboot workflow flowable

基于高效采样算法的时序图神经网络系统(二)

Baihai IDP

人工智能 神经网络 AI 图数据

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