2010-03-29 27 views
53

que tienen un programa con una clase que contiene una enumeración pública, de la siguiente manera:C# enumeraciones Públicas de las clases

public class Card 
{ 
    public enum card_suits 
    { 
     Clubs, 
     Hearts, 
     Spades, 
     Diamonds 
    } 
... 

Quiero usar esto en otro lugar en mi proyecto, pero no puede hacerlo sin el uso de la tarjeta .card_suit. ¿Alguien sabe si hay una forma en C# para declarar esto para que yo soy capaz de declarar

card_suits suit; 

sin hacer referencia a la clase que está en?

+3

Pronto, en C# 6, las declaraciones de uso estático lo harán para que no tenga que hacer referencia a la clase de esta manera. Pero, no en C# hoy. –

Respuesta

100

Actualmente, su enum está anidado dentro de su clase Card. Todo lo que tiene que hacer es mover la definición de la enum de la clase:

// A better name which follows conventions instead of card_suits is 
public enum CardSuit 
{ 
    Clubs, 
    Hearts, 
    Spades, 
    Diamonds 
} 

public class Card 
{ 
} 

para especificar:

se sugirió El cambio de nombre de card_suits a CardSuit debido a las directrices de Microsoft sugieren Pascal caso para enumeraciones y la forma singular es más descriptiva en este caso (ya que un plural sugeriría que está almacenando valores de enumeración múltiples ORingándolos juntos).

+0

Pero solo quiero declararlo en un solo lugar, sin embargo, usarlo en todo el espacio de nombres –

+4

Aún tendrá acceso a él en todo el espacio de nombres con solo declararlo una vez. –

+0

@ pm_2 siguiendo la respuesta de Justin le permitiría hacer exactamente eso. –

20

es necesario definir la enumeración fuera de la clase.

public enum card_suits 
{ 
    Clubs, 
    Hearts, 
    Spades, 
    Diamonds 
} 

public class Card 
{ 
    // ... 

Dicho esto, también es posible que desee considerar el uso de la standard naming guidelines for Enums, que se CardSuit en lugar de card_suits, ya que se sugiere Pascal carcasa, y la enumeración no está marcado con el FlagsAttribute, lo que sugiere múltiples valores son correctos en una sola variable.

11

Sólo declaran la enumeración fuera de los límites de la clase. De esta manera:

public enum card_suits 
{ 
    Clubs, 
    Hearts, 
    Spades, 
    Diamonds 
} 

public class Card 
{ 
    ... 
} 

Recuerde que una enumeración es un tipo. También podría considerar poner la enumeración en su propio archivo si va a ser utilizado por otras clases. (Usted está programando un juego de cartas y el palo es un atributo muy importante de la tarjeta que, en un código bien estructurado, deberá ser accesible por varias clases).

+0

Siempre que sea 'público', el OP no debería tener un problema, pero en cuanto a estar organizado y bien estructurado, entonces definitivamente de acuerdo con usted. – Si8

1

Simplemente lo declare fuera de la definición de la clase.

Si el nombre de su espacio de nombres es X, usted será capaz de acceder a los valores de la enumeración por X.card_suit

Si no se ha definido un espacio de nombres para esta enumeración, sólo los llaman por card_suit.Clubs etc.

0

Mueve la definición de enum fuera de la clase pero dentro del espacio de nombre actual. Declararlo público lo hace accesible a nivel mundial desde allí. Hay un buen ejemplo ofrecido por los videos de www.LearnVisualStudio.Net para 'Aprender C# para principiantes'. Creo que esto también está disponible en www.microsoftvirtualacademy.com bajo el mismo C# para principiantes.

Dicho por favor utilice el Pascal o Carmel Caso convención de nomenclatura para hacer su código legible y para evitar la ambigüedad. por ejemplo, se prefiere CardSuit.

-1

creo que esto es lo que desea.

using card_suits = Card.card_suits; 
Cuestiones relacionadas