C#9特性record 类型、模式匹配、init 属性详情

C# 9是一个充满了新特性的版本,其中最显著的新特性之一是引入了record类型、模式匹配以及init属性等内容。

Record类型

record类型是C# 9中新增的一种类型,用来描述对象的数据以及行为。其与class类型相似,但是有一些显著的区别:

  • Record是一个不可变的类型,即其生成实例后其中的属性值不可更改
  • Record类型默认实现了Equals、GetHashCode、ToString等方法,且这些方法可以进行自定义的扩展
  • Record类型支持解构和with表达式

举个例子:

public record Person(string Name, int Age, string Address);

var p1 = new Person("Zhang San", 18, "Beijing");
var p2 = p1 with { Age = 20 };

if (p1 == p2)
{
    Console.WriteLine("p1 equals to p2");
}

上面例子中定义了一个Person类型,并给出了一组初始值进行赋值。接下来使用了with表达式对其中的Age属性进行了更新,并使用了==运算符对比了p1和p2的对象是否相等。

模式匹配

模式匹配是C# 9中另一个值得关注的特性,其在switch语句和if语句中都可以使用。模式匹配可以通过对已知的类型进行类型判断,并用类型转换的内容来获取其属性和方法。

举个例子:

object obj = "hello, world";

if (obj is string str && str.Length > 0)
{
    Console.WriteLine(str);
}

上面例子中对变量obj进行了类型判断和转换操作,如果其所代表的类型是string类型,那么则继续进行后续代码的执行,否则则跳出if语句。

Init属性

C# 9中,对于初始化一个对象的过程进行了简化。通过init属性,可以在定义变量的时候对变量进行初始化,并且可以在后续的代码中对其属性进行修改。

举个例子:

public class Person
{
    public string Name { get; init; }
    public int Age { get; init; }
}

var p1 = new Person { Name = "Zhang San", Age = 18 };

p1.Name = "Li Si";

上面例子中定义了一个Person类,其中所有属性都使用了init属性,这意味着可以在生成实例的时候对其内部属性进行初始化,且后续不可再进行更改。之后使用了p1.Name = "Li Si"的方式对其name属性进行修改,这是不允许的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#9特性record 类型、模式匹配、init 属性详情 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 安全技术—RSA公钥密码体制安全性分析

    RSA公钥密码体制是目前广泛应用于网络数据传输中的一种常用加密技术。本篇攻略将结合RSA密码体制的基本原理,分析其安全性,并探讨RSA密码体制在实际应用中可能面临的攻击手段,提出相应的应对方法。 基本原理 RSA公钥密码体制中,通信双方分别生成公钥和私钥。公钥系数n是两个大素数p和q的乘积,加密时使用公钥加密信息。私钥则由两个大素数p和q以及指数e计算出,解…

    C# 2023年6月7日
    00
  • C#中感叹号(!) 的作用总结

    当在C#中提及感叹号(!)时,通常指的是逻辑非运算符。这个运算符常用于实现反转布尔值。 逻辑非运算符返回一个布尔值(true或false)。如果操作数为true,则该运算符返回false;如果操作数为false,则该运算符返回true。 在C#中,逻辑非运算符主要有以下两种应用: 运用于空引用类型,表示判定该对象是否为空 在C#中,操作符!被用来判断对象是否…

    C# 2023年6月6日
    00
  • 如何在ASP.NET Core类库项目中读取配置文件详解

    如何在ASP.NET Core类库项目中读取配置文件详解 在ASP.NET Core中,读取配置文件是非常常见的操作。本攻略将提供详细的步骤和示例说明,演示如何在ASP.NET Core类库项目中读取配置文件。 步骤 步骤1:创建一个新的ASP.NET Core类库项目 首先,需要创建一个新的ASP.NET Core类库项目。可以使用以下命令在命令行中创建一…

    C# 2023年5月17日
    00
  • C#实现绘制面形图表的方法详解

    当需要在C#中实现绘制面形图表时,可以使用以下方法: 步骤1:安装NuGet包 为了使用绘图库,需要在Visual Studio中安装NuGet包,比较常用的有: OxyPlot.Wpf Live-Charts 其中 OxyPlot.Wpf 比较常用。 可以在 Visual Studio 中通过 NuGet 包管理器搜索并安装这些包。 步骤2:引用OxyPl…

    C# 2023年6月7日
    00
  • C#通过第三方组件生成二维码(QR Code)和条形码(Bar Code)

    生成二维码(QR Code)和条形码(Bar Code)是许多网站和应用程序的常见需求。在C#语言中,可以通过使用第三方组件来方便地生成二维码和条形码。本文将详细介绍如何通过第三方组件生成二维码和条形码的完整攻略。 一、引用组件 在使用之前,需要使用Nuget引用ZXing.Net组件,ZXing.Net是一个基于C#的开源的多格式条形码图片生成库,不仅兼容…

    C# 2023年6月3日
    00
  • C#导出Excel的示例详解

    C#导出Excel的示例详解 介绍 在实际的项目中,我们经常需要将数据导出到Excel表格中,以方便查阅和管理。C#作为一门强大的编程语言,在导出Excel方面也有非常不错的表现。本篇文章将详细讲解如何使用C#导出Excel表格。 准备工作 我们需要使用C#自带的OpenXML库来实现Excel的导出。在使用前,需要进行一些准备工作: 引入DocumentF…

    C# 2023年6月7日
    00
  • C#创建缩略图操作类实例

    下面我将详细讲解“C# 创建缩略图操作类实例”的完整攻略。 1. 前提准备 在使用 C# 创建缩略图操作类实例之前,需要先掌握以下知识和准备工作。- 需要安装 .NET Framework 环境;- 需要掌握基础的 C# 编程知识;- 需要了解 System.Drawing 命名空间。 2. 创建缩略图操作类 以下是创建缩略图操作类的代码示例: using …

    C# 2023年6月7日
    00
  • C#.net实现在Winform中从internet下载文件的方法

    C#语言是一个功能强大的编程语言,它可以实现在Winform中从internet下载文件。本文将介绍如何使用C#.net编程语言实现Winform中下载文件的方法。本文的讲解过程分为以下四步: 使用HttpWebRequest连接到internet并下载文件 创建下载进度条 保存下载文件 报告下载进度 下面详细讲解每一步的实现方法。 第一步 使用HttpWe…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部