c#笔记-记录

文章介绍了C#中的Record类型,它用于创建只读数据结构,自动合成属性、ToString方法、解构函数以及实现IEquatable接口。Record可以继承和实现接口,并提供了自动化的相等比较和哈希计算。文中还展示了如何自定义ToString,重写复制构造器以修改默认行为。
摘要由CSDN通过智能技术生成

记录

并非所有类型都需要有一定的行为。有很多的数据单纯的只需要存储和展示。
类或结构可以使用record进行修饰,这会基于主构造器中的参数自动合成一些成员。

  • 自动生成和主构造器参数同名的具有getinit访问器的属性。
  • ToString方法,输出参数的信息,格式为RecordName(param1, param2, ...)
  • 解构方法,可以把参数解构为元组。
  • 实现IEquatable<T>接口,并根据参数一并重写和重载相等判断。

更改合成成员

记录可以和记录进行继承,也可以实现接口。
所有记录会自动根据主构造器中的参数合成成员。
如果要改变这些行为,有以下要求或限制:

  • ToStringGetHashCode方法可以手动重写,并且如果使用密封,会阻止派生记录进一步重写。
  • objectEquals方法,==!=不能手动重写。
  • 声明构造器时,必须用构造器链调用或间接调用主构造器。

对于类记录,还会自动合成一个复制构造器,它以自己类型为参数,
会将目标传入的记录中,主构造器对应的合成成员为参数,调用自己的主构造器。
你可以重写这个构造器。

public record class Announcement(string Author, DateTime Date, string Title, string ContentUrl)
{
	public sealed override string ToString()
	{
		return $"Announcement({Author}, {Date:O}, {Title}, {ContentUrl})";
	}

	// 定义一个ShowContent方法,用于打开正文链接
	public void ShowContent()
	{
		Console.WriteLine($"尝试链接{ContentUrl},链接失败。");
	}
	// 重写复制构造器,改为调用base()
	public Announcement(Announcement other) : base()
	{
		// 在自己的复制构造器里写复制逻辑
		Title = other.Title + " (Copy)";
		ContentUrl = other.ContentUrl + "?copy=true";
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值