web-dev-qa-db-fra.com

C # Public Enums in Classes

J'ai un programme avec une classe qui contient une énumération publique, comme suit:

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

Je souhaite utiliser ceci ailleurs dans mon projet, mais je ne peux le faire sans utiliser Card.card_suit. Est-ce que quelqu'un sait s'il y a un moyen en C # de le déclarer pour que je puisse le déclarer

card_suits suit;

Sans faire référence à la classe dans laquelle elle est?

54
Paul Michaels

Actuellement, votre enum est imbriquée dans votre classe Card. Tout ce que vous avez à faire est de déplacer la définition de enum de la classe:

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

public class Card
{
}

Spécifier:

Le nom de card_suits à CardSuit a été suggéré, car les directives de Microsoft suggèrent Pascal Case for Enumerations et que la forme singulière est plus descriptive dans ce cas (comme un pluriel suggérerait que vous stockiez plusieurs valeurs d’énumération en les réunissant ensemble).

112
Justin Niessner

Vous devez définir l'énum en dehors de la classe.

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

public class Card
{
     // ...

Ceci étant dit, vous pouvez également envisager d'utiliser les instructions de nomenclature standard pour Enums , qui seraient CardSuit au lieu de card_suits, car Pascal Casing est suggéré et que l'enum ne comporte pas FlagsAttribute , suggérant que plusieurs valeurs sont appropriées dans une seule variable.

22
Reed Copsey

Déclarez simplement l'énum en dehors des limites de la classe. Comme ça:

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

public class Card
{
    ...
}

Rappelez-vous que une enum est un type. Vous pouvez également envisager de placer l'énum dans son propre fichier si elle sera utilisée par d'autres classes. (Vous programmez un jeu de cartes et la combinaison est un attribut très important de la carte qui, dans un code bien structuré, devra être accessible à un certain nombre de classes.)

11
Paul Sasik

Il suffit de le déclarer en dehors de la définition de classe.

Si le nom de votre espace de noms est X, vous pourrez accéder aux valeurs de l'énum par X.card_suit

Si vous n'avez pas défini d'espace de noms pour cette énumération, appelez-les simplement par card_suit.Clubs etc.

1
Paulo Alexandre

Déplacez la définition enum en dehors de la classe mais dans l'espace de noms actuel. Le déclarer comme public le rend accessible globalement à partir de là. Www.LearnVisualStudio.Net propose un bon exemple de vidéos pour «Apprendre le C # pour les débutants». Je pense que cela est également accessible sur www.microsoftvirtualacademy.com sous le même C # pour les séries pour débutants.

Ceci dit, veuillez utiliser la convention de dénomination des affaires Pascal ou Carmel pour rendre votre code lisible et éviter toute ambiguïté. Par exemple, CardSuit est préféré.

0
James