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.
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;
}
Où ClassName
est le nom de la classe que vous avez déclaré l'enum.
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 = ...
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 }
}
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;