C# C中枚举的默认访问修饰符#
根据MSDN和(以及),枚举的默认可访问性是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
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#公共成员名称,包括枚举成员,应为大写。