2010-05-16 4 views
31

C'est probablement une question stupide, mais je ne peux pas sembler le faire. Je veux mettre en place des énumérations dans une classe comme ceci:Comment obtenir un accès global aux types enum en C#?

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

ensuite avoir ce type ENUM accessible à toutes les classes afin qu'une autre classe pourrait 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 la mise à l'ENUM publique serait ce semble possible automatiquement, mais il ne pas être visible à l'extérieur de la classe I a déclaré le ENUM en .

Répondre

46

Vous pouvez faire une des deux choses.

1- Déplacer la déclaration de l'ENUM 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. 
} 

Ce qui va changer à

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

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

2 - Référence de 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 que vous avez déclaré l'ENUM dans.

12

Declare 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ée dans le cadre d'une classe, vous rendre publique cette classe aussi:

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

Utilisation:

MyClass.Direction dir = ... 
+1

Qu'est-ce exactement tu ne comprends pas? - La réponse d'abatishchev explique tout cela très clairement. – Dal

3

Il est public, mais la définition d'un ENUM intérieur d'une classe en fait un genre intérieur de cette classe. Par exemple:

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

Pour accéder à cette ENUM d'une autre classe dans l'espace de noms MyNamespace, vous devez faire référence comme Foo.MyEnum, non seulement MyEnum. Si vous voulez faire référence simplement comme MyEnum, déclarer juste à l'intérieur l'espace de noms plutôt que dans la classe:

namespace MyNamespace 
{ 
    public class Foo { ... } 

    public enum MyEnum { One, Two, Three } 
} 
1

Mettre la enum définition à l'intérieur du fichier Program.cs, 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 partout dansune classe dans le même espace de noms sans qu'il soit nécessaire de spécifier le nom de classe comme ceci:

Direction d; 
d = Direction.north;