网站不能添加图片,网站优化内链怎么做,谷歌推广教程,app推广拉新平台在 C# 9.0 中引入了 record 关键字#xff0c;用于定义记录类型#xff08;Record Types#xff09;。记录类型是一种轻量级的数据载体#xff0c;专注于表示数据#xff0c;它提供了内置的相等性比较、生成属性和方法等功能#xff0c;使得编写数据类更加简洁和高效。
…在 C# 9.0 中引入了 record 关键字用于定义记录类型Record Types。记录类型是一种轻量级的数据载体专注于表示数据它提供了内置的相等性比较、生成属性和方法等功能使得编写数据类更加简洁和高效。
基本概念
不可变性记录类型默认是不可变的这意味着它们的属性是只读的不能被修改。相等性记录类型根据其值进行相等比较而不是引用比较。自动化成员记录类型可以自动生成构造函数、属性、ToString、Equals 和 GetHashCode 方法。
声明记录类型
记录类型的声明非常简洁基本语法如下
public record Person(string FirstName, string LastName, int Age);这会生成一个包含 FirstName、LastName 和 Age 属性的记录类型并自动提供构造函数、ToString、Equals 和 GetHashCode 方法。
不可变性和可变性
不可变记录默认情况下记录类型是不可变的属性是只读的。例如
public record Person(string FirstName, string LastName, int Age);可变记录可以通过在记录类型后添加 with 关键字来创建可变记录允许修改属性。例如
public record Person(string FirstName, string LastName, int Age) with;构造函数和初始化
记录类型自动生成构造函数可以直接通过属性初始化
var person new Person(John, Doe, 30);相等性比较
记录类型根据值进行相等比较
var person1 new Person(John, Doe, 30);
var person2 new Person(John, Doe, 30);
Console.WriteLine(person1 person2); // 输出: True自定义方法和成员
可以在记录类型中添加自定义方法和成员
public record Person(string FirstName, string LastName, int Age)
{public string FullName ${FirstName} {LastName};
}属性访问器
默认情况下记录类型的属性是只读的。如果需要自定义属性行为可以显式定义属性
public record Person
{public string FirstName { get; init; }public string LastName { get; init; }public int Age { get; init; }
}使用 init 访问器可以在初始化对象时设置值但之后不能修改。
继承和派生
记录类型可以继承其他记录类型派生记录类型会继承基记录类型的属性和方法。
public record Person(string FirstName, string LastName, int Age);
public record Employee(string FirstName, string LastName, int Age, string EmployeeId) : Person(FirstName, LastName, Age);使用场景
数据传输对象DTO记录类型非常适合用来表示数据传输对象因为它们专注于数据的表示和传输。不可变数据结构在需要不可变数据的情况下记录类型提供了方便的不可变性支持。配置对象记录类型可以用来表示应用程序的配置选项因为它们易于创建和比较。
示例代码
public record Person(string FirstName, string LastName, int Age)
{public string FullName ${FirstName} {LastName};
}class Program
{static void Main(){var person1 new Person(John, Doe, 30);var person2 new Person(John, Doe, 30);var person3 new Person(Jane, Doe, 25);Console.WriteLine(person1 person2); // TrueConsole.WriteLine(person1 person3); // FalseConsole.WriteLine(person1.FullName); // John Doe}
}