立即领取|华润集团、宁德核电、东风岚图等 20+ 标杆企业数字化人才培养实践案例 了解详情
写点什么

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:0015466
用户头像

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

关注

评论

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

Python连接es笔记二之查询方式汇总

Hunter熊

Python elasticsearch Elasticsearch-dsl

你真的了解“有钱人”吗?

少油少糖八分饱

笔记 阅读 搞钱 致富 有钱人

「AI技术图像编辑软件」Luminar Neo for Mac

彩云

Luminar Neo AI技术图像编辑软件

亚马逊云科技AI创新应用下的托管在AWS上的数据可视化工具—— Amazon QuickSight

淼.

体育平台未来发展提供思路和建议,体育直播系统程序和赛事数据融合

软件开发-梦幻运营部

WordPress 基于亚马逊云的部署实践(一)- 架构设计

王坤祥

AWS 亚马逊云 Amazon EC2 云服务器

openAi基于java jtokkit实现分词

智慧源点

jtokkit

一款带数字传输信号的OVP芯片

梦笔生花

亚马逊Lightsail:云服务新篇章,轻松开启您的数字未来

熬夜磕代码、

亚马逊云 AWS Lightsail

jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法

javaNice

Java stream

智慧工地管理平台源码

源码星辰

工地 智慧工地

使用 Filebeat+Easysearch+Console 打造日志管理平台

极限实验室

Filebeat console 日志管理 easysearch

2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵。 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5

福大大架构师每日一题

福大大架构师每日一题

「Macos好用的图片处理工具」Affinity Photo 最新中文版

加油,小妞!

图像处理 Affinity Photo

「Macos排版神器」Affinity Publisher for Mac中文直装版

彩云

Affinity Publisher

Jenkins 打包shell出现gradle命令不存在,jvm内存溢出

javaNice

Java jenkins

Coherence X for Mac「网站转换为Mac应用」

彩云

Coherence X

iShowU Studio 2 for Mac(屏幕录制编辑工具) 2.3.12永久激活版

mac

苹果mac Windows软件 iShowU Studio 2 屏幕录像工具

Redis缓存雪崩、击穿、穿透解释及解决方法,缓存预热,布隆过滤器 ,互斥锁

javaNice

Java redis

新网的机房写的是BGP链路,什么是BGP链路啊?

Geek_f19a80

服务器

亚马逊Amazon OpenSearch Serverless"利刃在手,‘向量’八方"

淼.

AWS EC2、阿里云ECS、腾讯云CVM初步对比

穿过生命散发芬芳

腾讯云 阿里云 AWS

连接亚马逊云EC2的几种方式

孤虹

亚马逊云EC2部署QNAP

孤虹

Unite for mac「将网站转换为应用程序」

加油,小妞!

Unite for Mac

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