• 如果类型的语义基于该类型表示某些值这一事实,请考虑在引用类型上覆盖 Equals。
• 大多数引用类型不得重载相等运算符,即使它们覆盖了 Equals。但是,如果您正在实现旨在具有值语义的引用类型,例如复数类型,则必须覆盖相等运算符。
a) 据我了解,要使引用类型的不同实例可互换,我们应该同时覆盖Equals
方法和 the equality operator
,并使类型不可变?
b) 具有值语义的引用类型是否表明该类型的不同实例(表示相同值)应该是可互换的?
c) 但是根据上面的引用,某些具有值语义的引用类型应该只Equals
覆盖方法,而不是equality operator
. 我们怎么能声称这些类型具有值语义,因为该类型的实例显然不可互换?
d) 那么我们基于什么标准来决定一个具有值语义的引用类型是否应该只Equals
覆盖它的方法或者它的equality operator
?仅仅基于我们是否愿意使类型不可变?
谢谢