2012-12-19 453 views
-5

我開始學習操作符重載,在一個示例代碼中,我發現這兩種方法是(public override bool equals(object obj)public override int gethashcode())。我不明白他們爲什麼在那裏,因爲當我把這個程序搞混時,我沒有看到編譯器進入它們。我不知道他們在做什麼或我壓倒一切。什麼是「public override bool equals(object obj)」和「public override int gethashcode()」?

有人可以幫我解釋嗎?

+3

文檔不清楚嗎? –

+0

不是真的..... – IdoShamriz

+0

不是真的。如果文檔不清楚System.Object,我寧願不使用文檔。 – Tilak

回答

1

.NET中的大多數類型都來自於類型System.Object,在C#中簡單地稱爲object。 (例如,接口不是,但是它們的實現方式)

System.Object聲明方法EqualsGetHashCode以及其他成員。 (注意:這個案例在C#中很重要)。您創建的類型會自動繼承這些方法。

Equals的任務是將一個對象與另一個對象進行比較。引用類型的默認實現是比較引用。如果你想改變這種行爲,你將不得不重寫這個方法。

GetHashCode計算對象的哈希碼並用於哈希表。例如,類型Dictionary<TKey,TValue>HashSet<T>利用它。 請參閱Hashtable and Dictionary Collection Types。如果您覆蓋Equals,則必須覆蓋GetHashCode以保持一致性。

0

最好先引用文檔。

Object.Equals - >確定指定的對象是否等於當前對象。

當前實例和obj參數之間的比較類型取決於當前實例是引用類型還是值類型。如果當前實例是引用類型,則Equals(Object)方法將測試引用是否相等,並且對Equals(Object)方法的調用等同於對ReferenceEquals方法的調用。引用相等意味着被比較的對象變量引用同一個對象。

Object.GetHashCode - >作爲特定類型的哈希函數。

哈希碼是一個數值,用於在進行相等性測試時識別對象。它也可以作爲集合中對象的索引。 GetHashCode方法適用於散列算法和數據結構,如散列表。

他們爲什麼overrides> c#中的所有類型都來自System.Object。如果需要的話,它們是爲了派生類來提供替代/合適的這些功能的實現的重載。否則默認實現(在System.Object應該是足夠的)。