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

C# C中枚举的默认访问修饰符#,c#,oop,enums,C#,Oop,Enums,根据MSDN和(以及),枚举的默认可访问性是public。 但是,该代码: public class Test { enum Color { RED, BLUE, GREEN }; public void SetColor(Color c) { } } 将引发此编译错误: 错误1可访问性不一致:参数类型“Test.Color”的可访问性不如方法“Test.SetColor(Test.Color)” (这与将枚举设置为private时遇到的错误相同)只有将枚举显式修改为publi

根据MSDN和(以及),枚举的默认可访问性是
public
。 但是,该代码:

public class Test
{
    enum Color { RED, BLUE, GREEN };
    public void SetColor(Color c) { }
}
将引发此编译错误:

错误1可访问性不一致:参数类型“Test.Color”的可访问性不如方法“Test.SetColor(Test.Color)”

(这与将枚举设置为
private
时遇到的错误相同)只有将枚举显式修改为
public
才能解决此错误。文档是否不正确

[我是用C#2010和.NET 4.0编译的。]

那不是真的

枚举类型的默认可访问性与任何其他类型相同;内部用于顶级类型,私有用于嵌套类型


您链接到的页面声明枚举成员的默认(事实上,仅此)可访问性级别(
红色
蓝色
,等等)是公共的。

提到的MSDN文章和答案指的是“枚举成员”-即
测试.Color.Red
,而不是
测试.Color


Test.Color
是类的一个成员,因此是私有的。

我认为,因为您在类内声明而不使用修饰符,所以它假定是私有的,因为这是类中的标准行为。指定应解决此问题的公共资源。但是,请注意,代码分析会建议将此枚举放置在类之外。

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

很抱歉造成混淆,您无法将属性公开,因为枚举是私有的


如果有人使用您的程序,并且编译器告诉您该表引用的是成员,则公共属性将是外部公共的

;成员是“RED”、“BLUE”和“green”,实际上是公共文本常量,不允许使用可访问性指定


与类的成员(字段、方法、常量等)进行对比;这里,根据表,默认值为“private”,尽管您可以指定更高的可访问性。

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