C # Общие параметры данных - PullRequest
1 голос
/ 07 января 2010

Привет,

Я новичок в OO и программировании, и у меня следующая ситуация:

У меня есть набор значений const и перечислений, которые разделяют некоторые из классов, которые я реализую.

Эти классы являются независимыми, т. Е. Кроме обмена этими значениями, они не взаимодействуют друг с другом, поэтому их наследование не будет работать.

Мне было интересно; Если я создаю пустой класс только с этими константами и перечислениями, а затем объявляю объект этого класса в каждом классе, то я могу использовать эти значения, например:

globals.enum.enummember

Это звуковое программирование или есть лучший способ сделать это?

Спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 07 января 2010

Лучше всего просто объявлять перечисления вместе с вашими классами, а не вкладываться в класс. На самом деле, вложенные типы обычно плохая идея, если они не являются частными. Конечно, есть исключения, но по большей части вам лучше без вложенности.

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

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

1 голос
/ 07 января 2010

Вы можете использовать статический класс со статическими членами для достижения желаемого поведения:

namespace A {
    public static class Enum1 {
       public static readonly int EnumMember1 = 1;
       public static readonly int EnumMember2 = 2;
       public static readonly int EnumMember3 = 3;
    }
}

Вы должны использовать это следующим образом:

int x = A.Enum1.EnumMember2;
...