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

目标类型表达式

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

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

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

A a1 = b ?? c;A a2 = x>0 ? b : 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 也可以被标记为只读。比如,当属性值存于字典中而不是直接存入结构本身的时候。

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

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

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

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

原文地址:https://www.infoq.cn/article/H9a_LecLcPwkQoWyTYNf


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

C# 8 新增小功能相关推荐

  1. 微信小程序新增推广功能,支持自定义关键词

    为方便用户找到所需小程序,并帮助小程序更准确地触达用户,微信小程序向开发者提供了自定义关键词的功能.小程序后台新增推广功能,支持开发者添加与业务相关的自定义关键词.开发者可在小程序后台的 " ...

  2. 会员卡券领取 小程序_新增卡券功能在哪 微信小程序内直接领取卡券方法

    微信小程序新增卡券功能在哪?怎么在微信小程序内直接领取卡券?近日,微信小程序又新增了几大功能,其中包括卡券功能.用户可以直接从小程序中领取会员卡或者优惠券了,也可以从卡包中的会员卡直达小程序,非常方便 ...

  3. 小米9pro textView不设置颜色不显示_小米万象息屏2.0内测开启,新增小组件功能和新息屏...

    halo,各位小伙伴们大家晚上好呀,一起来看看今天更新机型有哪些吧: 由于正在测试系统稳定性,小米10青春版.小米9Pro.Redmi K30 5G推迟发布: 为更新基线版本,能给大家带来相对更好体验 ...

  4. JeeWx 商业版本最近新增什么功能啦?

    JeeWx 商业版本最近新增什么功能啦? 2014-12-18 jeecg JEECG jeewx开发新功能 一.微信墙 此功能可以设置属于该公共号的微信墙,在微信客户端上输入微信墙即可进入微信墙模式 ...

  5. Visual Studio 2005 中的新增安全性功能

    Visual Studio 2005 中的新增安全性功能 Visual Studio 2005 中的新增安全性功能 发布日期: 11/18/2005 | 更新日期: 11/18/2005 Brian ...

  6. 前端模板-2【vue部分小功能、bug处理】

    前端模板[vue部分小功能] 1 Vue部分模板 1.1 vue实现store[存储当前选中页面] 我的习惯用法,大家可自行调整[以存储当前页面名称为例] ①在src下新建文件夹store,并创建co ...

  7. android 灰阶模式,加强系统封闭性,安卓9.0新增几大功能,网友:已经赶上苹果iOS了...

    原标题:加强系统封闭性,安卓9.0新增几大功能,网友:已经赶上苹果iOS了 智能手机操纵系统经过历代淘沙,最终留下两大阵营:谷歌的安卓阵营和苹果的iOS阵营.一款手机的操作系统的好坏取决于这款手机的整 ...

  8. python登录微信pc版_微信PC版2.9.0测试版更新:新增小程序面板

    3月26日讯,近日,腾讯微信团队推送了微信PC版2.9.0的公共测试更新,此次更新增加了不少实用功能,对过往的许多痛点也有所改进,个人非常期待微信2.9.0版本的正式更新. 作为国民级的通讯产品,腾讯 ...

  9. 我的世界手游租赁服务器维护,我的世界4月26日停服更新公告 新增服务器租赁功能...

    我的世界凌晨发布了4月26日停服更新公告,在这次更新公告中,游戏将会新增服务器租赁功能,以后玩家就可以在游戏中创建一个世界跟自己的朋友一起玩了,详细资讯让我们一起往下看. 我的世界4月26日停服更新公 ...

最新文章

  1. CTreeCtrl标签的编辑
  2. C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例
  3. android popupwindow 自定义背景,Android PopupWindow背景半透明兼容方案
  4. 需求分析读书笔记(一)
  5. python基础教程第3章——字符串
  6. 获取 iPhone 上联系人姓名、电话、邮件的代码
  7. Linux下core文件调试方法收藏
  8. c语言中的无符号字节,C语言之有符号数和无符号数
  9. 【 HDU - 5093】Battle ships(匈牙利算法,二分图匹配)
  10. 掌控谈话~拔刺(说出你对我的指控)
  11. 放苹果(信息学奥赛一本通-T1206)
  12. [Windows Phone] 如何在 Windows Phone 应用程式制作市集搜寻
  13. lightoj 1016
  14. cmd 编码修改。 牛阿。 解决问题
  15. Remoting事件序列一:客户端触发服务器端事件
  16. View和ViewGroup的区别
  17. 高通8953启动流程
  18. 给对话框加上背景皮肤
  19. 【项目10】python+flask搭建CNN在线识别手写中文网站
  20. AtCoder Beginner Contest 214(补题)

热门文章

  1. python webservice接口测试传参数_Python3 webservice接口测试方法是什么
  2. jQuery杂项进阶(四)
  3. 如何解决高并发,秒杀问题
  4. 外部中断0(含知识点)
  5. AmazeUI基本样式
  6. zend guard6的使用
  7. Asymptote 学习记录(2):例子阅读
  8. VS.NET调试问题
  9. 如何有效的在 LINQ 查询中处理异常?
  10. C# 使用Awaiter