速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

评论

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

Redis 分布式锁原理看这篇就够了, 循循渐进

马丁玩编程

redis 架构 分布式 分布式锁

接口测试之json中的key获取

测试人生路

接口测试

奉劝各位准备面试的Java程序员耗子尾汁,赶紧扔掉网上那些千篇一律的面试题

Java架构之路

Java 程序员 架构 面试 编程语言

极客时间架构师训练营 - 第五期作业

文江

一张图片一份文档,我想redis就到这里吧,剩下的只有实践了

小Q

Java redis 学习 编程 面试

训练营第九周作业 1

仲夏

极客大学架构师训练营

第九周总结

fmouse

极客大学架构师训练营

神经网络泛化

计算机与AI

神经网络 学习

极客时间架构师训练营 1 期 - 第 9 周总结

Kaven

架构师训练营第 1 期第 9 周作业

好吃不贵

极客大学架构师训练营

性能优化三第九周作业「架构师训练营第 1 期」

天天向善

三步法解析Axios源码

执鸢者

大前端 axios

2021年Java程序员请先把这几项硬技能熟悉掌握,再想着跳槽拿高薪

Java架构之路

Java 编程 程序员 架构 面试

合约API跟单系统开发方案,智能合约跟单软件

13530558032

交易所量化机器人搭建--市值管理机器人

13530558032

算法讲解|贪心算法的理解与分析

Java架构师迁哥

作业-第5周

arcyao

第九周总结

alpha

极客大学架构师训练营

架构师第2期第5周作业一

老腊肉

极客大学架构师训练营

极客时间架构师培训 1 期 - 第 9 周作业

Kaven

Week 9 设计秒杀系统

黄立

4年Java开发经验,从传统公司裸辞之后足足准备了3个月,终于拿到美团、京东、字节跳动等大厂offer

Java架构之路

Java 程序员 架构 面试 编程语言

并发编程Bug的源头-原子性

996小迁

Java 程序员 架构 面试 并发编程

数字货币交易所开发价格,深圳区块链交易所系统APP开发

13530558032

第八周作业 1

Yangjing

极客大学架构师训练营

第九周作业

fmouse

极客大学架构师训练营

第8周 作业2

Yangjing

极客大学架构师训练营

并发编程Bug的源头-原子性

Java架构师迁哥

区块链钱包开发功能与优势,数字货币钱包APP开发

13530558032

第九周作业

alpha

极客大学架构师训练营

MySQL 连接为什么挂死了?

Java架构师迁哥

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