写点什么

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

评论

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

JAVA 百度地图 API

爱好编程进阶

Java 面试 后端开发

Java-进阶:多线程2

爱好编程进阶

Java 面试 后端开发

小程序运行时+SAAS级服务,提升研发降本增效作用

Speedoooo

flutter APP开发 SaaS平台 小程序容器 小程序运行时

Java 反射 getClass()

爱好编程进阶

Java 面试 后端开发

CrashSight异常崩溃管理解决方案

WeTest

NFT数字藏品交易平台系统开发搭建

薇電13242772558

NFT 数字藏品

Java多线程-死锁的出现和解决

爱好编程进阶

Java 面试 后端开发

关于 WordPress 你了解多少?

海拥(haiyong.site)

4月月更

Flink整合ElasticSearch详细指南及踩坑记录

五分钟学大数据

4月月更

【云管平台】三大云管平台厂商详细介绍

行云管家

云计算 云管平台 云堡垒机 云厂商

Java反射

爱好编程进阶

Java 面试 后端开发

进程内优雅管理多个服务

万俊峰Kevin

微服务 RPC web开发 go-zero Go 语言

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day26

爱好编程进阶

Java 面试 后端开发

龙蜥大讲堂:如何利用硬件SIMD指令提升Java程序的性能?|第14期

OpenAnolis小助手

Java simd arm sig 龙蜥大讲堂

DDD实战(8):冲刺1战术之聚合设计

深清秋

DDD 软件架构 生鲜电商系统 4月月更

人人都可以学会的产品手册制作方法

小炮

产品宣传手册

Java 结合实例学会使用 静态代理、JDK动态代理、CGLIB动态代理

爱好编程进阶

Java 面试 后端开发

一起来试玩!在线可编程交互的实时音视频 Web SDK 入门教程

声网

音视频 教程

华为云物联网高级攻城狮的4年配置中心实践分享

华为云开发者联盟

开源 DevOps 配置中心 Apollo 业务配置

Java应用日志如何与Jaeger的trace关联

爱好编程进阶

Java 面试 后端开发

Java并发编程(实战)

爱好编程进阶

Java 面试 后端开发

java并发锁ReentrantLock源码分析二之Condition实现原理

爱好编程进阶

Java 面试 后端开发

桌面运维工程师需要会哪些技能?主要是做什么的?

行云管家

云计算 运维 运维工程师 IT运维 云运维

Java IO

爱好编程进阶

Java 面试 后端开发

java8 Stream API及常用方法

爱好编程进阶

Java 面试 后端开发

K8S太火了!花10分钟玩转它不香么?

爱好编程进阶

Java 面试 后端开发

鲸智WhaleBI 平民化数据消费还业务以真正的“数据自由”

鲸品堂

方法论 数据 数据治理

走向数据科学:在字节跳动广告投放这么干

字节跳动数据平台

大数据 字节跳动 ab测试

30个实用SQL语句,玩转PostgreSQL

慕枫技术笔记

数据库 后端 4月月更

java高级用法之:JNA中的Structure

程序那些事

Java 程序那些事 JNA 4月月更

java冒泡排序的实现以及优化

爱好编程进阶

Java 面试 后端开发

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