C#中枚举的默认访问修饰符

时间:2012-02-10 23:38:54

标签: c# oop enums

根据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进行编译。]

5 个答案:

答案 0 :(得分:11)

事实并非如此。

枚举类型的默认辅助功能与任何其他类型相同; top级别的内部类型和嵌套类型的private。

您链接的页面表明枚举成员RedBlue等)的默认(实际上是唯一)辅助功能级别是公开的。

答案 1 :(得分:5)

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

Test.Color是班级成员 - 因此是私人的。

答案 2 :(得分:2)

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

比较一个类的成员(字段,方法,常量等);这里,根据表格,默认为“私有”,但您可以指定更高的可访问性。

答案 3 :(得分:1)

我相信因为你在没有修饰符的情况下在类中声明,所以它假设是私有的,因为它是类中的标准行为。指定应该解决问题的公共。但请注意,Code Analysis会建议将此枚举放在课堂外。

答案 4 :(得分:-1)

这是因为你的枚举上没有public,protected,internal,它需要默认值(这是类和枚举的内部)

抱歉这令人困惑,你不能把这个属性公开,因为枚举是私有的

如果某人使用您的程序并且编译器告诉您有关它的话,公共财产将在外部公开