【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

评论

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

风口上的量子计算机:核聚变一样的赌局,钻石一样的骗局

脑极体

Linux入门篇 —— Shell详解

若尘

Linux 命令行 linux操作

简单的网站搭建

很甜回忆

网站

科大讯飞发布全新一代智能办公本X2

Lucien

字节跳动面试官这样问消息队列:高可用、不重复消费、可靠传输、顺序消费、消息堆积,我整理了下

冰河

面试 分布式 中间件 消息队列 一起进大厂

一口气发布十大建网利器,华为打算煲出怎样的5G味道?

脑极体

牛掰!面试不再慌,苦刷这份2020最全的“基础-中级-高级”面试题库,已涨17k

Java架构之路

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

【2021海量真实校招】软件测试面试真题,(大数据整理)刷完应对各家企业面试完全没有问题!

程序员阿沐

面试 软件测试 自动化测试 黑盒测试 白盒测试

关于央行数字货币若干问题的思考 | 比较

CECBC

数字货币

Elasticsearch 查询结果排序

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

javascript中的内置对象和数据结构

程序那些事

JavaScript 数据结构 ES6 程序那些事

解读云原生技术

xcbeyond

Kubernetes 云原生 服务网格 28天写作

Android NativeCrash 捕获与解析

vivo互联网技术

c++ android NativeCrash

最新大厂Java面试题库,测试一下你能坚持到哪一面 “美团+字节+腾讯”三面技术问题

Java架构之路

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

诊所数字化:患者数字档案的价值机遇和风险

boshi

数字化医疗 七日更 28天写作

runtime笔记

Conan

ios

Selenium 利用 JS/JQ 操作元素、鼠标键盘事件、Cookie 操作

梦想橡皮擦

Python 28天写作 2月春节不断更 selenium

基于grpc手撸一个RPC框架

cloudcoder

区块链电子合同存证,电子合同区块链服务平台

13530558032

【计算机内功修炼】十:线程间到底共享了哪些进程资源

码农的荒岛求生

c c++ 线程 操作系统 进程

阿里粗排技术体系与最新进展

DataFunTalk

优雅编程 | javascript代码优化的4个小技巧

devpoint

递归 命名空间 闭包 函数绑定

一道好题!我觉得面试如果考察「双指针」的话,这题是刚刚好 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

热点浅谈:低代码开发平台发展前景与市场规模!

优秀

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

Kalm——基于Kubernetes的部署工具

David

开源 Kubernetes DevOps 运维 运维平台

火山翻译:工业级应用与研究

DataFunTalk

深度丨从货币历史看比特币的诞生

CECBC

比特币

小程序开发-云开发技术总结

我是哪吒

小程序 程序员 大前端 28天写作 2月春节不断更

构建“金融+司法”新局面:兴业消费金融区块链电子存证系统正式上线

CECBC

金融

阿里中间件团队技术官手撸笔记,全新演绎“Kafka部署实战”,已开源

Java架构之路

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

性能优化知多少

圣杰

sql 性能优化 dotnet

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