大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

评论

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

数据结构之链表复习

Java 程序员 后端

新年红包封面来了,3000万份红包封面来啦!到点直领!

Java 程序员 后端

月薪3K与月薪3万的程序员,差距在哪里?

Java 程序员 后端

毕业参加工作了,记住一句话,攒钱绝对靠谱(1)

Java 程序员 后端

毕业三年,从小公司到大厂,先后四面阿里、小米、美团等

Java 程序员 后端

无锁并发框架-Disruptor的使用(二)

Java 程序员 后端

最快最强?腾讯高级技术专家深入浅出整理Java性能优化全栈笔记,强了不止一点

Java 程序员 后端

来自北京大学NOIP金牌选手yxc的常用代码模板1——基础算法

Java 程序员 后端

树莓派3B搭建Flink集群

Java 程序员 后端

死磕18个Java8日期处理,工作必用!

Java 程序员 后端

死锁终结者:顺序锁和轮询锁!

Java 程序员 后端

新年红包封面来了,3000万份红包封面来啦!到点直领!(1)

Java 程序员 后端

树莓派3B+搭建OpenCV3(1)

Java 程序员 后端

树莓派3B+搭建OpenCV3

Java 程序员 后端

正则表达式--只求能看懂别人写的正则表达式是什么意思

Java 程序员 后端

新鲜的字节跳动、美团、B站、京东Java面经,程序员你眼馋了吗

Java 程序员 后端

数据结构之栈应用

Java 程序员 后端

最新阿里Java面试题整理+进阶资料分享,看完直接收藏

Java 程序员 后端

来说说缓存穿透、缓存击穿、缓存雪崩都是什么?怎么解决?

Java 程序员 后端

案例教你一步步设计DDD微服务项目

Java 程序员 后端

每天5分钟吃透华为18级架构师推荐252页Docker容器技术入职华为云

Java 程序员 后端

教妹学Java(二十四):一文了解 Java 中的方法

Java 程序员 后端

数据结构与算法-链表

Java 程序员 后端

新人一看就懂:Dubbo+Zookeeper的RPC远程调用框架demo

Java 程序员 后端

杀无赦!斩了Java拦路虎之红黑树篇

Java 程序员 后端

来自一位阿里朋友的组件化架构实践

Java 程序员 后端

来自北京大学NOIP金牌选手yxc的常用代码模板3——搜索与图论

Java 程序员 后端

日志规范多重要,这篇文章告诉你!

Java 程序员 后端

普通本科毕业一年,刷完这 1000 道 JAVA 面试题,成功逆袭上岸

Java 程序员 后端

最新美团滴滴Java岗虚拟机面经:2020下半年你还想不想涨薪?

Java 程序员 后端

毕业参加工作了,记住一句话,攒钱绝对靠谱

Java 程序员 后端

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