【问题标题】:Enum has lesses accessability than property Outcome1Enum 的可访问性低于属性 结果 1
【发布时间】:2012-02-24 17:24:01
【问题描述】:
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
    }
}

我收到错误消息,指出我的枚举 Secret number 的可访问性低于属性 Outcome1,但我不知道为什么。

该属性称为 Outcome1,否则名称会在 Visual Studio 中混淆。

【问题讨论】:

    标签: c# asp.net .net webforms


    【解决方案1】:

    你的枚举有 private 可见性,因为你没有给它明确的可见性,它嵌套在你的 SecretNumber 类中。

    当该类型不是公开的时,您不能将类型用作参数或返回公开的成员的类型1 - 否则调用者将不知道如何处理它。

    您可以将其公开:

    public enum Outcome
    

    1 这与“公共成员的”相当不同。例如,internal 类型中的public(非覆盖)方法可以将其他内部成员作为参数引用 - 因为该方法仍然只能由知道“包含”internal 类型的另一种类型调用无论如何。

    【讨论】:

    • 所以应该是课外吧?谢谢。
    • @HerrNilsson:它可能在课堂之外,但你仍然需要将其公开。只是嵌套类型的默认值是private,而不是internal。两者都与public 不同。
    • @HerrNilsson,如果枚举的使用仅在此类中,则将其保留在同一类的范围内..
    【解决方案2】:

    你有一个包可见的enum 和一个返回它的public 属性。您应该将Outcome1 设为私有或包可见,或者将您的enum 设为公开。如果在更广泛的背景下有意义,您也可以将 enum 移出您的班级。哪个选项是正确的,是您的设计决定。

    附:该评论将您的enum 称为枚举器,这不是枚举类型的正确名称。

    【讨论】:

      【解决方案3】:

      在类中时,默认访问器(未明确提供时)为private

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

      【讨论】:

        【解决方案4】:

        您的枚举不是公开的。将使用 SecretNumber 的其他类将无法使用该枚举。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-26
          • 1970-01-01
          • 1970-01-01
          • 2018-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-27
          相关资源
          最近更新 更多