在第37页的Effective C#第二版(ISBN-13:978-0321658708)中,本书内容为
你永远不会重新定义的第二个函数是静态Object.Equals()
但是,在第39页上,该书的内容为
关键是如果你的类型应该遵循值语义(比较内容)而不是引用语义(比较对象标识),你应该编写自己的实例Object.Equals()
有人会如此善意地解释为什么会覆盖
public virtual bool Equals(object right);
而不是
public static bool Equals(object left, object right);
谢谢:)
答案 0 :(得分:8)
因为你无法覆盖静态方法。
答案 1 :(得分:2)
要清除的第一件事是你不能覆盖静态方法。
的实施public static bool Equals(object left, object right);
无法覆盖。静态equals方法仅用于不进行空检查。在内部,它首先检查引用等于然后内容等于(非静态等于方法)。
在上面提到的引号中,第一个引用引用静态equals方法,其中第二个引用非静态equals方法,两者都以符号形式写为Object.Equals(),但注意第一个引用“static Object.Equals”( )“
答案 2 :(得分:1)
永远不会重新定义静态 Object.Equals()
您应该编写自己的实例 Object.Equals()
覆盖
注意区别,静态 vs 实例。这些句子并不是指同一种方法......
答案 3 :(得分:1)
另外,如果我没有弄错的话,静态的只会比较参考,其中虚拟参考可以编写自己的比较,大部分时间都是基于值而不是参考。