根据MSDN:大多数引用类型都不能重载相等运算符,即使它们重写等于。但是,如果要实现旨在具有值语义的引用类型(例如复数类型),则必须覆盖相等运算符。
为客户等典型的域实体实施 equals 方法和平等运算符的最佳做法是什么?
如果两个实体的身份相同,是否应该实施 equals 方法返回 true ?如果实体不是不可变的怎么办?如果两个实体都是新的并且它们的身份具有空值,那该怎么办?等式运算符怎么样?
答案 0 :(得分:5)
来自MSDN:
大多数引用类型都不能重载相等运算符,即使它们重写等于。但是,如果要实现旨在具有值语义的引用类型(例如复数类型),则必须覆盖相等运算符。
Microsoft认为==应仅用于类似值的类型,例如数字类型,例如Complex
,BigInt
等。复合类型(如Person
)不应覆盖相等运算符。这是代码风格的问题,Microsoft建议您遵循此指南。我怀疑编译结果会有很大不同。
答案 1 :(得分:3)
通常我不会为我的类(例如Customer)实现(=运算符或等号())。
你绝对不应该覆盖=运算符,因为使用你的类的开发人员期望比较指针而不是实例本身,改变这种行为只会导致错误,因为人们不希望它以这种方式工作。 / p>
如果你想要包含一种方法来进行语义比较,这是Equals()方法的用法,你可以覆盖它以实现相等性检查,无论以何种方式在你的代码中使用它是有意义的