C# Record构造函数的行为更改详解

C#Record构造函数的行为更改详解

简介

在 C# 9.0 中,引入了一个新的语言特性:Record 类型。Record 类型是一种不可变的、轻量级的对象类型,它能够快速和方便地创建、比较和复制对象。特别是,Record 类型支持自动生成“自定义等值比较”、“GetHashCode() 方法”、“ToString() 方法”和“复制构造函数”。这些功能不再需要我们手动实现,从而减少了我们的编码时间。

由于 Record 类型是不可变的,所以在初始化时,可以使用构造函数来提供初始值。然而,在 C# 9.0 以前的版本中,Record 类型的构造函数是有一些限制的。特别是,构造函数只能够初始化对象的属性。

在 C# 9.0 中,这个限制得到了打破。Record 类型的构造函数不再限制只能初始化属性。我们可以将一些额外的代码添加到构造函数中,以支持更高级别的初始化需求。这个行为变化可以让 Record 类型变得更加灵活和强大。

在本篇攻略中,我们将详细讲解 C#Record构造函数的行为更改,并提供一些示例来解释这些更改。

详解

原来的行为

在 C# 9.0 以前的版本中,Record 类型的构造函数只能初始化对象的属性。例如,下面这个 StudentRecord 类型:

public record StudentRecord(string Name, int Age);

其构造函数只能初始化 Name 和 Age 两个属性。

var student = new StudentRecord("Tom", 18); // 构造函数只能初始化 Name 和 Age 两个属性

现在的行为

在 C# 9.0 中,Record 类型的构造函数不再限制只能初始化属性,我们可以将一些额外的代码添加到构造函数中,以支持更高级别的初始化需求。

下面这个示例,展示了如何在 Record 类型的构造函数中添加一些额外的代码来支持更高级别的初始化需求。

public record EmployeeRecord(string Name, int Age)
{
    public EmployeeRecord(string name, int age) : this(name, age)
    {
        Console.WriteLine($"Creating employee record for {name}...");
        // 某些额外的初始化代码...
    }
}

var employee = new EmployeeRecord("Tom", 18); 
// 输出:Creating employee record for Tom...

在这个示例中,我们定义了一个 EmployeeRecord 类型,并添加了一个额外的构造函数。在构造函数中,我们首先调用基础构造函数,然后添加了一些额外的代码来支持更高级别的初始化需求。当我们创建 EmployeeRecord 对象时,构造函数会执行,输出 "Creating employee record for Tom...",并且执行其他的额外初始化代码。

再例

下面再举一个例子,这个示例展示了如何在 Record 类型中使用表达式体构造函数来支持更高级别的初始化需求。

public record CarRecord(string Model, int Year)
{
    private readonly int _id;
    public CarRecord(string model, int year) => (_id, Model, Year) = (new Random().Next(), model, year);
}

var car = new CarRecord("Tesla Model S", 2021);
Console.WriteLine($"Car ID: {car._id}, Model: {car.Model}, Year: {car.Year}"); 
// 输出:Car ID: 651211748, Model: Tesla Model S, Year: 2021

在这个示例中,我们定义了一个 CarRecord 类型,并添加了一个构造函数。在构造函数中,我们使用表达式体构造函数来初始化 _id、Model 和 Year 属性,其中 _id 属性是只读的,且只在构造函数中设置。

当我们创建 CarRecord 对象时,构造函数会执行,随机生成 _id 属性的值,并初始化 Model 和 Year 属性。最后,我们输出 CarRecord 对象的属性值,可以看到 _id 属性已经生成了新的随机值。

总结

在 C# 9.0 中,Record 类型的构造函数的行为得到了改进。现在,我们可以在 Record 类型的构造函数中添加额外的代码来支持更高级别的初始化需求。特别是,在 Record 类型的构造函数中,我们可以使用表达式体构造函数、链式构造函数、构造函数重载等方式来替代之前的初始化属性的方式,从而让 Record 类型的使用更加灵活和强大。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Record构造函数的行为更改详解 - Python技术站

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

相关文章

  • 如何通过IL了解C#类的构造函数浅析

    当我们写C#代码或者学习C#时,我们会经常使用到构造函数,构造函数是用于初始化类的实例的特殊函数。我们可以使用IL工具来看一下C#编译后的构造函数生成的IL代码,来加深对C#构造函数的理解。下面我们来介绍如何通过IL了解C#类的构造函数。 工具准备 首先,我们需要安装ILSpy工具,使用这个工具可以打开编译好的C#程序集,并且可以查看程序集的IL代码。 IL…

    C# 2023年6月3日
    00
  • ASP.NET Core使用AutoMapper组件

    ASP.NET Core是一个跨平台、开源的框架,被广泛应用于Web应用程序开发。AutoMapper是一个目前非常流行的实体映射组件,可以将一个实体类的属性映射到另一个实体类中相同或者不同的属性上。 使用AutoMapper组件的步骤如下: 步骤一:安装AutoMapper包 在Visual Studio中,可以通过Nuget Package Manage…

    C# 2023年6月6日
    00
  • go micro微服务proto开发安装及使用规则

    下面我将详细讲解 “go micro微服务proto开发安装及使用规则” 的完整攻略。 什么是 go micro go-micro 是一套微服务框架,使用 Go 编程语言实现,简化了构建复杂分布式系统的过程。它封装了服务注册与发现、负载均衡、消息传递、服务治理、数据传输等基本功能,让开发人员可以更加专注于业务逻辑的实现。此外,go-micro 还支持多种协议…

    C# 2023年5月15日
    00
  • C#中多种高效定时器方法的使用详解

    C#中多种高效定时器方法的使用详解 作为C#语言中常用的一种计时方式,定时器的使用有多种方法。下面将会详细讲解C#中几种高效的定时器方法。 使用System.Timers.Timer System.Timers.Timer是基于线程池的计时器,使用起来相对简单,适用于大多数计时需求。其使用示例代码如下: using System; using System.…

    C# 2023年6月1日
    00
  • 理解ASP.NET Core 配置系统

    理解ASP.NET Core 配置系统 在ASP.NET Core应用程序中,配置系统是一项非常重要的任务。配置系统可以帮助我们管理应用程序的配置信息,提高应用程序的可维护性和可扩展性。在本攻略中,我们将介绍ASP.NET Core配置系统的基本概念和使用方法,并提供两个示例说明。 1. 配置系统的基本概念 在ASP.NET Core应用程序中,配置系统是由…

    C# 2023年5月16日
    00
  • C# 10分钟完成百度人脸识别(入门篇)

    C#10分钟完成百度人脸识别(入门篇) 简介 百度人脸识别是一项基于人工智能的技术,可以通过照片或视频中的人脸,进行识别、比对,以及人脸库管理等功能。本文主要介绍如何使用C#完成百度人脸识别的入门教程。 步骤 1. 创建百度AI账号 首先,你需要去百度AI开放平台官网注册一个账号,然后创建一个应用,选择人脸识别。在创建应用的时候,记得保存下“App ID”、…

    C# 2023年5月15日
    00
  • 如何在ASP.NET Core 的任意类中注入Configuration

    在ASP.NET Core中,可以使用Configuration API来读取应用程序的配置信息。在任意类中注入Configuration可以方便地访问应用程序的配置信息。以下是如何在ASP.NET Core的任意类中注入Configuration的完整攻略。 步骤 步骤1:安装Microsoft.Extensions.Configuration包 首先,需…

    C# 2023年5月17日
    00
  • C#12预览版释出,新功能一览

    概述 C#是微软开发的一种流行的编程语言,广泛用于开发桌面,Web和移动应用程序。在每个新版本中,C# 都会带来令人兴奋的功能和改进,使其更强大、更具表现力和更高效。C# 的最新版本是2022年发布的 C#11,它引入了一系列新功能,例如abstract 和 virtual 引入到静态方法中、泛型 attribute等。现在,微软已经在开发下一个版本的C#,…

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