10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

评论

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

微店商品列表API接口开发指南:从零到实战

tbapi

微店API 微店商品列表API 微店数据采集 微店列表数据采集 关键词搜索微店列表接口

如何利用YashanDB实现多租户数据库管理

数据库砖家

如何利用YashanDB数据库实现数据安全加密?

数据库砖家

如何利用YashanDB数据库实现数据的快速恢复与备份

数据库砖家

如何利用YashanDB数据库提高数据处理的并发能力

数据库砖家

甘特图:提升项目管理效率的战略性工具

MZGantt

项目管理 甘特图

今日热点列表 - jobleap4u.com

Y11

求职 找工作 jobleap.cn jobleap4u.com

枫清科技高雪峰:践行AI+产业,以数据为中心构建智能体平台

Fabarta

如何利用YashanDB实现企业数据的智能管理?

数据库砖家

如何配置YashanDB实现多租户数据隔离管理

数据库砖家

学历低还能进大厂吗?

王中阳Go

程序员 学历

如何利用YashanDB构建弹性数据库架构

数据库砖家

如何利用YashanDB实现高效企业数据分区管理

数据库砖家

如何利用YashanDB实现快速数据写入与查询?

数据库砖家

如何利用YashanDB数据库管理大规模数据集

数据库砖家

从“被动应对”到“主动防控”:舆情监测的角色转变

沃观Wovision

跨境贸易 出海企业 沃观Wovision 舆情监测系统 海外舆情监测

如何利用YashanDB实现高效的数据导入与导出操作

数据库砖家

如何利用YashanDB数据库的聚合功能

数据库砖家

违规或面临永久封号!TikTok Shop新规来袭

Wolink

电商 跨境贸易 出海企业 海外推广 达人营销

如何利用YashanDB进行业务智能分析

数据库砖家

如何配置YashanDB实现自动化数据库运维?

数据库砖家

如何利用YashanDB实现大数据环境下的高效存储

数据库砖家

如何利用YashanDB实现快速数据检索和处理

数据库砖家

如何利用YashanDB实现实时数据备份与恢复

数据库砖家

如何配置YashanDB实现高可用容灾架构?

数据库砖家

如何配置YashanDB实现数据实时同步功能?

数据库砖家

如何利用YashanDB实现多数据源整合与管理

数据库砖家

如何利用YashanDB实现企业级数据仓库构建

数据库砖家

如何利用YashanDB数据库进行复杂查询与分析

数据库砖家

如何利用YashanDB数据库实现决策支持系统

数据库砖家

如何利用YashanDB提升企业数据处理能力?

数据库砖家

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