写点什么

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

评论

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

在线html链接提取工具

入门小站

工具

JSON 数据格式该怎么使用

网络安全学海

json 网络安全 安全 信息漏洞 渗透测试

矩阵分解推荐算法(十八)

Databri_AI

推荐算法 矩阵运算

JavaScript学习(九)

空城机

JavaScript 大前端 6月日更

公司给的期权有没有价值?

石云升

期权 职场经验 6月日更

阿里内部不外传的50万字Java面试手册,首次开放,一天遭狂转10w次

Java架构师迁哥

经典永流传,华为云媒体 AI 让老电影焕发新生

华为云开发者联盟

AI 云原生 音视频 电影修复 华为云媒体

华为自研PB级分布式时序数据库揭秘第一期:初识GaussDB(for Influx)

华为云数据库小助手

数据库 GaussDB(for Influx) 华为云数据库

Kubernetes手记(22)- K8S包管理器

雪雷

6月日更

Linux之touch命令

入门小站

Linux

🏆「作者推荐」【JVM原理探索】字节码指令集调用执行流程分析(语法分析篇)

洛神灬殇

JVM Class字节码 6月日更 字节码指令

【熬夜整理近百份大厂面经】2022校招提前批面经总结分享(腾讯、字节、阿里、百度、京东等招聘信息+必考点+简历书写)

学无止境的阿奔

c++ 程序员 面试 后端 秋招

快手严厉整治违规商业内容:必须构建平台良性生态链

石头IT视角

带你认识Flink容错机制的两大方面:作业执行和守护进程

华为云开发者联盟

flink 守护进程 容错 作业执行 Flink 容错机制

THOR:MindSpore 自研高阶优化器源码分析和实践应用

华为云开发者联盟

网络 mindspore THOR 高阶优化器 THOR算法

一分钟懂5G

俞凡

5G

四份深入源码层面笔记,学完后让你彻底精通Spring Cloud!

Java架构追梦

Java 架构 面试 微服务 SpringCloud

极光统一消息系统UMS新版上线!多维数据统计分析助推运营增长

极光JIGUANG

mysql的存储引擎知多少

卢卡多多

KV存储引擎 MySQL 数据库 6月日更

“动态规划”这词太吓人,其实可以叫“状态缓存”

华为云开发者联盟

Java 动态规划 超时 dp数组 状态缓存

5分钟速读之Rust权威指南(三十)多线程

wzx

rust

七种方式教你在SpringBoot初始化时搞点事情

L

Java

zookeeper客户端zkclient和curator的api

赵镇

zookeeper

云小课 | 华为云KYON:网段零修改上云,简单又好用

华为云开发者联盟

KYON企业级云网络 私网NAT网关 弹性负载均衡ELB 虚拟私有云VPC L2CG VPVEP

AI云市场的繁盛之夏:AI花开果熟,百度抢先品尝第一口甜

脑极体

极光开发者周刊【No.0625】

极光JIGUANG

Vue源码学习 | 从源码中学习Javascript技巧

devpoint

JavaScript Vue 6月日更

Scrum | 你需要知道这些

Python研究所

项目管理 Scrum 敏捷

[译] R8 优化: Switch 场景下的枚举

Antway

6月日更

华为云官网前端的技术演进与低代码实践

华为云开发者联盟

大前端 低代码 可视化 页面 华为云官网

高性能计算在人工智能(AI)智药中的应用

北鲲云

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