2010-05-16 8 views
31

Esta es probablemente una pregunta estúpida, pero parece que no puedo hacerlo. Quiero establecer algunas enumeraciones en una clase como esta:¿Cómo obtener acceso global a tipos enum en C#?

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

luego tener que tipo de enumeración accesible a todas las clases de manera que alguna otra clase podría tener, por ejemplo:

Direction dir = north; 

y ser capaz de pasar el tipo de enumeración entre las clases:

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

pensé que la fijación de la enumeración de público haría esto de forma automática posible, pero no parece ser visible fuera de la clase declaré en la enumeración .

enumeración

Respuesta

46

puede hacer una de dos cosas.

1- Mover la declaración de la enumeración fuera de la clase

Hoy es probable que tenga algo como esto

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

que cambiará a

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

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

2 - Haga referencia a la enumeración utilizando el nombre de clase

ClassName.Direction.north 

Eg.

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

Dónde ClassName es el nombre de la clase que usted declaró en la enumeración.

12

Declare en el ámbito de un espacio de nombres como una clase, pero no en una clase:

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

En caso de que la enumeración sea consignada en el ámbito de una clase, usted tiene hacer pública esta clase también:

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

Uso:

MyClass.Direction dir = ... 
+1

¿Qué es exactamente lo que no entiendes? - La respuesta de abatishchev explica todo muy claramente. – Dal

3

Es pública, pero la definición de una enumeración dentro de una clase hace que sea un tipo interno de esa clase. Por ejemplo:

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

Para acceder a esta enumeración de otra clase en el espacio de nombres MyNamespace, hay que hacer referencia a ella como Foo.MyEnum, no sólo MyEnum. Si desea hacer referencia a él simplemente como MyEnum, declararlo justo dentro del espacio de nombres en lugar de dentro de la clase:

namespace MyNamespace 
{ 
    public class Foo { ... } 

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

Ponga la definición enum dentro del archivo Program.cs, pero fuera de la clase Program. Esto hará que el tipo enum sea accesible globalmente sin tener que hacer referencia al nombre de la clase.

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

    static class Program 
    { 
    } 
} 

A continuación, puede acceder a él en cualquier lugar en cualquier clase dentro del mismo espacio de nombres sin la necesidad de especificar el nombre de la clase como esta:

Direction d; 
d = Direction.north;