IComparable跟IEquatale都是用來做比較用的
IComparable是用來跟呼叫物件比較誰大誰小
當呼叫物件 < 參數物件,回傳負數
當呼叫物件 < 參數物件,回傳正數
當呼叫物件 = 參數物件,回傳0
IEquatale則是比較兩個物件是否一樣,一樣回傳true,不一樣回傳false
宣告一個value types時,請實作 IEquatable
當實作Equals()方法時,要確定遞移性正確
A = B , B = C時,則 A = C
x.Equals(null) return false
實作 Equals同時也要實作GetHashCode
使用明確的物件override Equals
public struct PositiveInt32 : IEquatable<PositiveInt32>{
public bool Equals(PositiveInt32 other){...}
public override bool Equals(object obj){
if(!obj is PositiveInt32)
return false;
return Equals((PositiveInt32)obj);
}
}
不管有沒有實作IEquatable,都可以考慮overload == or !=
不管有沒有實作IComparable,都可以考慮overload >, <, <=, >=
實作IComparable時,同時實作IEquatable
反過來實作IEquatable時,就不需要同時實作IComparable