记录类型(record)是C# 9.0引入的一种新型引用类型,专门设计用于表示不可变的数据模型。它通过精简的语法提供了创建数据载体对象的便捷方式,特别适合那些以数据为中心、行为逻辑较少的场景。
Equals()、GetHashCode() 等方法的实现== 和 != 运算符的重载使用精简的声明式语法:
public record LoginUserExtensionDto(string UserName, string Email, DateTime LoginTime);
此单行声明自动生成:
ToString() 方法Equals() 和 GetHashCode() 实现通过 with 表达式创建对象的修改副本:
var originalUser = new LoginUserExtensionDto("john", "john@email.com", DateTime.Now);
var updatedUser = originalUser with { Email = "john.new@email.com" };
以 LoginUserExtensionDto 记录为例,编译器自动生成:
public LoginUserExtensionDto(string UserName, string Email, DateTime LoginTime)
{
this.UserName = UserName;
this.Email = Email;
this.LoginTime = LoginTime;
}
public virtual bool Equals(LoginUserExtensionDto other)
{
return other != null &&
UserName == other.UserName &&
Email == other.Email &&
LoginTime == other.LoginTime;
}
public override string ToString()
{
return $"LoginUserExtensionDto {{ UserName = {UserName}, Email = {Email}, LoginTime = {LoginTime} }}";
}
记录类型天然支持解构操作:
var user = new LoginUserExtensionDto("alice", "alice@example.com", DateTime.Now);
var (name, email, time) = user; // 解构为三个变量
特性 | Record | Class |
|---|---|---|
默认相等性比较 | 基于属性值 | 基于对象引用 |
默认可变性 | 不可变 | 可变 |
语法简洁性 | 高(支持位置参数) | 需要显式定义属性、方法 |
继承机制 | 支持记录类型间的继承 | 完整的面向对象继承 |
适用场景 | 数据载体、DTO、值对象 | 复杂业务逻辑、状态管理 |
// 作为Web API的响应模型
public record LoginUserExtensionDto(string UserName, string Email, DateTime LoginTime);
// 在控制器中使用
[HttpGet]
public LoginUserExtensionDto GetCurrentUser()
{
returnnew LoginUserExtensionDto("john_doe", "john@example.com", DateTime.UtcNow);
}
// 数据比较
var user1 = new LoginUserExtensionDto("user1", "test@email.com", DateTime.Now);
var user2 = new LoginUserExtensionDto("user1", "test@email.com", DateTime.Now);
Console.WriteLine(user1 == user2); // 输出:True(基于值相等)
记录类型通过其不可变特性和基于值的语义,为C#开发者提供了一种更安全、更简洁的数据建模方式,特别适合现代应用程序开发中对数据完整性和线程安全的需求。
零基础入门C# 编程的绝佳选择!52节精心设计的课程,从基础语法到实战应用,手把手带你掌握C# 核心技能。无论你是编程小白还是转行开发者,这套教程都能为你打下坚实的编程基础。
开发环境配置不再头疼!这里汇集了最新版本的Visual Studio安装包合集,包含社区版、专业版等多个版本,满足不同开发需求。一键下载,快速搭建你的C# 开发环境。
数据库是应用开发的基石!这个SQL Server安装包合集涵盖了从2008R2到2019的多个版本,无论你是学习测试还是项目部署,都能找到合适的版本。配套教程使用,学习效果更佳!
(点击关注,修炼不迷路👇)
▌转载请注明出处,渡人渡己
🌟 感谢道友结缘! 若本文助您突破修为瓶颈,不妨【打赏灵丹】或【转发功德】,让更多道友共参.NET天道玄机。修真之路漫漫,我们以代码为符,共绘仙途!