CompareTo()
メソッドが内部でどのように機能するかを理解しようとしてきましたが、失敗しました。このサイトを検索していくつかの投稿を読みましたが、この件に関して MSDN で見るべきものはすべて見たと思いますが、理解できないようです。MSDN の例:
public int CompareTo(object obj)
{
if (obj == null)
{
return 1;
}
Temperature otherTemperature = obj as Temperature;
if (otherTemperature != null)
{
return this.temperatureC.CompareTo(otherTemperature.temperatureC);
}
else
{
throw new ArgumentException("the object is not a temperature");
}
}
これは、CompareTo()
メソッドの実装の MSDN の例です。私はこれを理解しています、私はインターフェースがどのように機能するかを理解しています。私が正しく理解していれば、メソッドIComparable
を使用するときにこれが呼び出されます。ArrayList.Sort()
私が理解していないのは、プログラムがCompareTo(object obj)
メソッドの引数を渡すのはいつですか? 言い換えれば、Sort()
メソッドはどのように機能しますか? つまり、このコードは温度のインスタンスを温度の別のインスタンスと比較していますが、比較を行うために、プログラムはいつ、またはどのようにして 2 番目の温度インスタンスを取得するのでしょうか? 私の質問が理にかなっていることを願っています。
プロセスを画面に出力しようとしたCompareTo()
ので、出力をリバースエンジニアリングできるかもしれませんが、さらに混乱しました。
編集:一歩一歩進んだら、自分自身をよりよく説明できるかもしれません。3 つの温度オブジェクトがあるとします: 34、45、21ArrayList
です。を呼び出すArrayList.Sort()
と、CompareTo()
メソッドは のように呼び出され34.CompareTo(45)
ますか? そして45.CompareTo(21)
?返される整数は、最初の比較では 1 で、2 番目の比較では -1 でしょうか? CompareTo()
また、obj (パラメーター) が null の場合にのみ 1 を返すようにメソッドを定義した場合、これらの整数はどのように返されるのでしょうか? -1 または 0 を返すものは何も定義していません。既に実装されているメソッドを実装しているようなものです。CompareTo()
-1、0、および 1 を返すように定義済みのメソッドを定義する。