iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 28
0
自我挑戰組

Framework 設計原則系列 第 28

使用原則(5) - IComparable<T>, IEquatable<T>

IComparable跟IEquatale都是用來做比較用的

IComparable是用來跟呼叫物件比較誰大誰小

當呼叫物件 < 參數物件,回傳負數

當呼叫物件 < 參數物件,回傳正數

當呼叫物件 = 參數物件,回傳0

IEquatale則是比較兩個物件是否一樣,一樣回傳true,不一樣回傳false

  1. 宣告一個value types時,請實作 IEquatable

  2. 當實作Equals()方法時,要確定遞移性正確
    A = B , B = C時,則 A = C

  3. x.Equals(null) return false

  4. 實作 Equals同時也要實作GetHashCode

  5. 使用明確的物件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);
    }
}
  1. 不管有沒有實作IEquatable,都可以考慮overload == or !=

  2. 不管有沒有實作IComparable,都可以考慮overload >, <, <=, >=

  3. 實作IComparable時,同時實作IEquatable
    反過來實作IEquatable時,就不需要同時實作IComparable


上一篇
使用原則(4) - ICloneable
下一篇
使用原則(6) - Nullable , Object
系列文
Framework 設計原則30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
虎虎
iT邦研究生 5 級 ‧ 2016-12-28 22:19:04

加油加油!!!!!

我要留言

立即登入留言