【问题标题】:default access modifier for enum in C#C#中枚举的默认访问修饰符
【发布时间】:2012-03-03 10:18:35
【问题描述】:

根据 MSDN herehere(以及 accepted answer to this qstn),枚举的默认可访问性是 public。 但是,这段代码:

public class Test
{
    enum Color { RED, BLUE, GREEN };
    public void SetColor(Color c) { }
}

将引发此编译错误:

Error 1 Inconsistent accessibility: parameter type 'Test.Color' is less accessible than method 'Test.SetColor(Test.Color)'

(这与将枚举设置为private 时遇到的错误相同。)此错误只能通过将枚举显式修改为public 来解决。文档不正确吗?

[我正在使用 C# 2010 和 .NET 4.0 进行编译。]

【问题讨论】:

  • 引用枚举的成员的默认可访问性,而不是枚举本身。
  • C# 公共成员名称,包括枚举成员,应为 UpperCamelCase。

标签: c# oop enums


【解决方案1】:

这不是真的。

枚举 types 的默认可访问性与任何其他类型相同; internal 用于顶级类型,private 用于嵌套类型。

您链接到的页面表明枚举成员RedBlue 等)的默认(实际上是唯一)可访问性级别是公开的。

【讨论】:

    【解决方案2】:

    提到的 MSDN 文章和 SO 答案是指“枚举成员” - 例如 Test.Color.RED,而不是 Test.Color 作为枚举本身。

    Test.Color 是类的成员 - 因此是私有的。

    【讨论】:

      【解决方案3】:

      该表指的是成员;成员是“RED”、“BLUE”和“GREEEN”,并且确实是公共文字常量,并且不允许指定可访问性。

      例如,对比类的成员(字段、方法、常量等);此处,根据表格,默认值为“私有”,但您可以指定更高的可访问性。

      【讨论】:

        【解决方案4】:

        我相信,因为您在没有修饰符的类内声明,所以它假定是私有的,因为它是类中的标准行为。指定应该解决问题的公众。但是请注意,代码分析会建议将此枚举放在类之外。

        【讨论】:

          【解决方案5】:

          这是因为你的枚举没有 public、protected、internal,它采用默认值(对于类和枚举来说是 internal)

          抱歉,您不能公开该属性,因为枚举是私有的

          如果有人使用你的程序并且编译器告诉你,公共属性将是外部公共的

          【讨论】:

            猜你喜欢
            • 2011-04-10
            • 1970-01-01
            • 2021-06-10
            • 1970-01-01
            • 2011-02-01
            • 2011-04-13
            • 1970-01-01
            相关资源
            最近更新 更多