Я пытался понять, как метод 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");
}
}
Это пример MSDN реализации метода CompareTo()
. Я понимаю это, я понимаю, как работает интерфейс IComparable
, если я правильно понял, это вызывается, когда я использую метод ArrayList.Sort()
.
Чего я не понимаю, так это: когда программа передает аргумент для метода CompareTo(object obj)
? Или, другими словами, как работает метод Sort()
? Я имею в виду, что этот код сравнивает экземпляр температуры с другим экземпляром температуры, но когда и как программа получает второй экземпляр температуры для проведения сравнения? Надеюсь, мой вопрос имеет смысл.
Я попытался вывести на экран процесс CompareTo()
, поэтому, возможно, я мог бы перепроектировать вывод, но я запутался еще больше.
EDIT: Может быть, если я буду идти шаг за шагом, я смогу лучше объяснить себя. Предположим, у меня есть 3 объекта температуры: 34, 45, 21 в ArrayList
. Когда я вызываю ArrayList.Sort()
, вызывается ли метод CompareTo()
как 34.CompareTo(45)
? А потом 45.CompareTo(21)
? Возвращаемые целые числа будут равны 1 при первом сравнении и -1 при втором? И как эти целые числа возвращались, если я определил метод CompareTo()
только для возврата 1, только если obj (параметр) был нулевым? Я ничего не определял для возврата -1 или 0. Это как если бы я реализовывал уже реализованный метод. Определение метода CompareTo()
, когда он уже определен для возврата -1, 0 и 1.