当我需要定义自己的Equals
方法时,通常我只Equals(Object)
在我的类中重写。
然而MSDN说:
还建议除了实现 Equals(object) 之外,任何类也为自己的类型实现 Equals(type),以提高性能。
但它如何提高性能呢?我只能调用这两种方法之一,不是吗?
当我需要定义自己的Equals
方法时,通常我只Equals(Object)
在我的类中重写。
然而MSDN说:
还建议除了实现 Equals(object) 之外,任何类也为自己的类型实现 Equals(type),以提高性能。
但它如何提高性能呢?我只能调用这两种方法之一,不是吗?
结构没有装箱,可以直接调用所有类型(而不是虚拟调用)。
struct MyStruct
{
public int v;
public override bool Equals(Object other) {}
}
如果您不提供采用 MyStruct 的显式方法,那么每次调用myFirst.Equals(myOther)
. 如果您确实提供Equals(MyStruct other)
,编译器将选择该方法而不是更通用的方法,Equals(Object)
从而避免对结构进行装箱。
对于所有类型,您可以提供非常简单的实现,Equals(MyType)
因为您已经知道该类型。如果方法不是虚拟的,编译器/JIT 也可以更好地优化调用,因为更具体的版本不需要是虚拟的。