【问题标题】:How to get global access to enum types in C#?如何在 C# 中获得对枚举类型的全局访问?
【发布时间】:2011-02-20 03:43:13
【问题描述】:

这可能是一个愚蠢的问题,但我似乎做不到。我想像这样在一个类中设置一些枚举:

public enum Direction { north, east, south, west };

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

Direction dir = north;

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

public void changeDirection(Direction direction) {
   dir = direction;
}

我认为将枚举设置为 public 会自动实现这一点,但它似乎在我声明枚举的类之外不可见。

【问题讨论】:

    标签: c# .net enums global-variables


    【解决方案1】:

    你可以做两件事之一。

    1-将枚​​举的声明移到类外

    今天你可能有这样的事情

    public class ClassName
    {
      public enum Direction
      {
        north, south, east, west
      }
      // ... Other class members etc.
    }
    

    这会变成

    public class ClassName
    {      
      // ... Other class members etc.
    }
    
    // Enum declared outside of the class
    public enum Direction
    {
      north, south, east, west
    }
    

    2-使用类名引用枚举

    ClassName.Direction.north
    

    例如。

    public void changeDirection(ClassName.Direction direction) { 
       dir = direction; 
    }
    

    ClassName 是您在其中声明枚举的类的名称。

    【讨论】:

      【解决方案2】:

      在类的命名空间范围内声明枚举,但不在类中:

      namespace MyApplication
      {
         public enum Direction { north, east, south, west };
      }
      

      如果枚举是在类的范围内声明的,你也必须公开这个类:

      namespace MyApplication
      {
         public class MyClass
         {
            public enum Direction { north, east, south, west };
         }
      }
      

      用法:

      MyClass.Direction dir = ...
      

      【讨论】:

      • 你到底有什么不明白的? - abatishchev 的回答非常清楚地解释了这一切。
      【解决方案3】:

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

      namespace MyNamespace
      {
          public class Foo
          {
              public enum MyEnum { One, Two, Three }
          }
      }
      

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

      namespace MyNamespace
      {
          public class Foo { ... }
      
          public enum MyEnum { One, Two, Three }
      }
      

      【讨论】:

        【解决方案4】:

        enum 定义放在Program.cs 文件中,但在Program 类之外。这将使enum 类型可以全局访问,而无需引用类名。

        namespace YourApp
        {    
            enum Direction { north, east, south, west };
        
            static class Program
            {   
            }
        }
        

        然后您可以在同一命名空间内的 any 类中anywhere 访问它,而无需像这样指定类名:

        Direction d;
        d = Direction.north;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-22
          • 2016-06-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多