2012-02-24 61 views
1
public class SecretNumber 
{ 
    //Construktor 
    public SecretNumber() 
    { 
     Initialize(); 
     _previousGuesses = new List<int>(); 
    } 

    //Constant 
    public const int MaxNumberOfGuesses = 7; 

    //Field 
    private int _number; 
    private List<int> _previousGuesses; 

    //Property 
    public bool CanMakeGuess 
    { 
     get; 
    } 

    public int Count 
    { 
     get; 
    } 

    public int? Number 
    { 
     public get; 
    } 

    //Lite oklart hur man ska göra när fälten är autoimplementerade 
    public Outcome Outcome1 
    { 
     get 
     { 
      return Outcome1; 
     } 
     private set 
     { 
      Outcome1 = value; 
     } 
    } 

    public ReadOnlyCollection<int> PreviousGuesses 
    { 
     get; 
     set; 
    } 

    //Methods 
    public void Initialize() 
    { 
     Random random = new Random(); 

     _number = random.Next(1, 100); 

     _previousGuesses.Clear(); 

     Outcome1 = Outcome.Indefinite; 
    } 

    private Outcome MakeGuess(int guess) 
    { 
     if (Number > 1 && Number < 100) 
     { 
      if (PreviousGuesses.Contains(guess)) 
      { 
       return Outcome.PreviousGuess; 
      } 
      else if (PreviousGuesses.Count >= MaxNumberOfGuesses) 
      { 
       return Outcome.NoMoreGuesses; 
      } 
      if (Number == guess) 
      { 
       return Outcome.Correct; 
      } 
      else if (Number < guess) 
      { 
       return Outcome.High; 
      } 
    //  else if (Number > guess) 
     //  { 
       return Outcome.Low; 
     // } 
     } 
     else 
     { 
      throw new ArgumentOutOfRangeException("Måste vara inom intervallet 1-100"); 
     } 
    } 

    //Enumerator 
    enum Outcome 
    { 
     Indefinite, 
     Low, 
     High, 
     Correct, 
     NoMoreGuesses, 
     PreviousGuess 
    } 
} 

我得到了錯誤信息,我的枚舉機密數字比屬性Outcome1具有可訪問性,但我不知道爲什麼。Enum擁有比屬性更好的可訪問性Outcome1

該屬性稱爲Outcome1,因爲否則名稱在Visual Studio中混淆了。

回答

5

您的枚舉具有private可見性,因爲您尚未給出明確的可見性,並且它嵌套在您的SecretNumber類中。

你不能使用類型作爲參數或者返回類型屬於公開暴露當該類型是不是也公開成員 - 否則調用者不知道該怎麼辦。

你可以只讓市民:

public enum Outcome 

這不是相當一樣 「的公共成員」。例如,internal類型中的public(非覆蓋)方法可以將其他內部成員稱爲參數 - 因爲該方法仍然只能由知道「包含」類型的另一類型調用。

+0

所以它應該在課外?謝謝。 – 2012-02-24 17:28:30

+1

@HerrNilsson:它*可能在課外,但你仍然需要公開。只是嵌套類型的默認值是'private'而不是'internal'。這與「公共」無關。 – 2012-02-24 17:33:14

+0

@HerrNilsson,如果枚舉的用法只在這個類中,那麼將它保留在同一類的範圍內。 – Pankaj 2012-02-24 18:22:07

1

您有包裝可見enumpublic屬性返回它。您應該使Outcome1私密或包裝可見,或使您的enum公開。如果在更廣泛的背景下有意義,您也可以將enum移出課程。哪個選項是正確的是您的設計決策。

P.S.該評論稱您的enum枚舉器,這不是枚舉類型的正確名稱。

1

在類內部時,默認訪問器(當沒有明確提供時)是private

public enum Outcome 
{ 
    Indefinite, 
    Low, 
    High, 
    Correct, 
    NoMoreGuesses, 
    PreviousGuess 
} 
1

您的枚舉不公開。其他將使用SecretNumber的類將不能使用枚舉。