Где должны находиться константы для событий в проекте C # - PullRequest
4 голосов
/ 17 марта 2011

Я чрезвычайно новичок в C #, и у меня возник вопрос соглашения:

Где должны храниться константы, связанные с событием?

Должны ли они быть включены в том же местечто я определяю мои EventArgs?

В качестве объяснения я хочу определить различные константы для частного поля с именем "_difficulty", и оно устанавливается через переопределенный конструктор класса EventArgs.

Скажем,константы были: public const int EASY = 0, MEDIUM = 1, HARD = 2;(Я предполагаю, что соглашение об именах - все заглавные)

В качестве альтернативы, я мог бы создать класс, такой как "DifficultyConstants", а затем вставить их туда.

Мне было просто интересно, что такое соглашениебыло и будет иметь смысл для ООП.

Ответы [ 6 ]

12 голосов
/ 17 марта 2011

Соглашение состоит в том, чтобы не делать этого.То, что вы описываете, будет условно реализовано как enum, а не как набор именованных целочисленных констант.

7 голосов
/ 17 марта 2011

Поскольку вы действительно добавляете уровни, такие как EASY, MEDIUM, HARD, которые находятся на порядковом уровне от каждого другого, я ожидаю, что будет использоваться enum.Как и в других языках, вы можете использовать public enum Difficulty {EASY, MEDIUM, HARD}.

Но где вы оставите такое перечисление?Если вы хотите, чтобы он использовался во многих различных EventArgs, я бы порекомендовал использовать некоторый абстрактный базовый класс:

public class LevelEventArgs : EventArgs
{
    public enum Difficulty
    { 
        EASY, 
        MEDIUM, 
        HARD 
    }
}

И затем, пусть все ваши EventArgs наследуются от этого класса.

3 голосов
/ 17 марта 2011

Вместо этого я бы использовал перечисление:

public enum DifficultyLevel {
  Easy = 0,
  Medium = 1,
  Hard = 2
}

Таким образом, все значения определены в структуре, которая четко определена как связанная с типом, а не как свободные константы, которые могут быть связаны с чем-либо.

Объявите ваше личное поле как:

private DifficultyLevel _difficulty;

Присвойте значение следующим образом:

_difficulty = DifficultyLevel.Easy;

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

_difficulty = (DifficultyLevel)1;

int level = (int)_difficulty;
2 голосов
/ 17 марта 2011

Константы должны быть объявлены рядом или в объекте, с которым они чаще всего ассоциируются при их использовании. Если вы в основном используете константы при создании пользовательских EventArgs, это звучит как отличное место для их определения. Если они используются везде, обычно рекомендуется библиотека Common или CommonUtil.

Один совет; рассмотрите возможность создания перечисления для этих значений, а не для отдельных констант. Они представляют собой взаимосвязанный, взаимоисключающий набор значений, которые указывают на статус; учебное определение перечислимых значений.

1 голос
/ 17 марта 2011

Похоже, вы хотите перечисление

    public enum Difficulty
{
   Easy,
   Medium,
   Hard
}
1 голос
/ 17 марта 2011

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

У меня есть несколько проектов, в которых оно находится в общем пространстве имен, т.е.

...