C#9.0 每个开发人员都必须知道的4个特性

在 .NET 5.0 的发布中,不仅统一了框架,微软还在C#9.0中推出了一些新特性。

本版本中,印象深刻的功能:

  • Init-only setters (初始化设置器)

  • Records (记录)

  • Top-level statements (顶级语句)

  • Pattern matching (模式匹配)

Init-only setters (初始化设置器)

以前,使用不可变数据实例化对象必须在构造函数中通过将值作为参数传递来完成。现在,它已被简化为使用语法 init。它在对象创建期间初始化不可变数据,这允许开发人员创建不可变属性。

参考常规代码:

class Customers
{public int CustomerId { get; }public string CustomerName { get; set; }public Customers(int customerId){CustomerId = customerId;}static void Main(string[] args){var customers = new Customers(1045){CustomerName = "Tyson"};//customerid 不能设置,因为该属性是只读customers.CustomerId = 1099;}
}

使用 Init-only setters:

class Customers
{public int CustomerId { get; init; }public string CustomerName { get; set; }static void Main(string[] args){var customers = new Customers(){CustomerId = 1045,CustomerName = "Tyson"};//CS8852:只能在对象初始值设定项中或在实例构造函数或...分配customers.CustomerId = 1099;}
}

Records (记录)

记录允许我们像处理值而不是属性集合一样处理对象。由于记录主要处理不可变状态,因此它们很灵活,也最适合用于数据而不是功能。
在以下示例中,我使用 with 表达式创建了一个新记录,该记录从另一个记录继承值。

参考常规代码:

class SalesOrder
{public int OrderId { get; init; }public string ProductName { get; init; }public int Quantity { get; init; }static void Main(string[] args){SalesOrder order = new SalesOrder { OrderId = 1, ProductName = "Mobile", Quantity = 2 };//修改ProductNameSalesOrder newOrder = new SalesOrder { OrderId = order.OrderId, ProductName = "Laptop", Quantity = order.Quantity };}
}

使用 Records:

public record SalesOrder
{public int OrderId { get; init; }public string ProductName { get; init; }public int Quantity { get; init; }static void Main(string[] args){SalesOrder order = new SalesOrder { OrderId = 1, ProductName = "Mobile", Quantity = 2 };SalesOrder newOrder = order with { ProductName = "Laptop" };}
}

Top-level statements (顶级语句)

此功能可帮助软件开发人员从程序中排除不需要的代码。顶级语句可以用一行替换所有重复代码。

参考常规代码:

using System;namespace CSharp9
{class Program{static void Main(string[] args){Console.WriteLine("Welcome!");}}
}

使用 top-level statements:

using System;Console.WriteLine("Welcome !");

更准确地说,我们可以使用:

System.Console.WriteLine("Welcome !");

Pattern matching (模式匹配)

C# 9.0 包含许多新模式,但在这里我们将讨论关系模式和逻辑模式。

  • 关系模式
    这些模式与诸如 <、<=、> 和 >= 之类的关系运算符一起使用。

  • 逻辑模式
    这些模式与逻辑运算符如 and、or 和 not 一起使用。

参考代码:

public class SalesOrder
{public int OrderId { get; set; }public string ProductName { get; set; }public int Quantity { get; set; }public int TotalCost { get; set; }public double GetTotalCost() => TotalCost switch{500 or 600  => 10,< 1000 => 10 * 1.5,<= 10000 => 10 * 3,_ => 10 * 5};
}class CSharpFeatures
{static void Main(string[] args){SalesOrder newOrderforCustomer1 = new SalesOrder() { OrderId = 1, ProductName = "Camera", Quantity = 1, TotalCost = 5000 };newOrderforCustomer1.GetTotalCost();SalesOrder newOrderforCustomer2 = new SalesOrder() { OrderId = 2, ProductName = "Pen", Quantity = 1, TotalCost = 500 };newOrderforCustomer2.GetTotalCost();}
}

结论

借助这些功能,C# 9.0 可帮助程序员轻松处理数据(记录)、形状代码(模式匹配)和简化代码(顶级语句)。
如果想了解更多关于 C# 9.0 正式版中的新功能,请阅读此文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Binary Search二分法搜索C++程序

二分法基本上学计算机的都听过&#xff0c;但是有人不知道的就是其实二分法是减治法的思想。 所谓减治法和分治法有一个主要差别就是减治法是减去一般&#xff0c;就是分治之后只需要解决原问题的一半就可以了得到全局问题的解了。所以速度很快。 下面是二分法的递归程序和非递…

linux 后台一直执行的sh

echo "nohup /home/test/inosync.sh &" >> /etc/rc.local转载于:https://blog.51cto.com/837877/1069581

求两个数的最小公约数和最小公倍数

题目: 求两个数的最小公约数和最小公倍数 思路: 求最大公约数: 欧几里得在其《几何原本》中提出的欧几里得算法,有称辗转相除法, 具体做法是如果q和r分别是m除以n的商及玉树,m=nq+r,那么m和n的最大公约数等于n和 r的最大公约数 求最小公倍数:最小公倍数等于a*b/他…

idea mysql 创建表_idea 根据数据库表自动创建持久化类

TODO&#xff1a;Go语言goroutine和channel使用TODO:Go语言goroutine和channel使用 goroutine是Go语言中的轻量级线程实现,由Go语言运行时(runtime)管理.使用的时候在函数前面加"go"这个 ...翻译&#xff1a;使用 ASP&period;NET MVC 4&comma; EF&comma;…

.NET 6新特性试用 | Nuget包验证

前言我们常常需要将.NET类库打包成Nuget包&#xff0c;以便多个项目公用。一旦修改类库&#xff0c;尽管代码可以运行&#xff0c;并成功打包成新版本&#xff0c;看起来一切正常&#xff0c;但是你无法保证该更改是安全且兼容的。而在.Net 6中&#xff0c;提供了包验证工具&am…

php基础系列:从用户登录处理程序学习mysql扩展基本操作

用户注册和登录是网站开发最基本的功能模块之一&#xff0c;现在通过登录处理程序代码来学些下php对mysql的基本操作。 本身没有难点&#xff0c;主要是作为开发人员&#xff0c;应该能做到手写这些基本代码&#xff0c;算是自己加强记忆&#xff0c;同时希望能给初学者一些参考…

SSIS package 更新 variable

在Package中声明一个variable&#xff0c;在package运行的过程中&#xff0c;SSIS如何update Variable&#xff1f; 第一种方法&#xff1a;使用 Script Task 来更新Variable的值 1&#xff0c;创建一个variable &#xff0c;VariableName是VarCode&#xff0c;并将变量传递到脚…

socket第三方库 AsyncSocket(GCDAsyncSocket)

为什么80%的码农都做不了架构师&#xff1f;>>> Socket描述了一个IP、端口对。它简化了程序员的操作&#xff0c;知道对方的IP以及PORT就可以给对方发送消息&#xff0c;再由服务器端来处理发送的这些消息。所以&#xff0c;Socket一定包含了通信的双发&#xff0c…

想给男友一个惊喜,没想到是这样的结局......

1 想给男友一个惊喜&#xff08;via.澎湃新闻&#xff09;▼2 花10w买了副画&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 台北温馨一幕▼4 把土豆切成丁&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼5 你为何如此自信&#xff1f;&#xff08;素材…

NS 802.11函数分析(一)

recv函数有两个作用&#xff0c;不仅是接收其他节点发送的包&#xff0c;而且当节点接收到其他包的时候也会调用recv&#xff08;&#xff09; 首先给出NS2中recv的源码&#xff0c;和一些注释&#xff1a; 1 void2 Mac802_11::recv(Packet *p, Handler *h)3 {4 struct hdr…

Android之怎么隐藏EditText光标和自动显示键盘

不废话,先爆照 让EditText不现实光标 关键代码: android:focusable="true" android:focusableInTouchMode="true" 写这个父视图里面 下面是全部代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"…

0408~送给小伙伴的汉堡包

经过一番的结对编程&#xff0c;同学院们对Ta有什么想法呢&#xff1f; 用汉堡包的方式评价一下自己的合作伙伴。 开始囉~~~~~~~~ 第一片面包&#xff1a;解决问题的能力还是蛮强的&#xff0c;在编程的过程中精力集中&#xff0c;遇到不懂的问题积极查找相关资料&#xff0c;而…

基于事件驱动架构构建微服务第14部分:查询API

原文链接&#xff1a;https://logcorner.com/building-micro-services-through-event-driven-architecture-part14-query-api/在本教程中&#xff0c;我将展示如何构建一个查询API&#xff0c;使用命令查询职责分离(CQRS)模式在微服务架构中实现查询。读取模型的目标是构建一个…

Win32窗体实现接受拖拽文件,检测鼠标拖拽操作,检测鼠标滚轮操作

使窗体能够接受文件拖拽 DragAcceptFiles(hwnd, TRUE);文件拖拽在win32窗体过程函数中对WM_DROPFILES消息进行处理 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch (uMsg){case WM_DESTROY:PostQuitMessage(0);return 0;case WM_D…

python序列元素的编号称为_Python序列

序列是一块用于存放多个值的连续内存空间,并且按照一定顺序排列,没一个值(称为元素)都分配一个数字,称为索引或位置.通过该索引可以去除相应的值在Python中,序列结构主要有列表 元组 集合 字典和字符串,对于这些序列结构有以下几个通用的操作.其中,集合和字典不支持索引 切片 相…

​“北斗女神”徐颖,32岁成为中科院最年轻的博导!

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;学术志被誉为“北斗女神”的徐颖研究员在32岁就成为了中科院最年轻的博士生导师&#xff0c;真是羡煞旁人。一分耕耘一分收获&#xff0c;我们要向为国家做出巨大贡献的科学家学习。徐颖、颜值、气质、才华、幽默集于一身…

通过jQuery源码学习javascript(三)

序承接上两篇继续写下去。我尽量把我明白的地方给大家说清楚。有些大家的提问我也有点搞不明白&#xff0c;如果有人能解答&#xff0c;再好不过了。疑问第一篇中有位博友提出了以下的问题&#xff0c;我也不太明白&#xff0c;如果有明白的&#xff0c;能否告知一、二。var st…

mysql复习

mysql复习 一:复习前的准备 1:确认你已安装wamp 2:确认你已安装ecshop,并且ecshop的数据库名为shop二 基础知识: 1.数据库的连接 mysql -u -p -h -u 用户名 -p 密码 -h host主机2:库级知识 2.1 显示数据库: show databases; 2.2 选择数据库: use dbname; 2.3 创建数据库: creat…

链表之单链表的反转总结

单链表的反转是常见的面试题目。本文总结了2种方法。 1 定义 单链表node的数据结构定义如下&#xff1a; class ListNode {int val;ListNode next;ListNode(int x) {val x;next null;} }2 方法1&#xff1a;就地反转法 2.1 思路 把当前链表的下一个节点pCur插入到头结点dummy…

封神!Win11内置杀软被评为免费最佳

微软 Windows Defender 预装在 Windows 10 和 Windows 11 操作系统上。根据最新报告显示&#xff1a;Windows Defender 是 2021 年最好的防病毒软件&#xff08;杀毒软件&#xff09;之一。近日&#xff0c;位于德国的 IT 安全研究机构 AV-TEST 发布了针对 Windows 10 操作系统…