1

错误 1 ​​'Koordinates.Vieta' 未实现接口成员 'System.IComparable.CompareTo(object)'

编码:

    public class Vieta : IComparable //error is thrown here, on "Vieta"
{
    public double x, y; 
    //constructor
    public Vieta(double a, double b)
    {
        x = a; y = b;
    }
    //read only parameter
    public double ilgis
    {
        get
        {
            return Math.Sqrt(x * x + y * y);
        }
    }

    public int CompareTo(Vieta other)
    {
        if (other == null) return 1;
        return other.ilgis.CompareTo(this.ilgis);
    }
}
4

2 回答 2

2

您有一个比较方法,该方法采用Vieta该类的实例。IComparable接口声明了一个方法(CompareTo(object)注意参数应该是类型object)。

当然最好有一个强类型的 CompareTo 方法。您也可以实现该IComparable<T>接口。

我的建议是这样做,并IComparable明确地实现接口。然后,你会得到这样的结果:

public class Vieta : IComparable, IComparable<Vieta>
{

    IComparable.CompareTo( object obj )
    {

       var other = obj as Vieta;

       if( other == null ) return false;

       return CompareTo(other);

    }


    public int CompareTo( Vieta other )
    {
         // Implement your compare logic here.
    }

}

通过IComparable显式实现接口,该CompareTo(object)方法将对智能感知隐藏。实际上,只有将类转换为接口类型(或者如果该类的实例被传递给带参数的方法),您才能调用该方法IComparable

于 2012-11-21T21:53:10.647 回答
2

将类更改为:

public class Vieta : IComparable<Vieta>

IComparable定义了一个int CompareTo(object)while 泛型IComparable<T>定义了一个int CompareTo(T).

于 2012-11-21T21:54:23.087 回答