当前位置:首页 > 科技数码

lastname Build 2020上公布的C# 9.0新特性

转自:马克康

cnblogs.com/markkang/archive/2020/05/22/12928528.html

在微软的Build 2020开发者大会上,微软解释了即将添加的C#9.0的一些主要特性。

I. init属性访问器

对象初始化是一种非常灵活和可读的创建对象的格式,尤其是创建树嵌入对象。简单的例子

新人

{

FirstName= "Scott ",

姓氏=“猎人”

}

最初,为了初始化对象,我们必须编写一些属性,在构造函数的初始调用中,我们可以通过给属性的setter赋值来实现这一点。

publicclassPerson

{

publicstringFirstName { get设置;}

publicstringLastName { get设置;}

}

第二,初始化属性访问器和只读字段

因为init访问器只能在初始化期间调用,所以只能在构造函数中初始化的只读字段现在可以在属性中而不是构造函数中初始化。构造函数被省略。

publicclassPerson

{

privatereadonlystringfirstName;

privatereadonlystringlastName

publicstringFirstName

{

get= >;名字;

init =>。firstName =(值??throwNewargumentNullException(name of(First name)));

}

publicstringLastName

{

get= >;姓氏;

init =>。lastName =(值??throwNewargumentNullException(name of(LastName)));

}

}

三.记录

四.带着表情

varotherPerson =具有{ LastName = "Hanselman"}的人;

5.基于价值的平等

如果不喜欢默认为Equals重写的字段和字段比较行为,可以重写。你只需要仔细了解基于值的等式在记录中是如何工作的,特别是涉及到继承的时候,后面会提到。

除了基于值的Equals,还有一个基于值的GetHashCode的覆盖。

不及物动词数据成员

这使得记录语句看起来美观、清晰、直观。如果确实需要私有字段,可以显式添加私有修饰符。

privatestringfirstName

七.位置记录

您可以在记录中指定构造函数和析构函数(注意它们不是析构函数)。

publicdata classPerson

{

stringFirstName

stringLastName

publicPerson( stringfirstName,stringlastName)

= >;(名字,姓氏)=(名字,姓氏);

公共失效解构(超越域名,超越域名)

= >;(名字,姓氏)=(名字,姓氏);

}

你也可以用更简洁的语法表达同样的内容。

public data CLaSS person(StringFirstName,StringLastName);

该方法用初始化、构造函数和解构函数声明开放的自动属性,不同于第6条第1款中用大括号声明的方法。现在,您可以编写以下代码:

varperson = newPerson( "Scott "," Hunter ");//位置构造

var(f,l)= person;//位置解构

九.表达与继承

众所周知,基于等值和价值无损变化的方法,在与继承交织时,是很有挑战性的。接下来,我们添加一个继承记录类学生来说明我们的例子:

public data CLaSS person { StringFirstName;stringLastName}

public data class student:Person { Intid;}

接下来,我们通过创建一个学生来说明with表达式的使用,但是将它存储在Person变量中:

person person = new Student { first name = " Scott ",LastName = "Hunter ",ID = getnew ID };

otherPerson=具有{ LastName= "Hanselman"}的人;

然而,平等有一个特殊的挑战,即如果比较两种不同类型的人会发生什么?我们不能让其中一个来决定适用哪个平等:平等应该是语义上的,所以无论两个对象哪个先来,解构都应该是一样的。换句话说,他们必须就适用的平等达成一致。

这个问题的例子如下:

personal Person 1 = new Person { first name = " Scott ",last name = " Hunter " };

Personperson2 =新学员{ FirstName= "Scott ",LastName = "Hunter ",ID = GetNewid };

usingSystem

classProgram

{

staticvoidMain()

{

控制台。写线(“你好世界!”);

}

}

这对于初学者来说是不可抗拒的,但是会让代码凌乱,堆积很多,增加缩进量。在C#9.0中,您可以选择用以下代码在顶层编写您的主程序:

usingSystem

控制台。写线(“你好世界!”);

十二.增强型模式匹配

C#9.0增加了几个新的模式。如果您想了解以下代码片段的上下文,请参考模式匹配教程:

public static decimal CalculateToll(目标车辆)= > gt;

车辆开关

{

...

当总重量级>时交货卡车测试;5000=>。10.00m + 5.00m,

当t . GrossWeightClass & lt3000=>。10.00米-2.00米,

送货卡车_ = >;10.00米,

_ = >;抛出新车型异常(“未知车型”,车辆名称))

};

交货卡车t当t.GrossWeightClass开关

{

>。5000=>。10.00m + 5.00m,

& lt3000=>。10.00米-2.00米,

_ = >;10.00米,

},

这里是>:5000和

3.逻辑模式

最后,可以将模式与逻辑运算符and、or、and结合起来,不做详细解释,避免表达式运算符带来的混乱。例如,上面嵌入的开关可以按升序排序,如下所示:

交货卡车t当t.GrossWeightClass开关

{

& lt3000=>。10.00米-2.00米,

>。= 3000and<。= 5000=>。10.00米,

>。5000=>。10.00m + 5.00m,

},

在中间情况下,和用于组合两个关系模式以形成表示区间的模式。

not模式的常用是会用在null常量模式上,就像not null一样。例如,我们需要根据是否为空,来划分一个未知的案件处理代码段:

不为null=>。thrownewArgumentException( $“未知车辆类型:{车辆}”,车辆名称)),

null=>。thrownewArgumentNullException(车辆名称)

在包含is表达式的if条件语句中不使用它也很方便,而且它将替换重双括号:

if(!(e isCustomer)) {...}

你可以这样写:

if(e isnotCustomer) {...}

十三.增强的目标类型

点p =新(3,5);

2.目标是打字的吗??然后呢?:

有时候,条件表达式??然后呢?:分行没有明显的共享类型。目前这种情况会失败,但是在C#9.0中,如果每个分支都可以转换成目标类型,这种情况是允许的。

人人=学生??客户;//共享基本类型

int?结果= b?0:null;//可空值类型

十四.支持协变返回值

有时,在子类的重写方法中返回更具体的返回类型更有用,这不同于父类的方法定义。C# 9.0支持这种情况。

抽象类动物

{

public abstractfood GetFood();

...

}

类别老虎:动物

{

publicatoverrideate GetFood()= >;...;

}

1.《lastname Build 2020上公布的C# 9.0新特性》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《lastname Build 2020上公布的C# 9.0新特性》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/1106076.html

上一篇

离人心上薛曜为什么娶那溪郡主 薛曜出轨了吗

下一篇

村里水塘荒废成烂泥坑 多年后遍地“宝贝”村民沸腾了

“130模式”开启后,浦东机场这样转运无症状高风险旅客

除了“120模式”,浦东机场一线还有“130模式”,严控境外进口。上海海关副署长姜媛在3月22日举行的上海疫情防控工作会议上表示,上海海关对症状明显的旅客立即启动“120模式”,直接从120辆车中转到定点医疗机构进行救治;...

上海浦东机场闭环管理下的“130模式”新在哪?

3月27日,上海浦东机场为严格控制境外疫情输入,采用“120模式”和“130模式”实现关键人员闭环管理。...

变身狐仙 英雄开启暖暖模式,诸葛亮成云中君,李白变身狐仙,大乔成美人鱼

  • 变身狐仙 英雄开启暖暖模式,诸葛亮成云中君,李白变身狐仙,大乔成美人鱼
  • 变身狐仙 英雄开启暖暖模式,诸葛亮成云中君,李白变身狐仙,大乔成美人鱼
  • 变身狐仙 英雄开启暖暖模式,诸葛亮成云中君,李白变身狐仙,大乔成美人鱼
古田1929 上杭县古田镇创建古田“1929”党建工作模式

古田1929 上杭县古田镇创建古田“1929”党建工作模式

4月17日,上杭县古田镇建设开发场面热闹非凡,党群服务队忙得不可开交:上杭县医院古田分院完成征地任务95%以上,项目建设“进攻队”正在收尾;农村振兴“战斗队”在西贝、梨园、下过车、乌龙、磨坑、来坊、朱令、大源等村推进房屋结构隐患排查整改100天,一天拆除空房及杂居1245平方米... 这是古...

微信hd版官方 腾讯措不及防,微信遵守ios深色模式没被下架,QQ HD却被苹果下架

  • 微信hd版官方 腾讯措不及防,微信遵守ios深色模式没被下架,QQ HD却被苹果下架
  • 微信hd版官方 腾讯措不及防,微信遵守ios深色模式没被下架,QQ HD却被苹果下架
  • 微信hd版官方 腾讯措不及防,微信遵守ios深色模式没被下架,QQ HD却被苹果下架
苹果微信无法更新版本 安卓版微信深夜模式已发布,看看你的手机能不能更新?

苹果微信无法更新版本 安卓版微信深夜模式已发布,看看你的手机能不能更新?

记得前段时间苹果对马花藤大吼大叫。如果你用iOS13不加深夜模式微信,我就把你下架。微信黑暗模式的缺失在不久前引起了争议。原因是有开发者表示已经收到苹果强制要求应用适应黑暗模式的邮件,否则将在4月下架。一时间,不支持暗模式的微信被推到了风口浪尖。甚至有人评论说,这是微信团队在“奖励门”之后第...

凤翔在线 12xue助力凤翔县纸坊中学全校师生开启在线教学新模式

  • 凤翔在线 12xue助力凤翔县纸坊中学全校师生开启在线教学新模式
  • 凤翔在线 12xue助力凤翔县纸坊中学全校师生开启在线教学新模式
  • 凤翔在线 12xue助力凤翔县纸坊中学全校师生开启在线教学新模式
刷单实为非法商业模式 究竟是怎么回事?

刷单实为非法商业模式 究竟是怎么回事?

“正规平台,邀请买单,按规定结账,轻松上手”“轻松,轻松赚钱不用打工”...诸如此类的“网络兼职”小广告,在很多兼职群里,空,朋友圈里经常看到。很多大学生、年轻人、失业群体都成了这类单类案件的高危人群。其实这些都是网络诈骗...