除了Equals(Object)之外,我为什么要实现Equals(type)?

Lai*_*uan 1 c# overriding

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

但是MSDN说:

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

但它怎么能提高性能呢?我只能拨打这两种方法中的一种,不是吗?

Ale*_*kov 7

结构没有拳击,可以直接调用所有类型(而不是虚拟调用).

struct MyStruct
{
  public int v;
  public override bool Equals(Object other) {}
}
Run Code Online (Sandbox Code Playgroud)

如果您没有提供采用MyStruct的显式方法,那么每次调用时都必须为MyStruct设置框myFirst.Equals(myOther).如果你确实提供Equals(MyStruct other),那么编译器将选择更通用的方法,Equals(Object)从而避免对结构进行装箱.

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