服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#9.0推出的4个新特性介绍

C#9.0推出的4个新特性介绍

2023-02-07 14:19痕迹g C#

这篇文章介绍了C#9.0推出的4个新特性,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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

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

  • Init-only setters (初始化设置器)
  • Records (记录)
  • Top-level statements (顶级语句)
  • Pattern matching (模式匹配)

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

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

参考常规代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 表达式创建了一个新记录,该记录从另一个记录继承值。

参考常规代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 };
 
        //修改ProductName
        SalesOrder newOrder = new SalesOrder { OrderId = order.OrderId, ProductName = "Laptop", Quantity = order.Quantity };
    }
}

使用 Records:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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 (顶级语句)

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

参考常规代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
using System;
 
namespace CSharp9
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Welcome!");
        }
    }
}

使用 top-level statements:

?
1
2
3
using System;
 
Console.WriteLine("Welcome !");

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

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

Pattern matching (模式匹配)

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

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

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

参考代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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 正式版中的新功能,请阅读此文档

以上所述是小编给大家介绍的C#9.0推出的4个新特性,希望对大家有所帮助。在此也非常感谢大家对服务器之家网站的支持!

原文链接:https://www.cnblogs.com/zh7791/p/15222578.html

延伸 · 阅读

精彩推荐
  • C#WPF实现手风琴式轮播图切换效果

    WPF实现手风琴式轮播图切换效果

    这篇文章主要为大家详细介绍了WPF实现手风琴式轮播图切换效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    RunnerDNA6542022-10-09
  • C#利用C#实现网络爬虫

    利用C#实现网络爬虫

    这篇文章主要介绍了利用C#实现网络爬虫,完整的介绍了C#实现网络爬虫详细过程,感兴趣的小伙伴们可以参考一下...

    C#教程网10042021-11-16
  • C#C#.NET实现网页自动登录的方法

    C#.NET实现网页自动登录的方法

    这篇文章主要介绍了C#.NET实现网页自动登录的方法,以实例形式分析了C#实现点击自动登录的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    清清飞扬11862021-10-28
  • C#C# webclient中文乱码问题解决方法

    C# webclient中文乱码问题解决方法

    本文介绍使用webclient抓取远程页面出现乱码的处理方法,希望对大家有所帮助。...

    秦风4542021-11-22
  • C#C# Winform中如何绘制动画示例详解

    C# Winform中如何绘制动画示例详解

    这篇文章主要给大家介绍了关于C# Winform中如何绘制动画的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C# Winform具有一定的参考学习...

    小y8512022-09-07
  • C#C#基于Socket的TCP通信实现聊天室案例

    C#基于Socket的TCP通信实现聊天室案例

    这篇文章主要为大家详细介绍了C#基于Socket的TCP通信实现聊天室案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    qq_43552118zx5172022-12-26
  • C#C#创建及读取DAT文件操作

    C#创建及读取DAT文件操作

    这篇文章主要介绍了C#创建及读取DAT文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    秋漓10872022-10-21
  • C#C#实现DataTable,List和Json转换的方法

    C#实现DataTable,List和Json转换的方法

    这篇文章主要介绍了C#实现DataTable,List和Json转换的方法,结合实例形式分析了DataTable、list、DataReader、DataSet等转换成JSON的相关实现技巧,需要的朋友可以参考...

    Quber4842021-12-03