Object.Equals(obj1,obj2)vs obj1.Equals(obj2)?

时间:2009-10-05 00:53:54

标签: c# inheritance object equals

假设两个对象都不是值类型,并且都表示已重写Equals(...)方法的类型,那么它们之间是否存在任何功能差异:

  • 致电obj1.Equals(obj2)
  • 致电Object.Equals(obj1, obj2) ......还是功能相同?

我正在阅读的Apress书(Pro C#2008),实际上相当不错,将这种方法(以及ReferenceEquals(...))称为“(非常有用的)静态方法”,但我是努力在这里看到好处。

对于ReferenceEquals(...)我可以看到该实用程序,因为它仍然能够确定两个对象是否引用同一个对象(无论Equals(...)方法和==运算符是否具有被覆盖了。)

对于另一个......不是那么多;我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:8)

想象一下,在第一种情况下,obj1是否为空。

答案 1 :(得分:8)

Object.Equals(obj1,obj2):

如果obj1和obj2是相同的引用,则返回true

如果obj1或obj2为null,则返回false

否则返回obj1.Equals(obj2)

答案 2 :(得分:0)