当我需要定义自己的Equals方法时,我只会Equals(Object)在我的类中重写.
但是MSDN说:
还建议除了实现Equals(object)之外,任何类还为自己的类型实现Equals(type),以提高性能.
但它怎么能提高性能呢?我只能拨打这两种方法中的一种,不是吗?
结构没有拳击,可以直接调用所有类型(而不是虚拟调用).
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也可以更好地优化调用,因为更具体的版本不需要是虚拟的.