2012-11-21 51 views
1

錯誤1 'Koordinates.Vieta' 不實現接口成員 'System.IComparable.CompareTo(對象)'不實現System.IComparable.CompareTo(對象)

的代碼:

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

回答

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參數的方法),則只能調用該方法。