C # Public Enums в классах - PullRequest
       24

C # Public Enums в классах

61 голосов
/ 29 марта 2010

У меня есть программа с классом, который содержит публичное перечисление, следующим образом:

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

Я хочу использовать это в другом месте моего проекта, но не могу сделать это без использования Card.card_suit. Кто-нибудь знает, есть ли способ в C # объявить это, чтобы я мог объявить

card_suits suit;

Без ссылки на класс, в котором он находится?

Ответы [ 5 ]

122 голосов
/ 29 марта 2010

В настоящее время ваш enum вложен в ваш класс Card. Все, что вам нужно сделать, это переместить определение enum из класса:

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

public class Card
{
}

Чтобы указать:

Было предложено изменить имя с card_suits на CardSuit, поскольку в рекомендациях Microsoft предлагается Pascal Case для перечислений, а форма единственного числа в этом случае более наглядна (так как множественное число предполагает, что вы сохраняете несколько значений перечисления с помощью ORing. их вместе).

25 голосов
/ 29 марта 2010

Вам нужно определить enum вне класса.

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

public class Card
{
     // ...

При этом, возможно, вы захотите использовать стандартные правила именования для Enums , которые будут CardSuit вместо card_suits, поскольку предлагается Pascal Casing, а перечисление не помечено FlagsAttribute , предполагающий наличие нескольких значений в одной переменной.

11 голосов
/ 29 марта 2010

Просто объявите enum за пределами класса. Как это:

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

public class Card
{
    ...
}

Помните, что перечисление является типом. Вы можете также рассмотреть возможность помещения перечисления в свой собственный файл, если оно будет использоваться другими классами. (Вы программируете карточную игру, и масть является очень важным атрибутом карты, который в хорошо структурированном коде должен быть доступен ряду классов.)

1 голос
/ 25 июня 2013

Просто объявите это вне определения класса.

Если ваше пространство имен называется X, вы сможете получить доступ к значениям перечисления с помощью X.card_suit

Если вы не определили пространство имен для этого перечисления, просто позвоните им по card_suit. Клубы и т. Д.

0 голосов
/ 09 сентября 2015

Я думаю, это то, что вы хотите.

using card_suits = Card.card_suits;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...