写点什么

C# 8 新增小功能

  • 2019-06-24
  • 本文字数:1075 字

    阅读完需:约 4 分钟

C# 8 新增小功能

尽管 C# 8 应该会在今年发布,并且 C# 8.x 和 9 的路线图也开始形成,但是,微软正在继续审查下一个版本的特性。

目标类型表达式

假设我们有 A、B 和 C 三种类型,其中类型 B 和 C 是类型 A 的子类型。如果我们使用如下所示的语句,那么,编译器无法确定右侧要返回的类型。


A a1 = b ?? c;A a2 = x>0 ? b : c;A a3 =   a switch {    B b => b,    C c => c,    _ => throw new System.Exception() };
复制代码


通常情况下,修复该问题需要添加强制转换,如:


A a1 = (A)b ?? (A)c;A a2 = x>0 ? (A)b : (A)c;
复制代码


根据目标类型switch表达式提议,在每种情况下都允许编译器使用语句(A a1)的左侧来决定右侧(b ??c)应该返回的类型。该功能还可以用于返回语句(return b ?? c),但不能用于变量(var a1 = b ?? c)。


目前,这个(例 3)的模式匹配版本计划于 C# 8.0 中提供,其他两个则于 8.x 中提供。

允许在解构中使用“default”

根据该提议,这个小功能将允许在初始化元组时使用 default 关键字:


(int i, string s) = default;(i, s) = default;
复制代码

过时的属性

与 Visual Basic 不同,C#无法把单个 getter 和 setter 标记为过时。相反,只能将属性作为整体做这样的标记。该提议纠正了这种情况。为了理解这个问题的重要性,请看看 Cory Nelson 的评论。


就在几个星期前,我试图清理一些大量使用 get/set 属性的代码,使其成为一个更加只读的初始化的构造函数(ctor-initialized),此时我发现我真希望该特性是这样的。


4 月,该特性从 C# 9 迁移到了 C# 8 上。

结构上的只读成员

当分配给只读字段或用作 in 参数时,结构上的方法有个性能小问题。如果我们调用结构上的方法,编译器首先会生成防御性副本。尽管这通常不足以产生问题,但是,在用于紧密循环(tight loop)时,细微的低效的确会累积出性能问题。


对于完全不可变的结构,可以标记整个结构为只读,这样可以避免此类情况的发生。然而,出于性能的缘故,很多结构是可变的。


根据只读示例方法提议,开发人员将能够把单个方法标记为只读。这向编译器表明,防御性副本不是必要的,没有值会被修改。


这和Pure属性不同,只要只读方法不修改结构本身的值,那么就有明显的副作用。


自动实现属性的 getter 将被自动认为是只读的。在某些情况下,setter 也可以被标记为只读。比如,当属性值存于字典中而不是直接存入结构本身的时候。


在目前的提议下,引用类型(类和接口)将不会受到该特性的支持。原因有三重:


  • 这么做,没有与性能相关的优势

  • 只读关键字不意味着状态不会改变,只是不会直接修改对象上的字段。

  • 这是只读结构的扩展,没有等效的只读类。


查看英文原文:C# 8 More Small Features


2019-06-24 08:0015462
用户头像

发布了 199 篇内容, 共 84.7 次阅读, 收获喜欢 295 次。

关注

评论

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

WIFI6E moudle-QCN9074+WiFi6 MT7915-support 2.4GHz and 5GHz-M.2-MINI PCIE how to choose?

wifi6-yiyi

wifi6 WIFI6E

打造基于AI的一站式节能减碳方案,南洋万邦助力工业园区实现“双碳”目标

飞桨PaddlePaddle

人工智能 paddle 百度飞桨

Audition 2021 mac完整版 音频编辑软件audition新功能

mac

苹果mac 音频编辑软件 Windows软件 audition 2021 audition

《操作系统实战 45 讲》笔记2——内存管理

袁世超

操作系统 Cosmos LMOS

百度工程师浅析解码策略

百度Geek说

解码 企业号 8 月 PK 榜 生成模型

高性能网络 SIG 月度动态:ANCK 首次支持 SMCv2.1,virtio 规范支持隧道报文内头部哈希

OpenAnolis小助手

高性能网络 龙蜥社区 anck 龙蜥sig smc

How IPQ9574, IPQ9554, QCN9274, and QCN6274 Qualcomm Chipsets Harness the Full Potential of WiFi7 Features

wallyslilly

WiFi7 ipq9554 qcn9274 qcn6274 ipq9574

26. NumPy

茶桁

Python Numpy

查询速度最高提升50倍!火山引擎ByteHouse在广告投放领域实践分享

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号 8 月 PK 榜

小灯塔系列-中小企业数字化转型系列研究——CRM测评报告

向量智库

火山引擎DataWind产品可视化能力揭秘

白露为霜

数据可视化 商业智能 BI 分析工具 图表库 BI 报表

SRE 与开发的自动化协同 -- 生产环境出现 bug 自动生成异常追踪

观测云

异常追踪 智能巡检

【代码实践】使用FastAPI+Supabase+LangChain开发AI应用

张文平

FastApi 应用开发 Supabase #人工智能 #LangChain

数字化转型与架构-架构设计篇|建模之“静态”模型

数字随行

数字化转型

illustrator2023最新版 矢量图形编辑软件ai2023简体中文版下载

mac

Illustrator ai2023 苹果mac 矢量图形编辑软件 illustrator2023

峰会回顾第7期 | 视窗绘制技术演进和新趋势

OpenHarmony开发者

OpenHarmony

Databend 开源周报第 107 期

Databend

蓝易云:JAVA使用HTTP代理教程。

百度搜索:蓝易云

Java 云计算 Linux 运维 HTTP

Apache Paimon 实时数据湖 Streaming Lakehouse 的存储底座

Apache Flink

大数据 flink 实时计算

华为云classroom赋能--Toolkit系列插件DevSecOps助力开发者提速

华为云PaaS服务小智

DevOps 开发工具 华为云

实时云渲染的关键技术是什么?

Finovy Cloud

云计算 3D 云渲染 实时云渲染

最好用的Java开发工具:IDEA 2023激活中文+安装教程

胖墩儿不胖y

Mac 软件 Java 开发 java开发工具

2023中国算力大会,和鲸科技携手生态伙伴共同推动算力创新发展与应用

ModelWhale

AI 算力 云算力 2023中国算力大会

蓝易云:shell简单命令大全。

百度搜索:蓝易云

云计算 Linux 运维 Shell 云服务器

数字化转型与架构-架构设计篇|建模之“动态”模型

数字随行

数字化转型

学习微服务必推荐的天花板级别微服务架构笔记

小小怪下士

Java 程序员 微服务 springboot

iStat Menus for Mac中文下载附激活码

mac大玩家j

Mac软件 系统检测工具

使用 FastGPT 构建高质量 AI 知识库

米开朗基杨

人工智能 云计算 AI ChatGPT FastGPT

C# 8 新增小功能_语言 & 开发_Jonathan Allen_InfoQ精选文章