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日

相关文章

  • ASP.NET Core MVC中的视图(Views)

    接下来我将详细讲解ASP.NET Core MVC中的视图(Views)。 视图是什么? 视图是MVC中的一部分,它是网页用户界面的一部分,也就是网页的HTML代码。在MVC框架中,控制器(Controller)返回模型数据给视图(View),视图负责展示这些数据。视图文件通常采用Razor语法,可以添加HTML代码和模型数据内容,最终被浏览器渲染成网页。 …

    C# 2023年6月3日
    00
  • C#使用checkedListBox1控件链接数据库的方法示例

    下面是详细讲解“C#使用checkedListBox1控件链接数据库的方法示例”的攻略: 一、准备工作 在使用checkedListBox1控件链接数据库之前需要先安装相应的数据库,例如MySQL、SQL server等。然后需要在Visual Studio中打开一个C#的Windows From应用程序项目。在这个项目中,我们需要为它添加一个checked…

    C# 2023年5月31日
    00
  • C#实现飞行棋项目

    C#实现飞行棋项目攻略 项目概述 飞行棋是一种经典的游戏,玩家需要掷骰子,并根据骰子的点数控制棋子移动,最终到达终点获得胜利。在本项目中,我们将实现一个可以在Windows电脑上运行的飞行棋游戏,并且支持单人和双人模式。 准备工作 在开始编码之前,我们需要安装一些必要的工具和组件。首先是Visual Studio,建议安装最新版的Visual Studio …

    C# 2023年6月6日
    00
  • C#存储相同键多个值的Dictionary实例详解

    下面是C#存储相同键多个值的Dictionary实例详解的完整攻略: 1. 什么是Dictionary Dictionary 是 .NET Framework 中提供的一个泛型类,它允许我们在存储和检索项目时使用键-值对。我们可以使用唯一的键来检索与其关联的值。它是线程不安全的类。 2. 什么是C#存储相同键多个值的Dictionary实例 在C#中,Dic…

    C# 2023年6月6日
    00
  • C#中闭包概念讲解

    C#中闭包概念讲解 什么是闭包 闭包是指一个函数能访问其自身范围之外的变量,并使这些变量的值在函数内被保持和使用。在C#中,闭包可以简单地理解为一个函数内访问外部变量。 C#中闭包的使用 在C#中,闭包主要通过lambda表达式、委托和匿名方法实现。下面将分别介绍各种方法的使用。 使用lambda表达式实现闭包 lambda表达式是一种匿名函数,其可以访问其…

    C# 2023年6月7日
    00
  • 详解C#如何实现窗体换肤

    下面我就来详细讲解一下如何在C#中实现窗体换肤的方法。 1. 窗体控件风格的背景图片替换 1.1 背景图片预处理 首先,需要准备多张不同主题或样式的图片,把这些图片存储在Web项目的Css、Images或其他项目文件夹下。同时,要保证这些图片的尺寸一致,可以选择一张图片,确定该图片的宽高度,之后把其他图片的宽高度相应调整一下。注意不同图片的颜色和样式要有区分…

    C# 2023年6月6日
    00
  • asp.net使用jquery模板引擎jtemplates呈现表格

    下面我将详细介绍“asp.net使用jquery模板引擎jtemplates呈现表格”的步骤及其示例。 jtemplates简介 jtemplates是一款基于jQuery的模板引擎,它可以帮助我们以非常简洁的方式生成HTML代码。它可以与jQuery非常好地集成,支持常用的语法结构。jtemplates提供了数据绑定、条件判断、循环等基本的模板引擎功能,可…

    C# 2023年5月31日
    00
  • c# 实现KMP算法的示例代码

    我来为您详细讲解一下如何实现KMP算法的示例代码。 KMP算法简介 KMP算法(Knuth-Morris-Pratt)是一种字符串匹配算法,它的核心思想是:当出现不匹配时,已经匹配成功的部分应该是具有匹配的性质的,可以用已经匹配成功的部分来计算移动位数,从而减少不必要的比较,提高匹配效率。KMP算法是时间复杂度为O(n+m)的算法,其中n是文本串的长度,m是…

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