2014-03-27 40 views
0

我已經意識到還有很多關於此主題的其他類似問題,但查看答案並根據這些問題修改我的代碼已被證明不成功。IComparable:無法實現接口成員,因爲它不是公開的

下面的代碼是我的藝術家類,在這裏我用的CompareTo傳入的藝術家名稱和藝術家名稱(OBJ)之間進行比較的一部分。這

class Artists : IComparable 
{ 
    private string artistName; 
    private string artistMembers; 

    public int CompareTo(Object obj) 
    { 
     Artists otherArtist = (Artists)obj; 
     return artistName.CompareTo(otherArtist.ArtistName); 
    } 


    public Artists(string artist, string members){ 
     ArtistName = artist; 
     Members = members; 
    } 

    public string ArtistName 
    { 
     set { artistName = value; } 
     get { return artistName; } 
    } 
    public string Members 
    { 
     set { artistMembers = value; } 
     get { return artistMembers; } 
    } 

} 

我真的希望避免變量公共的,這是一個在其他地方提供的解決方案,所以我想知道我需要做什麼來解決這個問題,我做錯了什麼,以便我可以從錯誤中學習。

在此先感謝。編輯2 關閉VS並重新編譯,並突然工作。對不起浪費時間。

+0

我迷路了,什麼不工作/你想改變上面的代碼? – BradleyDotNET

+0

您的代碼編譯 - 什麼_exactly_是問題? –

+2

您應該考慮實施'IComparable '而不是非通用版本。 – Lee

回答

3

我從你的錯誤CompareTopublic真正代碼假設。隱式接口實現必須是公共的。

可以實現接口明確,然後客戶將不得不轉換爲IComparable看方法:

int IComparable.CompareTo(Object obj) // will be private unless explicitly using the interface 
{ 
    Artists otherArtist = (Artists)obj; 
    return artistName.CompareTo(otherArtist.ArtistName); 
} 

Artists a1 = new Artists("Beatles", "Paul, Ringo"); 
Artists a2 = new Artists("U2", "Bono"); 
// this will fail: 
//int i = a1.CompareTo(a2); 

// this will work: 
int i = ((IComparable)a1).CompareTo(a2); 

但是請注意,你的類是internal默認情況下,所以甚至沒有公開。

相關問題