当我需要定义自己的Equals
方法时,我通常只在我的班级中覆盖Equals(Object)
。
然而MSDN说:
除了实现Equals(object)之外,还建议任何类都为自己的类型实现Equals(type),以提高性能。
但它如何提升性能?我只能拨打这两种方法中的一种,不是吗?
答案 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也可以更好地优化调用,因为更具体的版本不需要是虚拟的。