c# record与class的区别

在 C# 中,recordclass 是两种不同的类型。以下是它们之间的一些区别:

  1. 不可变性:record 是不可变的,一旦创建就不能修改其属性的值;而 class 是可变的,可以随时修改其属性的值。
csharp 复制代码
record Person
{
    public string Name { get; init; }//设置成set可以修改
    public int Age { get; init; }
}

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
  1. 值语义 vs 引用语义:使用 record 声明的类型是值类型,它们在比较时会比较其属性值;而 class 声明的类型是引用类型,它们在比较时比较的是引用地址。
csharp 复制代码
var person1 = new Person { Name = "Alice", Age = 30 };
var person2 = new Person { Name = "Alice", Age = 30 };
var person3 = person1;

bool isEqual1 = person1 == person2; // false
bool isEqual2 = person1 == person3; // true
  1. 衍生性:record 类型默认是密封的,即不能被继承;而 class 可以被继承。
csharp 复制代码
record Person
{
    public string Name { get; init; }
    public int Age { get; init; }
}

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

class Employee : Person // 合法
{
    public string Department { get; set; }
}
  1. 默认行为:record 类型会自动生成适当的 EqualsGetHashCodeToString 方法,而 class 需要手动实现这些方法。
csharp 复制代码
record Person
{
    public string Name { get; init; }
    public int Age { get; init; }
}

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

    public override bool Equals(object obj)
    {
        // 实现自定义的相等性比较逻辑
    }

    public override int GetHashCode()
    {
        // 实现自定义的哈希码生成逻辑
    }

    public override string ToString()
    {
        // 实现自定义的字符串表示形式
    }
}

总的来说,record 主要用于表示不可变的数据实体,提供了更多默认行为,而 class 主要用于表示可变的对象,可以被继承和自定义。

相关推荐
△曉風殘月〆7 小时前
WPF MVVM入门系列教程(二、依赖属性)
c#·wpf·mvvm
逐·風8 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
m0_6569747412 小时前
C#中的集合类及其使用
开发语言·c#
九鼎科技-Leo12 小时前
了解 .NET 运行时与 .NET 框架:基础概念与相互关系
windows·c#·.net
九鼎科技-Leo14 小时前
什么是 ASP.NET Core?与 ASP.NET MVC 有什么区别?
windows·后端·c#·asp.net·mvc·.net
.net开发14 小时前
WPF怎么通过RestSharp向后端发请求
前端·c#·.net·wpf
小乖兽技术14 小时前
C#与C++交互开发系列(二十):跨进程通信之共享内存(Shared Memory)
c++·c#·交互·ipc
幼儿园园霸柒柒15 小时前
第七章: 7.3求一个3*3的整型矩阵对角线元素之和
c语言·c++·算法·矩阵·c#·1024程序员节
平凡シンプル17 小时前
C# EF 使用
c#
丁德双17 小时前
winform 加载 office excel 插入QRCode图片如何设定位置
c#·excel