【发布时间】:2013-08-20 17:50:47
【问题描述】:
• 考虑在引用类型上覆盖 Equals,如果 该类型基于该类型表示某些值这一事实。
• 大多数引用类型不得重载相等运算符,即使 如果他们覆盖 Equals。但是,如果您正在实施参考 旨在具有值语义的类型,例如复杂的 number 类型,你必须重写相等运算符。
a) 据我了解,要使引用类型的不同实例可互换,我们应该同时覆盖 Equals 方法和 equality operator 并使类型不可变?
b) 具有值语义的 引用类型 是否表明该类型的不同实例(表示相同值)应该是可互换的?
c) 但是根据上面的引用,某些具有值语义的引用类型应该只覆盖Equals 方法,但不能覆盖equality operator。我们怎么能声称这些类型具有值语义,因为该类型的实例显然不可互换?
d) 那么我们基于什么标准来决定一个具有值语义的引用类型是应该只覆盖其Equals方法还是覆盖其equality operator?仅仅基于我们是否愿意使类型不可变?
感谢
【问题讨论】:
标签: c#