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类对象是哪来的?不是只接受了一个参数吗。请高手解惑。谢谢

解决方案 »

  1.   

    this.temperatrueF不是Temperature类,而是double类,是另一个类,和Temperature是两个类,两个问题都是上面的答案.
      

  2.   

    temperatureF是double类型字段
    IComparable接口要求必须有一个public int CompareTo(object obj)方法
    内部实现是QuickSort(快速排序)算法
    ArrayList.Sort (delegate(int x,int y){return x-y;}) ;
      

  3.   

    恩,那这条语句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#,理解力没那么好,可能叙述的不清楚,望高手见谅
      

  4.   

    Temperature类继承IComparable接口
    不要这么理解
    应该是Temperature类实现IComparable接口,IComparable只是一个约定(抽象的)。
      

  5.   

    恩,谢谢4楼的朋友,因为以前学过JAVA,所以现在老把JAVA那些思维套在C#中,现在发现这样确实不好。