写点什么

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

评论

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

IBM SPSS Statistics 27 for Mac(spss数据统计分析软件)

Mac相关知识分享

Apache Paimon 在蚂蚁的应用

Apache Flink

大数据 flink 流计算 paimon

万界星空科技电线电缆行业MES系统核心功能

万界星空科技

mes 万界星空科技 电线电缆行业 电线电缆mes

RAW Power for Mac(强大的raw图像处理软件) v3.4.24中文激活版

Mac相关知识分享

【YashanDB知识库】oracle dblink varchar类型查询报错记录

YashanDB

yashandb 崖山数据库 崖山DB

茶思屋直播|向下扎根,向上生长,TinyEngine 灵活构建个性化低代码平台

OpenTiny社区

开源 前端 低代码 OpenTiny TinyEngine

Altair HyperWorks 新版本|AI 赋能设计与仿真,驱动全球领先创新技术

Altair RapidMiner

人工智能 设计 仿真 工程 altair

「邀您参会」首个中国可观测日即将盛大开幕

观测云

可观测性 AWS

项目提效神器:10款顶级项目工单管理系统

爱吃小舅的鱼

项目管理 项目管理系统 工单管理 项目工单管理 项目工单管理系统

网络爬虫开发:JavaScript与Python特性的小差异

我再BUG界嘎嘎乱杀

Python JavaScript 爬虫 开发语言

麻省理工IOT教授撰写的1058页Python程序设计人工智能实践手册!

我再BUG界嘎嘎乱杀

Python 人工智能 程序设计 后端 开发语言

Workflow通用并发控制组件:ResourcePool资源池

1412

c++ 开源项目 workflow 并发’

Dynamic Wallpaper for Mac(视频动态壁纸) 17.1免激活版

Mac相关知识分享

TimechoDB v1.3.3 发布 | 新增多种数据类型,增加数据订阅、配置项设置等功能

Apache IoTDB

无需业务改造,一套数据库满足 OLTP 和 OLAP,GaiaDB 发布并行查询能力

Baidu AICLOUD

OLAP 云原生数据库 HTAP

Sensei for Mac(实用的系统优化清理工具) v1.5.9中文激活版

Mac相关知识分享

被种草新版 FinClip Cloud,主打一个好用!

Onegun

finclip 小程序容器

嘿!通义灵码周边「超大鼠标垫」上线啦,更多玩法等待解锁

阿里云云效

阿里云 云原生 通义灵码

京东上万程序员都AI用它!

京东科技开发者

客户在哪儿AI助ToB企业决策层开启营销的上帝视角

客户在哪儿AI

ToB营销 ToB增长 ToB销售

【程序大侠传】服务发布引发mq消息重复消费

Disaster

嘿!通义灵码周边「超大鼠标垫」上线啦,更多玩法等待解锁

阿里巴巴云原生

阿里云 云原生 通义灵码

Netflix Mac(奈飞客户端) v2.13.0激活版

Mac相关知识分享

mac播放器

AI心理助手:随时待命,伴你左右

心大陆多智能体

智能体 AI大模型 心理健康 数字心理 CBT

国内低代码平台推荐--万界星空科技低代码平台

万界星空科技

低代码 低代码开发 低代码平台 mes

作为ToB市场总监的你 被老板质疑过花销太大吗?

客户在哪儿AI

ToB营销 ToB获客 ToB增长 ToB销售

京东云智能编程助手与安全大模型双双获奖!

京东科技开发者

大模型再加速,保障京东618又便宜又好

京东科技开发者

说说XXLJob分片任务实现原理?

王磊

Java

计算机视觉的基础概念与入门

我再BUG界嘎嘎乱杀

Python 编程 后端 计算机视觉 开发语言

如何冲破大模型时代的算力关卡?天翼云给出答案

脑极体

AI

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