关于IComparable接口的问题

lybonrehc 2010-10-01 06:18:02

using System;
using System.Collections;

public class Temperature : IComparable
{
// The temperature value
protected double temperatureF;

public int CompareTo(object obj)
{
Temperature otherTemperature = obj as Temperature;
if (otherTemperature != null)
return this.temperatureF.CompareTo(otherTemperature.temperatureF);
else
throw new ArgumentException("Object is not a Temperature");
}

public double Fahrenheit
{
get
{
return this.temperatureF;
}
set
{
this.temperatureF = value;
}
}

public double Celsius
{
get
{
return (this.temperatureF - 32) * (5.0 / 9);
}
set
{
this.temperatureF = (value * 9.0 / 5) + 32;
}
}
}

public class CompareTemperatures
{
public static void Main()
{
ArrayList temperatures = new ArrayList();
// Initialize random number generator.
Random rnd = new Random();

// Generate 10 temperatures between 0 and 100 randomly.
for (int ctr = 1; ctr <= 10; ctr++)
{
int degrees = rnd.Next(0, 100);
Temperature temp = new Temperature();
temp.Fahrenheit = degrees;
temperatures.Add(temp);
}

// Sort ArrayList.
temperatures.Sort();

foreach (Temperature temp in temperatures)
Console.WriteLine(temp.Fahrenheit);

}
}

此代码是MSDN的示例代码
第一个问题
Temperature类继承IComparable接口,那在Temperature类里的CompareTo方法应该覆盖IComparable接口中的CompareTo方法,那为什么return this.temperatureF.CompareTo(otherTemperature.temperatureF);这句代码里面的CompareTo方法却是ICompareTo里的CompareTo方法?

第二个问题
Temperature类里CompareTo方法接受一个参数,把这个参数转换为Temperature类对象并被Temperature类对象otherTemperature引用,如果这个Temperature类对象otherTemperature不为空就执行return this.temperatureF.CompareTo(otherTemperature.temperatureF);这条语句,请问this.temperatrueF这个Temperature类对象是哪来的?不是只接受了一个参数吗。

请高手解惑。谢谢
...全文
166 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyilin999 2010-10-02
  • 打赏
  • 举报
回复
帮助顶
帮助顶
lybonrehc 2010-10-01
  • 打赏
  • 举报
回复
各位帮忙看看啊
lybonrehc 2010-10-01
  • 打赏
  • 举报
回复
各位高手我还是不理解,麻烦能再说详细点吗,比如程序每一步的执行流程
lybonrehc 2010-10-01
  • 打赏
  • 举报
回复
恩,谢谢4楼的朋友,因为以前学过JAVA,所以现在老把JAVA那些思维套在C#中,现在发现这样确实不好。
threenewbee 2010-10-01
  • 打赏
  • 举报
回复
Temperature类继承IComparable接口
不要这么理解
应该是Temperature类实现IComparable接口,IComparable只是一个约定(抽象的)。
lybonrehc 2010-10-01
  • 打赏
  • 举报
回复
恩,那这条语句return this.temperatureF.CompareTo(otherTemperature.temperatureF);
this.temperatureF(Temperature类对象调用temperatureF字段)再调用CompareTo方法和另外一个otherTemperature.temperatureF比较,我的意思是说这个this.temperatureF是哪来的?不是只接受了一个object对象吗?
另外IComparable接口要求必须有一个public int CompareTo(object obj)方法,可是Temperature类已经复写了这个方法啊。那应该执行Temperature类的CompareTo方法啊,但是里面执行的应该是IComparable接口里的CompareTo方法,因为我在return this.temperatureF.CompareTo(otherTemperature.temperatureF);
这条语句里的CompareTo上右键转到定义可以看到说明,而在 public int CompareTo(object obj)方法定义这里的CompareTo右键转到定义却没反应
我初学C#,理解力没那么好,可能叙述的不清楚,望高手见谅
wuyq11 2010-10-01
  • 打赏
  • 举报
回复
temperatureF是double类型字段
IComparable接口要求必须有一个public int CompareTo(object obj)方法
内部实现是QuickSort(快速排序)算法
ArrayList.Sort (delegate(int x,int y){return x-y;}) ;

jointan 2010-10-01
  • 打赏
  • 举报
回复
this.temperatrueF不是Temperature类,而是double类,是另一个类,和Temperature是两个类,

两个问题都是上面的答案.

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧