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