2015-07-11 49 views
0

我從未在我的生活中用C#編寫過程,但我對Java的理解足夠好。我正在運行這個程序,每次它一直說計數/ IEnumerator尚未實現。我嘗試了各種不同的方式,並將它放在文件中的不同位置。我知道這將是一件非常容易的事,但我不明白。我也認爲這些是某種方法,所以不要問爲什麼他們坐在實例變量所在的位置。C#ireadonlyinterface count not implemented錯誤

有人可以向我解釋如何使用集合?這裏使用的集合是ireadonlycollection,它由在這個類中實現的IPackOfCards實現。

是否允許C#接口在其中實現?

using System; 
using CodedTests.NUnit; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
namespace CodedTests.NUnit 
{ 

public class PackOfCards : IPackOfCards 
{ 
     private const int NUMCARDS = 52; 
     private int cardsInPack; 
     //private Card[] cards; 
     private Collection<ICard> pack = new Collection<ICard>(); 
     int Count { get; } 
     public IEnumerator<ICard> GetEnumerator(){return pack.GetEnumerator();} 
     //IEnumerator IEnumerable.GetEnumerator(){ return GetEnumerator();} 

     public Collection<ICard> Create() 
     { 
      cards = new Card [NUMCARDS]; 
      String [] values =  {"Ace","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Jack","Queen","King"}; 
      String [] suits = {"Hearts", "Diamonds", "Spades", "Clubs"}; 
      int cardsInPack = 0; 
      for(int i = 0 ; i<suits.Length; i++){ 
      for(int j = 0; j<values.Length; j++, cardsInPack++){ 
       cards[cardsInPack]= new Card(values[j], suits[i]); 
       } 
      } 

      return new pack; 
     } 

     public void Shuffle(){ 
      Random num = new Random(); 

      for(int i = 0; i<NUMCARDS;i++){ 
       int ran = num.Next(NUMCARDS); 
       Card temp = cards[ran]; 
       cards[ran] = cards[i]; 
       cards[i] =  temp; 
      } 
     } 
     public ICard TakeCardFromTopOfPack(){ 

      int topCard = 0; 
      ICard cardRemoved = cards[topCard]; 
       for(int i = 0;i<NUMCARDS-1;i++){ 
        cards[i]=cards[i+1]; 
       } 
       cards[cardsInPack] = null; 
       cardsInPack--; 
       return cardRemoved; 
      } 
      } 

      } 

    public class Card : ICard 
    { 
     private String value; 
     private String suit; 

     public Card(String v, String s) 
     { 
       value = v; 
       suit = s; 
     } 
     public String getValue(){ 
      return value; 
     } 
     public String getSuit(){ 
      return suit; 
      } 
     public String toString(){ 
      return value+" of "+suit; 
     } 
     } 
    } 


public interface IPackOfCards : IReadOnlyCollection<ICard> 
{ 
    void Shuffle(); 
    ICard TakeCardFromTopOfPack(); 
} 

public interface IPackOfCardsCreator 
{ 
    IPackOfCards Create(); 
} 

public class PackOfCardsCreator : IPackOfCardsCreator 
{ 
    public IPackOfCards Create() 
+0

請注意,在我注意到他們想要使用集合之前,請先忘記它之前編寫的代碼的其他代碼 – spaga

+0

是否有機會看到「IPackOfCards」接口的相關部分? –

+0

當然,我現在只是修正縮進 – spaga

回答

1

IPackOfCards implements IReadOnlyCollection。這意味着除了IPackOfCards的成員之外,您必須執行IReadOnlyCollection的所有成員,即Count財產和GetEnumerator方法,如文檔here所述。所有界面成員都必須公開,但您的Count屬性是私人的。你沒有指定它的可訪問性,所以它默認爲private

+0

這就是我想要做的,但它一直在拋出錯誤。 – spaga

+0

請看我的回答。我編輯過它。 – Kapol

+0

好吧,當我把私人詮釋伯爵;我仍然得到相同的錯誤。如果這真的很明顯,我很抱歉。 – spaga

相關問題