c# - 为什么 Microsoft 建议跳过为引用类型实现相等运算符?

标签 c# .net reference-type

根据 MSDN : 大多数引用类型不得重载相等运算符,即使它们重写了 Equals。但是,如果您要实现旨在具有值语义的引用类型(例如复数类型),则必须重写相等运算符。

为客户等典型域实体实现等于方法和相等运算符的最佳实践是什么?

如果两个实体的身份相同,它是否应该实现equals 方法以返回true?如果实体不是不可变的怎么办?如果两个实体都是新的并且它们的身份具有空值怎么办。那么相等运算符呢?

作为JaredPar提到here Equals 实际上会衡量值的相等性,而 == 会衡量它们是否是相同的引用。

最佳答案

来自 MSDN :

Most reference types must not overload the equality operator, even if they override Equals. However, if you are implementing a reference type that is intended to have value semantics, such as a complex number type, you must override the equality operator.

Microsoft 认为 == 应该只用于类似值的类型,例如ComplexBigInt 等数字类型。Person 等复合类型不应覆盖相等运算符。这是代码风格的问题,Microsoft 乐于建议您遵循此准则。我怀疑编译后的结果会有很大不同。

关于c# - 为什么 Microsoft 建议跳过为引用类型实现相等运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8076143/

相关文章:

swift - 将相等性定义为引用类型的标识?

c# - 为什么 Microsoft Visual C# 2008 Express Edition 调试器随机退出?

c# - 执行 : Manual addressing is enabled on this factory, 时出现 WCF 错误,因此发送的所有消息都必须预先寻址

c# - 带有解析数据的 ASP.NET MVC 4

c# - 在 C# 中查找图像中的颜色

.net - 仅当文件不存在时才使用PowerShell从SFTP服务器传输文件

c# - 在异常过滤器中获取 WebApi 异常响应

c# - 在 WPF DataTrigger 值中绑定(bind)

c# - Guid 是值类型还是引用类型?

c# - C#中如何检测Property值(ReferenceType属性)是否改变?