web-dev-qa-db-ja.com

C#で列挙型へのグローバルアクセスを取得する方法は?

これはおそらくばかげた質問ですが、私にはできないようです。次のように、1つのクラスにいくつかの列挙型を設定します。

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

次に、その列挙型をすべてのクラスからアクセスできるようにして、他のクラスがたとえば以下を行えるようにします。

Direction dir = north;

クラス間で列挙型を渡すことができます:

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

列挙型をパブリックに設定すると、これが自動的に可能になると考えましたが、列挙型を宣言したクラスの外では表示されないようです。

32
lala

次の2つのいずれかを実行できます。

1-​​= enumの宣言をクラス外に移動します

今日はおそらくこのようなものを持っています

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は、enumを宣言したクラスの名前です。

52
Chris Taylor

クラスのような名前空間のスコープでenumを宣言しますが、クラスには宣言しません:

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

Enumがクラスのスコープで宣言されている場合、このクラスもパブリックにします:

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

使用法:

MyClass.Direction dir = ...
14
abatishchev

パブリックですが、クラス内で列挙型を定義すると、そのクラスの内部型になります。例えば:

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

MyNamespace名前空間の別のクラスからこの列挙型にアクセスするには、MyEnumだけでなく、Foo.MyEnumとして参照する必要があります。単にMyEnumとして参照する場合は、クラス内ではなく、名前空間内で宣言します。

namespace MyNamespace
{
    public class Foo { ... }

    public enum MyEnum { One, Two, Three }
}
4
Adam Robinson

enum定義をProgram.csファイルの内部に配置しますが、Programクラスの外部に配置します。これにより、クラス名を参照せずにenum型にグローバルにアクセスできるようになります。

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

    static class Program
    {   
    }
}

次に、次のようにクラス名を指定することなく、同じ名前空間内のanywhere in anyクラスにアクセスできます。

Direction d;
d = Direction.north;
1
SIRTAN