据我了解,记录实际上是类,它们以您的对象是值驱动而不是引用驱动的方式实现自己的相等性检查。
简而言之,对于record Foo像这样实现的 : var foo = new Foo { Value = "foo" }and ,即使它们有不同的引用 ( ) var bar = new Foo { Value = "foo" },foo == bar表达式也会导致。TrueReferenceEquals(foo, bar) // False
现在有了记录,即使在 .Net 博客上发表的文章中,它说:
如果您不喜欢生成的 Equals 覆盖的默认逐字段比较行为,您可以编写自己的。
当我尝试放置public override bool Equals, or public override int GetHashCode, orpublic static bool operator ==等时,我遇到了Member with the same signature is already declared错误,所以我认为这是一种受限制的行为,而struct对象并非如此。
失败的例子: …