无法将受保护的枚举作为静态方法的参数传递

时间:2015-01-30 18:00:50

标签: c# access-modifiers class-visibility

我一直在更新公司的软件,偶然发现了这个问题。这个枚举是受保护的,我想从枚举中传递一个值作为静态方法的参数,但我不能导致我无法访问它,即使方法和枚举都在同一个类中。 / p>

示例:

Class SomeClass
{    
    protected enum Car
    {
        Id
    };

    public static void AMethod(Car enumValue)
    {
        MessageBox.Show("This is an enum:" + enumValue.ToString());
    }  
}

我无法将此Car enumValue用作AMethod的参数,因为我无法访问它。 为什么我不能这样做?我的意思是他们在同一个班级。我错过了什么吗?

1 个答案:

答案 0 :(得分:5)

问题不在于您的SomeClass无法看到枚举。问题是您的枚举有一个protected访问修饰符,并且您尝试在public方法中使用它(即在您的类外面可以访问 )。您无法通过protected成员公开public类型,因为其他类中的方法在尝试调用AMMethod()时无法看到枚举。

根据您打算如何使用此类,您需要更改其中一个,以便访问修饰符匹配:

public enum Car
{
    Id
};

public static void AMethod(Car enumValue)
{
    MessageBox.Show("This is an enum:" + enumValue.ToString());
}  

或:

protected enum Car
{
    Id
};

protected static void AMethod(Car enumValue)
{
    MessageBox.Show("This is an enum:" + enumValue.ToString());
}  

后者只会阻止编译器错误,但可能是希望 AMethod公开,所以你应该选择前者。