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

时间:2012-09-28 04:00:03

标签: c# override

当我需要定义自己的Equals方法时,我通常只在我的班级中覆盖Equals(Object)

然而MSDN说:

  

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

但它如何提升性能?我只能拨打这两种方法中的一种,不是吗?

1 个答案:

答案 0 :(得分:7)

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

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

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

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

相关问题