Ответ 1
Здесь это прямо из Microsoft:
http://msdn.microsoft.com/en-us/library/4x252001(VS.71).aspx
Используйте уникальное имя для большинства Enum типы, но используйте множественное имя для Enum типы, которые являются битовыми полями.
Используете ли вы единственное или множественное число для перечислений? Я думаю, что это имеет смысл с множественным числом в декларации
enum Weekdays
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
... но я думаю, что это имеет большее значение с единственным при использовании типа, например.
Weekday firstDayOfWeek = Weekday.Monday;
Я прочитал рекомендацию где-то использовать особые регулярные перечисления и множественное число с флагами, но я хотел бы услышать еще несколько "за" и "против".
Здесь это прямо из Microsoft:
http://msdn.microsoft.com/en-us/library/4x252001(VS.71).aspx
Используйте уникальное имя для большинства Enum типы, но используйте множественное имя для Enum типы, которые являются битовыми полями.
Одна рекомендация приведена в .NET Руководство по разработке каркаса, стр. 59-60:
Do используйте уникальное имя типа для перечисления, если его значения не являются битами поля.
public enum ConsoleColor { Black, Blue, Cyan, ...
Do используйте имя множественного типа для перечисления с битовыми полями как значения, также называемые перечислением флагов.
[Flags] public enum ConsoleModifiers { Alt, Control, Shift }
В .NET Framework большинство "нормальных" перечислений (например, DayOfWeek
) имеют уникальные имена и перечисления флагов (например, StringSplitOptions
, BindingFlags
) имеют множественные имена. Это имеет смысл, так как значение перечисления флага может представлять несколько элементов, но для перечисления без флага, оно может представлять только один элемент.
Microsoft рекомендует использовать уникальное имя для перечислений, если оно не использует атрибут Flags
. И как взято из книги "Руководства по дизайну Framework", вы не должны суффиксные имена типов перечислений с Enum, Flags и т.д., И вы не должны префиксные значения перечисления с аббревиатурой или аббревиатурой, как это было обычно с перечислениями VB в тот же день.
В общем, я рассматриваю определение перечисления как определение типа со значениями перечисление - это разные значения, которые может иметь тип; поэтому он получает уникальное имя:
enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY };
enum CoffeeSize { SMALL, MEDIUM, LARGE };
Да. Если вы используете умственный опыт реализации перечислений в качестве классов, то тот факт, что вы используете уникальное имя для типа, должно показать, что это имеет смысл использовать особые имена для таких перечислений. Например.
struct Weekday {};
const Weekday SUNDAY;
const Weekday MONDAY;
const Weekday TUESDAY;
...
void func (Weekday *day)
{
if (day == &SUNDAY)
...
}
Для тех, кто предпочитает множественные числа в перечислениях, вы бы назвали это struct Weekdays
?
В общем, я рассматриваю определение перечисления как определение типа, причем значения перечисления представляют собой разные значения, которые может иметь тип; поэтому он получает уникальное имя:
enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY };
enum CoffeeSize { SMALL, MEDIUM, LARGE };
Как и соглашение С#/Microsoft, перечисления в Java должны быть сингулярными: http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
Это субъективно и не имеет значения, что вы используете, если вы последовательны (лично я использую единственное, как перенос с моих соглашений Sql)