タグ

2016年12月7日のブックマーク (2件)

  • 比較演算子のオーバーロードとIComparable<T>インターフェイス - smdn.jp

    IComparable<T>インターフェースやIComparer<T>インターフェイスで実装されるCompareToメソッド・Compareメソッドは、<, >, <=, >= といった比較演算子の役割と似たものですが、両者は全く独立したものであり、このインターフェイスを実装したからといって比較演算子を用いた比較が出来るようになるわけではありません。 比較演算子を用いて比較するには、別途演算子をオーバーロードしなければなりません。 また逆に、比較演算子をオーバーロードしたからといってソートが出来るようになるというわけでもありません。 ソートするには型がIComparable<T>やIComparableなどのインターフェイスを実装している必要があります。 しかし、独自のクラスを構築する際、IComparable<T>等による比較(さらにソート)と比較演算子による比較の両方が出来るようにした

    比較演算子のオーバーロードとIComparable<T>インターフェイス - smdn.jp
  • 継承を考慮したICloneableの実装(C#) - reflux flow

    ここでは、継承した場合でもコピーを作成できるICloneableの実装方法(ディープコピー)をいくつか紹介します。 メモ: 一般に、ディープコピーの実装や保守には手間が掛かります。ここで紹介する実装方法でも、シリアライザを利用する方法以外では、派生クラスで必ずCloneメソッドをオーバーライドしなければなりません。また、クラスのフィールドが増減する度にCloneメソッドを修正する必要があります。可能であればオブジェクトをimmutable(不変)に設計し、ディープコピーの実装を回避した方が良いでしょう。 メモ: ICloneableの仕様では、Cloneメソッドによるコピー処理は、シャローコピー(簡易コピー)とディープコピー(詳細コピー)のどちらでも良いことになっています。その結果、ICloneableを実装していても実装詳細を知らなければCloneメソッドの挙動を予測できません。そのため