1

当我需要定义自己的Equals方法时,通常我只Equals(Object)在我的类中重写。

然而MSDN说:

还建议除了实现 Equals(object) 之外,任何类也为自己的类型实现 Equals(type),以提高性能。

但它如何提高性能呢?我只能调用这两种方法之一,不是吗?

4

1 回答 1

7

结构没有装箱,可以直接调用所有类型(而不是虚拟调用)。

struct MyStruct
{
  public int v;
  public override bool Equals(Object other) {}
}

如果您不提供采用 MyStruct 的显式方法,那么每次调用myFirst.Equals(myOther). 如果您确实提供Equals(MyStruct other),编译器将选择该方法而不是更通用的方法,Equals(Object)从而避免对结构进行装箱。

对于所有类型,您可以提供非常简单的实现,Equals(MyType)因为您已经知道该类型。如果方法不是虚拟的,编译器/JIT 也可以更好地优化调用,因为更具体的版本不需要是虚拟的。

于 2012-09-28T04:03:08.403 回答