受保护的枚举在C#中不可能

Jac*_*ada 3 c# language-features

我只是想了解为什么我不能在C#上创建受保护的枚举?

编译器拒绝接受

有谁知道为什么会这样?

Jon*_*eet 13

您可以拥有嵌套在另一种类型中的受保护类型 - 包括枚举:

public class Outer
{
    protected enum NestedEnum { Foo, Bar, Baz };
}
Run Code Online (Sandbox Code Playgroud)

但是,保护非嵌套类型没有意义 - 受保护的修饰符是关于从派生类型中授予对成员的访问权限; 作为顶级类型只是命名空间的成员而不是其他类型的成员,没有可以派生的类型来获得额外的访问权限.

你能描述一下你实际想要实现的目标,然后我们可以尝试找出最合适的可见性吗?

  • 枚举不能在 C#/.NET 中扩展 - 它们派生自 System.ValueType,因此,类似于结构,您不能继承它们。 (2认同)

Meh*_*ari 6

可以创建一个enumprotected访问修饰符,如果它是一个嵌套类型.直接在a中创建的类型namespace只能采用publicinternal访问修饰符.在a中创建一个private,protectedprotected internal直接输入是没有意义的,namespace因为你无法在任何地方使用它(因为你不能从命名空间继承或在其中声明方法).