在C#中 == 和 !=默認是對引用地址作比較,如果要改成對其內涵做比較,則需要重載。一般要重載兩個運算符和兩個函數: 函數Equals、函數GetHashCode、運算符 ==,和運算符 != 這裡分兩組, 函數Equals、函數GetHashCode,這一組是系統比較對象時候使用,譬如把對象放在Hashtable容器裡面,系統會作出比較,排斥相同的對象。 函數Equals和GetHashCode必須一起重載。 用戶比較兩個對象內涵的時候,不重載==和 !=,直接使用重載的Equals是可以的,但是如果重載使用 == 和 != ,會更直觀。 這一組兩個運算符也必須同時重載,只重載一項的話,編譯器會做出相應提示。 回到F#中,對應C# == 和 != 的是 = 和 <>。試圖重載 = 或<>,編譯器會提示你重載Equals即可。用戶調用運算符 = 和<> 時,會自動調用 Equals。然而重載Equals就必須重載GetHashCode。所以我們重載這一組函數即可。