1
當我需要定義我自己的Equals
方法時,通常我只會覆蓋我班的Equals(Object)
。爲什麼我應該在Equals(Object)之外實現Equals(type)?
然而MSDN說:
它也建議,除了實現equals(對象),任何類也實現了自己的類型等於(型),以提高性能。
但是它如何提高性能?我只能打電話給這兩種方法中的一種,不是嗎?
當我需要定義我自己的Equals
方法時,通常我只會覆蓋我班的Equals(Object)
。爲什麼我應該在Equals(Object)之外實現Equals(type)?
然而MSDN說:
它也建議,除了實現equals(對象),任何類也實現了自己的類型等於(型),以提高性能。
但是它如何提高性能?我只能打電話給這兩種方法中的一種,不是嗎?
對於結構沒有裝箱,可以直接呼叫所有類型(而不是虛擬呼叫)。
struct MyStruct
{
public int v;
public override bool Equals(Object other) {}
}
如果不提供需要MYSTRUCT比MYSTRUCT將不得不盒裝每次調用myFirst.Equals(myOther)
明確的方法。如果你提供Equals(MyStruct other)
比編譯器會選擇該方法,而不是更通用的Equals(Object)
,從而避免結構的裝箱。
對於所有類型,您可以提供很簡單的Equals(MyType)
實現,因爲您已經知道該類型。如果方法不是虛擬的,編譯器/ JIT也可以更好地優化調用,因爲更具體的版本不需要是虛擬的。