微软为什么建议跳过对引用类型实现相等运算符?根据MSDN:大多数引用类型不能重载相等运算符,即使它们重写等于。但是,如果您正在实现旨在具有值语义的引用类型(例如复杂类型),则必须重写相等运算符。为客户等典型域实体实施equals方法和相等运算符的最佳实践是什么?如果两个实体的身份相同,它是否应该实现equals方法以返回true?如果实体不是不可变的怎么办?如果两个实体都是新的并且它们的身份具有空值怎么办?那么相等运算符呢?正如JaredPar在这里提到的,Equals实际上会衡量值的相等性,而==会衡量它们是否是相同的引用。来自MSDN:大多数引用类型不能重载相等运算符,即使它们重写等于。但是,如果您正在实现旨在具有值语义的引用类型(例如复杂类型),则必须重写相等运算符。微软认为==应该只用于类值类型,比如Number、BigInt等数值类型。诸如Person之类的复合类型不应覆盖等于运算符。这是代码风格的问题,Microsoft建议您遵循此指南。我怀疑编译结果会有很大不同。通常我不会实现(=运算符或Equals())。你永远不应该覆盖=运算符,因为使用你的类的开发人员期望=比较指针而不是实例本身,并且更改此行为只会导致错误,因为人们不希望它以这种方式结束以这种方式工作。如果你想包含一个方法来做语义比较,那就是Equals()方法的用法,你可以重写它来实现相等性检查,无论你在代码中以何种方式使用它都是有意义的。以上是C#学习教程:为什么微软建议跳过引用类型的相等运算符的实现?分享的所有内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
