何时使用记录结构而不是结构,反之亦然?

2023-12-29

我最近发现关于recordC# 中的关键字,发现它可以用作record struct如果我理解正确的话,以某种方式使其成为值类型而不是引用类型。

但是,我很难理解何时确切使用record struct而不仅仅是struct。据我所见,record struct有一些结构没有的基本实现(比如== and !=运算符,覆盖ToString,以及其他一些东西),但这就是两者之间的区别吗?如果不是,在决定使用其中一种时需要考虑什么?

从我目前的角度来看,最好始终使用record struct只是为了利用它已经附带的那些实现。


这个答案假设:

  • 据了解,什么是record keyword https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/record在 c# 中是这样的;
  • 我们都知道what a struct is https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/struct怎么样不同于class https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/choosing-between-class-and-struct;

然后,决定使用struct代替record struct归结为:

  1. 你不need默认实现record烘烤。

    也许您的结构体的寿命很短,以至于它仅用于传递结构化数据;它将在非常知名的地方创建、消耗和处置,并且您可以完全控制它们的使用。如果你完全、完全确定你不需要平等比较 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/record-structs#equality-members, 模式匹配 https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/functional/pattern-matching or 字符串表示 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/record-structs#printing-members-printmembers-and-tostring-methods,这样您就可以避免程序集中的一些元数据和几行文档。

  2. 你不want默认实现record烘烤。

    考虑到您可以将类型声明为record struct还是提供自定义实现 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/record#positional-syntax-for-property-definition任何自动行为。您甚至可以使用简洁的语法为自动属性指定属性。因此,除非您计划为大多数自动实现提供自定义实现,否则您仍然会受益于使用record.

  3. 你不能使用record struct因为您被锁定在不支持 c#10 的 .net 版本中。

    好吧,在这种情况下不多说。


总之,record struct在一般情况下更好,老实说,这就是struct从一开始就应该是默认的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时使用记录结构而不是结构,反之亦然? 的相关文章

随机推荐