C# 8小特性

C# 8小特性

对于C# 8,有吸引了大多数注意力的重大特性,如默认接口方法和可空引用,也有许多小特性被考虑在内。本文将介绍几例可能加入C#未来版本的小特性。

\\

新的赋值运算符:\u0026amp;\u0026amp;=和||=

\\

从第一个版本开始,C#就支持把等号和另外一种运算符合在一起的语法。这几乎包括除短路布尔运算符\u0026amp;\u0026amp;和||之外的所有的二元操作符(如+、-、\u0026amp;等)。“赋值运算符\u0026amp;\u0026amp;=和||=”提案是对这个列表的补充。

\\

逐字内插字符串

\\

逐字字符串以@\”开头。内插字符串使用$\”。但是,如果你想要一个既逐字又内插的字符串呢?是用@$\”还是$@\”?目前,其中一个有效,另一个会报编译器错误,但是,人们通常很难记住哪个是哪个。

\\

在一个名为“逐字插入字符串”的中肯提案中,该语法将得到扩展,接受@$\”。对它的解释将和逐字插入字符串($@\”)完全相同,因此,你再也不用担心弄反了。

\\

关于这项修改,存在一些小争议,因为有人认为这没有必要或者会导致不一致。

\\

允许using语句结构匹配IDisposable

\\

接口与C#编译器之间存在着奇怪的关系。经常,你不必为了使用一个语言特性而真正实现一个具体的抽象接口;你只需在类似抽象接口的类上创建一个公开的API。

\\

典型的例子是“foreach”和IEnumerable。如果类有一个方法GetEnumerator,返回一个包含Current属性和MoveNext方法的对象,那么你就可以使用foreach。实际的返回类型不重要,这使得List\u0026lt;T\u0026gt;这样的类似可以实现更快速的枚举器。这通常称为“结构匹配(structural matching)”。

\\

在这个提案中,using语句也将支持结构匹配。这乍看之下没什么用,因为你不会希望看到一个可释放类没有实现IDisposable。不过,有一种名为ref struct的新类型。它们不能实现接口,因此,如果没有这项提案,你在使用它们时就无法使用using语句。

\\

和foreach与using共用的扩展方法

\\

这个提案是前述提案的补充,是为了能够把GetEnumerator或Dispose作为扩展方法添加,并且可以分别和“foreach”或“using”共用。再次,我们谈论的这项特性仅用于非常特殊的情况。例如,你可以从第三方库(这可能是调用Marshal.ReleaseComObject的好地方)向一个COM对象添加一个Dispose扩展方法。

\\

这还不是一个正式的提案,可能会合并到前面提到的“using”语句修改中。

\\

“using”语句隐式作用域

\\

目前,“using”语句后面只能是一个显式作用域(即一对花括号)或者另一个“using”语句。如果这个提案通过,你就可以编写下面这样的代码:

\\

\using var a = new MyDisposable();\using var b = new MyDisposable();\using var c = new MyDisposable();\

\\\上述每个变量都会在当前作用域结束时以相反的顺序自动释放。从功能上说,这和下面的代码等价,但更简洁,也不会引入新作用域。\\

\using (var a = new MyDisposable())\using (var b = new MyDisposable())\using (var c = new MyDisposable())\{\    // 一些代码\}\

\\\当需要多个可释放对象而又不同时创建时,这项修改会特别有用。你甚至可以在表达式中间创建可释放对象,而且可以确信,它将在当前作用域结束时释放。\\

\var results = myExcelReader.ReadResults(using new MyExcelSheet(excelFilePath));

\\

对于这项提案,其中一个批评是,它与某些语句如“goto”不兼容。

\\

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101402.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker(11)Dockerfile 中的COPY与ADD 命令

    docker(11)Dockerfile 中的COPY与ADD 命令前言Dockerfile中提供了两个非常相似的命令COPY和ADD,本文尝试解释这两个命令的基本功能,以及其异同点,然后总结其各自适合的应用场景。Build上下文的概念在使用dock

    2022年7月30日
    18
  • mt4支持python么_py-mt4

    mt4支持python么_py-mt4py-mt4用Python来写MT4的自动化交易脚本????原理使用MQL4原生库调用ZERO-MQ作为消息服务端使用其它语言,如Python作为客户端调用接口安装教程克隆代码下来关闭杀毒软件!!!解压MT4配置文件.rar把Include的东西放到MT4的Include文件夹下把Library/X86/的东西放到MT4的Library文件夹下把ZeroMQ_MT4_EA_Template_Edite…

    2022年5月8日
    45
  • 电力电缆2021年考试题库

    电力电缆2021年考试题库1.不允许带电移动10kV电缆。()×2.直埋电缆的敷设方式适合于电缆根数多的区域。()×3.中性点不接地电力系统发生单相接地时,健全相对地电压升高。()√4.中性点直接接地电力系统发生单相接地时,线电压不变。()×5.电缆敷设过程中应控制侧压力,高压和超高压电缆允许的侧压力一般为()。CA.1kN/mB.2kN/mC.3kN/m6.在交流电压下,随电压作用时间增加,绝缘层击穿场强()。BA.不变B.下降C.上升7.组织电缆线路工程预验收的单位是运行单位。(.

    2022年5月7日
    53
  • matlab矩阵点乘点除,点除与矩阵除法

    matlab矩阵点乘点除,点除与矩阵除法点除与矩阵除法:在书写程序的时候,点乘和矩阵乘法写错的时候再进行程序调适的时候MATLAB会返回错误说明。但是对于点除容易出现问题,下面以一个简单的例子说明这个问题:比如我们要计算:A=[1,1];B=[2,1];C=A/B;上面的程序我们计算的是A与B的点除。但是由于疏忽而把点除“./”写为“/”这样结果是不同的,大家可以看看它们的结果:>>A/Bans=0.6000…

    2022年6月16日
    55
  • linux网络配置出现E325,linux下vi操作出现E325: ATTENTION的解决方法

    linux网络配置出现E325,linux下vi操作出现E325: ATTENTION的解决方法MyBatis,动态传入表名,字段名的解决办法转载:http://luoyu-ds.iteye.com/blog/1517607今天做项目,遇到的问题就是需求修改数据表的记录,而且字段名都不是固定的,也就是说是需要通过参数传入的,本来这也不是…JavaScript–事件模型(转)在各种浏览器中存在三种事件模型:原始事件模型(originaleventmodel),DOM2事件模型…

    2022年5月19日
    41
  • linux默认关闭防火墙(win10永久关闭防火墙命令)

    Linux关闭防火墙命令问题:老是关闭防火墙太麻烦,所以选择彻底关闭防火墙,发现每次都记不住命令!特此记录

    2022年4月15日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号