我一直在尝试弄清楚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()
过程打印到屏幕上,以便逆向工程输出结果,但我自己更加困惑了。编辑: 也许如果我一步一步地解释,我可以更好地解释自己。假设我有三个温度对象:34、45、21,在一个
ArrayList
中。当我调用ArrayList.Sort()
时,CompareTo()
方法是否像34.CompareTo(45)
一样被调用?然后是45.CompareTo(21)
?第一次比较返回1,第二次比较返回-1?如果我只定义了CompareTo()
方法在参数为null时返回1,那么这些整数是如何返回的呢?我没有定义任何返回-1或0的东西。就好像我正在实现一个已经实现了的方法,定义一个CompareTo()
方法,当它已经定义为返回-1、0和1时。