カスタムクラスのCompareTo()
メソッドをオーバーライドして、クラスに含まれているデータを複数の方法で比較する健全なアプローチはありますか?私はIComparable(Of T)
を実装しようとしていますので、いくつかのベースラインインターフェイスが実装されています。ソートをまだ計画していないが、これが必要な場合は、これは私の道を救うだろう。同じタイプの2つのオブジェクトを比較する方法が複数ある場合は、CompareToをオーバーライドしますか?
MSDNの状態のほとんどは、オブジェクトが等しい場合は0、obj1がobj2より小さい場合は-1、obj1がobj1より大きい場合は-1を返さなければなりません。しかしそれはやや単純です。
IPv4アドレス(私のクラスで実装しているもの)を考えてみましょう。 IPアドレス自体とCIDRという2つの主要な考慮すべき点があります。 IPv4アドレス自体はCIDRが/ 32であると仮定されているので、その場合はCompareTo
メソッドでアドレスを直接比較して、一方が他方よりも大きいか小さいかを判断できます。しかし、CIDRが異なっていると、事態が複雑になります。
obj1を10.0.0.0/8
、obj2を192.168.75.0/24
とする。私はこれらの2つのアドレスをいくつかの方法で比較することができました。私はちょうどCIDRを無視し、obj2がobj1より大きいと考えています。私はそれらのCIDRに基づいてそれらを比較することができます.CIDRはネットワークのサイズを比較します(そして、/ 8は/ 24を非常に簡単に破ります)。私はそれらの数値アドレスとそのCIDRの両方で、それらを比較することができました.Offj2は実際には内ののobj1で定義されたネットワークでした。
このような状況を処理するために使用されるアプローチは何ですか? 2つのCompareTo
メソッドを定義して、別のアドレスに対して1つのアドレスを評価し、2番目のアドレスがネットワーク全体のサイズを評価するように、過負荷にすることはできますか?どのようにして配列をソートするかによって.NET Frameworkにどのようなものを使用するのかを教えてください。または、CompareTo()
に依存する他の機能を実行しますか?
+1。楽しい事実:.NETフレームワークで使われている "comparer"という言葉は実際の言葉ではありません... "コンパレータ"と呼ばれていたはずです。 – Mehrdad
彼らはそれをICanCompareStuffと呼ぶことができました:) – Josh
@Lambert:[http://en.wiktionary.org/wiki/comparer](http://en.wiktionary.org/wiki/comparer)。また、[dictionary.com](http://dictionary.reference.com/browse/compare)の単語比較の関連名詞形式としてもリストされています。 –