在C#中 == 和 != 默认是对引用地址作比较,如果要改成对其内涵做比较,则需要重载。 一般要重载两个运算符和两个函数: 函数 Equals 、函数 GetHashCode 、运算符 == ,和运算符 != 这里分两组, 函数 Equals 、函数 GetHashCode ,这一组是系统比较对象时候
在C#中 == 和 !=默认是对引用地址作比较,如果要改成对其内涵做比较,则需要重载。一般要重载两个运算符和两个函数:
函数Equals、函数GetHashCode、运算符 ==,和运算符 !=
这里分两组, 函数Equals、函数GetHashCode,这一组是系统比较对象时候使用,譬如把对象放在Hashtable容器里面,系统会作出比较,排斥相同的对象。
函数Equals和GetHashCode必须一起重载。
用户比较两个对象内涵的时候,不重载==和 !=,直接使用重载的Equals是可以的,但是如果重载使用 == 和 != ,会更直观。
这一组两个运算符也必须同时重载,只重载一项的话,编译器会做出相应提示。
回到F#中,对应C# == 和 != 的是 = 和 <>。试图重载 = 或<>,编译器会提示你重载Equals即可。用户调用运算符 = 和<> 时,会自动调用 Equals。然而重载Equals就必须重载GetHashCode。所以我们重载这一组函数即可。