簡體   English   中英

不實現System.IComparable.CompareTo(object)

[英]Does not implement System.IComparable.CompareTo(object)

錯誤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);
    }
}

你有一個比較方法,它采用了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參數的方法),則只能調用該方法。

將類更改為:

public class Vieta : IComparable<Vieta>

IComparable定義了一個int CompareTo(object)而通用IComparable<T>定義了一個int CompareTo(T)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM