与枚举和公共课混淆 - 为什么它不起作用?

时间:2010-11-21 20:56:50

标签: c# class enums accessibility


拥有以下代码,它会报告不一致的可访问性,但我不明白为什么。这取决于程序类是否公开:

enum Test
    {A,B}

    public class Program  //when I remove public, it works
    {
        public Test a = Test.A;

        static void Main(string[] args)
        {

        }
    }

4 个答案:

答案 0 :(得分:4)

您尚未在枚举声明中添加访问修饰符,然后将其公开为public类的Program字段。如果您未声明访问修饰符,则为private

public enum Test { A, B }

答案 1 :(得分:2)

您无法公开该属性,因为枚举是私有的。如果有人使用您的程序并且编译器告诉您有关公共属性,那么公共属性将在外部公开。

答案 2 :(得分:2)

因为您没有在枚举上明确声明访问修饰符(即publicprotectedinternal),所以它采用默认值(internal用于课程和枚举)。然后,您通过public类的Program字段公开该枚举,这是不允许的,因为枚举在其程序集之外是不可见的。

您需要将枚举声明为public,或将字段的访问修饰符更改为internalprivate

当您从public类中删除Program时它会起作用,因为它会将Program类更改为内部 - 与枚举相同。这很好,因为它们都没有公开曝光。

答案 3 :(得分:1)

您可能需要将枚举设置为公开