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类对象是哪来的?不是只接受了一个参数吗。请高手解惑。谢谢
解决方案 »
- 数据源如何更新
- Page.RegisterStartupScript("", "<script>window.showModalDialog(' 对象不支持此属性或方法
- 求助,OleDbCommand执行成功,但是数据库没有发生变化
- 关于c# GPS开发和短信开发的问题
- 自己定义的类使用窗口的控件问题。(不好意思,刚刚没有给出分数)
- winForm安装部署问题 ~~ 第一次做有些迷惑 请各位高人指点
- 用indy使用FTP 出现中文乱码?
- 提问:
- asp.net中关于购物车的ID号问题
- 请问如何在vs.net 2003的web页面中建立一个下拉菜单???
- 2010 WPF里面的DataGrid怎么放一个CheckBox 怎么绑值,点击一个按钮后怎么获得每一行CheckBox 的选中状态和对应的ID..
- 求大家用c#帮我写一下怎么操作这个文本文件???
IComparable接口要求必须有一个public int CompareTo(object obj)方法
内部实现是QuickSort(快速排序)算法
ArrayList.Sort (delegate(int x,int y){return x-y;}) ;
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#,理解力没那么好,可能叙述的不清楚,望高手见谅
不要这么理解
应该是Temperature类实现IComparable接口,IComparable只是一个约定(抽象的)。