AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

评论

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

秒懂 AI Agent:落地局限与产品解析

Techinsight

智能体 agent 智能体评估

Dify实战案例:MySQL查询助手!嘎嘎好用

王磊

龙蜥开发者说:我的龙蜥开源之旅 | 第 32 期

OpenAnolis小助手

龙蜥社区 龙蜥开发者说

立足数字人文,深化历史叙事|科学智能赋能人文社科领域研究

ModelWhale

科学智能 人文社科 山东大学 AI4S

NJet Portal 应用门户管理介绍

通明湖

一体系数据平台的进化:基于阿里云 EMR Serverless Spark的持续演进

阿里云大数据AI技术

云计算 Serverless 数据分析 数据处理 数据库 大数据

京东高薪“抢人”,刘强东杀向携程腹地

趣解商业

京东 携程 酒旅

英特尔推进技术创新,以规模更大的封装满足AI应用需求

E科讯

51Talk发布2025年Q1财报:第一季度营业收入同比增长93.1%

财见

技术视角:AI Agent 落地局限与产品实现

Techinsight

智能体 Agents AI 智能体 智能体评估

鸿蒙 NEXT 应用签名机制有何变化?如何生成并配置签名证书?

巴库一郎

鸿蒙 开发工具 HarmonyOS HarmonyOS NEXT 实践分享

低代码与AI的医药行业适配性实践:从技术融合到数智化转型的深度解析

量贩潮汐·WholesaleTide

低代码

AI时代的“数据之困”,什么是AI-Ready Data

MatrixOrigin

数据库 HTAP AI Agents

华为仓颉语言初识:并发编程之同步机制(下)

IT小码哥

鸿蒙 HarmonyOS HarmonyOS NEXT

通义灵码带你玩转 MCP 最佳实践(合辑,持续更新中)

阿里巴巴云原生

通义灵码 MCP

全议程硬核公布!龙蜥邀您共同探索面向泛在智算场景的操作系统技术

OpenAnolis小助手

AI 操作系统 龙蜥社区 龙蜥meetup

BOE(京东方)“照亮成长路”公益项目新十年启幕 科技无界照亮美好未来

爱极客侠

难哭了的高考数学题,4家国产大模型表现如何?

极客天地

西南会议 | 2025 Altair 区域技术交流会即将在成都盛大举行!

Altair RapidMiner

人工智能 AI HPC 数字孪生 CAE

不是做大模型,而是落在执行闭环,酷开智能体思路浮出水面

业界

打造多模态交互新范式|彩讯股份中标2025年中国移动和留言平台AI智能体研发项目

彩讯股份300634

ETL中图表统计分析模版组件使用

RestCloud

数据处理 ETL 数据集成 图表统计

扎根业务,这个618商业智能体先跑起来

脑极体

AI

五分钟搭建属于你的AI助手:Ollama+DeepSeek+AnythingLLM深度整合教程

量贩潮汐·WholesaleTide

人工智能 DeepSeek

你了解Java线程池原理吗?

不在线第一只蜗牛

Java 算法

2025年Java面试行情变了?技术不达标,如何快速逆袭拿高薪?

程序员高级码农

Java Java 面试 Java 面试题

通义灵码带你玩转 MCP 最佳实践(合辑,持续更新中)

阿里云云效

通义灵码 MCP

iOS 26 新增实时翻译:基于端侧并向第三方开放接口;Neuralink 和 Grok 使渐冻症患者重新「发声」丨日报

声网

TortoiseSVN使用-权限配置

刘大猫

人工智能 svn 权限控制 tortoiseSVN 权限配置

征程 6E/M|如何解决量化部署时 mul 与 bool 类型数据交互的问题

地平线开发者

自动驾驶; 算法工具链 地平线征程6

ArkUI-x跨平台Bridge最佳实践

龙儿筝

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