4月10-12日 QCon 北京,与全球 140+ 顶尖工程师共同解构 AI 时代的技术浪潮! 了解详情
写点什么

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

评论

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

CSS之选择器(四)

Augus

CSS 12月日更

架构实战营 - 模块6 - 作业

lucian

架构实战营

元宇宙100讲-0x002

hackstoic

元宇宙

【LeetCode】三数之和双指针Java题解

Albert

算法 LeetCode 12月日更

数字人民币跨境支付测试不断推进,内地居民未来在港购物也可用

CECBC

Redis分布式锁的最佳实践 - Redisson

xcbeyond

redis 分布式锁 28天写作 12月日更

秒杀系统架构

人工智能~~~

OKR的一种实践

wood

OKR 28天写作 组织建设

Android C++系列:Linux网络(五)常见术语

轻口味

28天写作 12月日更

架构实战营毕业总结

Yina🌝很浪🌊

极客时间架构师二期

.NET6新东西---System.Text.Json Writeable DOM

喵叔

28天写作 12月日更

模块六作业 拆分电商系统为微服务

小朱

架构实战营

敏捷概念123之----敏捷洋葱圈

Ian哥

敏捷软件开发 敏捷宣言

MySQL外键约束

JavaEdge

12月日更

电商系统微服务拆分

张靖

#架构实战营

实用机器学习笔记十一:决策树

打工人!

AI 算法 学习笔记 机器学习算法 12月日更

架构实战营 毕业设计

Yina🌝很浪🌊

带儿子去滑雪

Tiger

28天写作

拆分电商系统为微服务

奔奔

30个类手写Spring核心原理之依赖注入功能(3)

Tom弹架构

Java spring 源码

架构实战营-模块六作业

21°Char

架构实战营毕业总结

Rabbit

SSH客户端介绍及推荐

JiLuo.Studio

运维 SSH 服务器 客户端

架构实战训练营 - 模块 2- 作业

温安适

「架构实战营」

Rust 元宇宙 17 —— 聊天和表情

Miracle

rust 元宇宙

聊聊数字化转型与DevOps

Jianmu

DevOps 数字化转型

【架构实战营】模块六作业

liu🍊

【Promise 源码学习】第十八篇 - EventLoop 简介

Brave

源码 Promise 12月日更

第六模块总结

张靖

「架构实战营」

架构实战营模块六作业

spark99

架构实战营

基于建木CI部署maven项目

Jianmu

maven DevOps CI/CD

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