如何在C#中获取枚举类型的全局访问权限?

lal*_*ala 32 .net c# enums global-variables

这可能是一个愚蠢的问题,但我似乎无法做到这一点.我想在一个类中设置一些枚举,如下所示:

public enum Direction { north, east, south, west };
Run Code Online (Sandbox Code Playgroud)

然后让所有类都可以访问该枚举类型,以便其他类可以例如:

Direction dir = north;
Run Code Online (Sandbox Code Playgroud)

并能够在类之间传递枚举类型:

public void changeDirection(Direction direction) {
   dir = direction;
}
Run Code Online (Sandbox Code Playgroud)

我认为将枚举设置为public会使其自动成为可能,但是在我声明枚举的类之外它似乎并不可见.

Chr*_*lor 52

你可以做两件事之一.

1-在类之外移动枚举的声明

今天你可能有这样的事情

public class ClassName
{
  public enum Direction
  {
    north, south, east, west
  }
  // ... Other class members etc.
}
Run Code Online (Sandbox Code Playgroud)

哪个会改为

public class ClassName
{      
  // ... Other class members etc.
}

// Enum declared outside of the class
public enum Direction
{
  north, south, east, west
}
Run Code Online (Sandbox Code Playgroud)

2-使用类名引用枚举

ClassName.Direction.north
Run Code Online (Sandbox Code Playgroud)

例如.

public void changeDirection(ClassName.Direction direction) { 
   dir = direction; 
}
Run Code Online (Sandbox Code Playgroud)

ClassName您声明枚举的类的名称在哪里.


aba*_*hev 14

在类之类的命名空间中声明枚举,而不是在类中:

namespace MyApplication
{
   public enum Direction { north, east, south, west };
}
Run Code Online (Sandbox Code Playgroud)

如果枚举是在类的范围内声明的,那么您也将此类设为public:

namespace MyApplication
{
   public class MyClass
   {
      public enum Direction { north, east, south, west };
   }
}
Run Code Online (Sandbox Code Playgroud)

用法:

MyClass.Direction dir = ...
Run Code Online (Sandbox Code Playgroud)


Ada*_*son 5

它是公共的,但在类内定义枚举使其成为该类的内部类型。例如:

namespace MyNamespace
{
    public class Foo
    {
        public enum MyEnum { One, Two, Three }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了从MyNamespace命名空间中的另一个类访问此枚举,您必须将其引用为Foo.MyEnum,而不仅仅是MyEnum。如果您想简单地引用它MyEnum,请在命名空间内而不是在类内声明它:

namespace MyNamespace
{
    public class Foo { ... }

    public enum MyEnum { One, Two, Three }
}
Run Code Online (Sandbox Code Playgroud)