web-dev-qa-db-fra.com

Comment obtenir un accès global aux types d'énumération en C #?

C'est probablement une question stupide, mais je n'arrive pas à le faire. Je veux mettre en place des énumérations dans une classe comme celle-ci:

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

Ensuite, ayez ce type d'énumération accessible à toutes les classes afin qu'une autre classe puisse par exemple avoir:

Direction dir = north;

et pouvoir passer le type enum entre les classes:

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

Je pensais que définir l'énumération sur public rendrait cela possible automatiquement, mais cela ne semble pas être visible en dehors de la classe dans laquelle j'ai déclaré l'énumération.

32
lala

Vous pouvez faire deux choses.

1 - Déplacer la déclaration de l'énumération en dehors de la classe

Aujourd'hui, vous avez probablement quelque chose comme ça

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

Qui changera en

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

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

2 - Référencez l'énumération 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 dans laquelle vous avez déclaré l'énumération.

52
Chris Taylor

Déclarez l'énumération dans la portée d'un espace de noms comme une classe mais pas dans une classe:

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

Dans le cas où enum est déclaré dans le domaine d'une classe, vous devez également rendre cette classe publique:

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

Usage:

MyClass.Direction dir = ...
14
abatishchev

C'est public, mais définir une énumération à 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 à cette énumération à partir d'une autre classe de l'espace de noms MyNamespace, vous devez la référencer en tant que Foo.MyEnum, pas seulement MyEnum. Si vous voulez le référencer simplement MyEnum, déclarez-le 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
Adam Robinson

Placez la définition enum dans le Program.cs fichier, mais en dehors de la classe Program. Cela rendra le type enum globalement accessible sans avoir à référencer le nom de la classe.

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

    static class Program
    {   
    }
}

Ensuite, vous pouvez y accéder n'importe où dans la classe any dans le même espace de noms sans avoir besoin de spécifier le nom de la classe comme ceci:

Direction d;
d = Direction.north;
1
SIRTAN