Comment obtenir un accès global aux types enum en C#?

C'est probablement une question stupide, mais je ne peux pas le faire. Je veux mettre en place certaines énumérations dans une classe comme ceci:

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

alors avoir ce type d'enum accessible à toutes les classes de sorte qu'une autre classe pourrait par exemple avoir:

Direction dir = north;

et être en mesure de passer le type enum entre les classes:

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

je pensais que mettre l'enum au public rendrait cela automatiquement possible, mais il ne semble pas être visible en dehors de la classe I a déclaré l'enum.

32
demandé sur abatishchev 2010-05-16 22:18:14

4 réponses

Vous pouvez faire une des deux choses.

1 - Déplacer la déclaration de l'énumération à l'extérieur de la classe

aujourd'Hui, vous avez probablement quelque chose comme ceci

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

qui passera à

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

// Enum declared outside of the class
public enum Direction
{
  north, south, east, west
}

2 - référencer l'enum en utilisant le nom de classe

ClassName.Direction.north

par exemple.

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

ClassName est le nom de la classe que vous avez déclaré l'enum.

49
répondu Chris Taylor 2010-05-16 18:29:28

Déclarer enum dans le cadre d'un espace de noms comme une classe, mais pas dans une classe:

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

En cas enum est déclaré dans la portée d'une classe, vous devez vous rendre cette classe public:

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

Utilisation:

MyClass.Direction dir = ...
14
répondu abatishchev 2010-05-16 18:19:30

c'est public, mais définir un enum à l'intérieur d'une classe en fait un type interne de cette classe. Par exemple:

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

pour accéder à cet enum à partir d'une autre classe de la classe MyNamespace espace de noms, vous devez le référencer comme Foo.MyEnum, pas MyEnum. Si vous souhaitez faire référence à elle comme simplement MyEnum, le déclarer juste à l'intérieur de l'espace de noms plutôt qu'à l'intérieur de la classe:

namespace MyNamespace
{
    public class Foo { ... }

    public enum MyEnum { One, Two, Three }
}
4
répondu Adam Robinson 2010-05-16 18:21:27

mettez le enum définition à l'intérieur de l' Program.cs le fichier, mais à l'extérieur de l' Program classe. Cela rendra le enum taper globalement accessible sans avoir à référencer le nom de classe.

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

    static class Program
    {   
    }
}

Puis vous pouvez y accéder partout classe au sein du même espace de noms, sans la nécessité de préciser le nom de la classe comme ceci:

Direction d;
d = Direction.north;
1
répondu SIRTAN 2014-07-25 04:12:37