Подтвердить что ты не робот

Каков прецедент для определения базового типа в перечислениях?

В чем смысл

enum SomeEnum : byte // <----
{
  SomeValue = 0x01,
  ...
}

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

byte b = (byte)SomeEnum.SomeValue;
4b9b3361

Ответ 1

Не так много, правда, за исключением того, что если для вас недостаточно базового типа по умолчанию (int), т.е. вы хотите использовать более высокие целые значения, чем это, вы можете сделать это long. Это может быть полезно, если у вас есть перечисление [Flags] с более чем 32 значениями.

Вы можете сделать это byte или short только для ограничения диапазона значений, но на самом деле он все равно будет принимать 4 байта (то есть, как int).

Ответ 2

От enum (ссылка С#)

Основной тип указывает, сколько для каждого переписчик. Однако явное приведение требуется для преобразования из типа перечисления в интегральный тип.

Ответ 3

Помимо технических причин, почему... Здесь есть принцип дизайна.

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

В коде клиента тот факт, что вы используете перечисление, должен означать, что вы действительно имеете в виду использование перечисления, а не байта или long и т.д. Иначе почему бы просто не использовать тип данных, который вы имеете в виду.

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

Теперь, конечно, я не говорю, что вам не приходится ввязываться в детали реализации, хорошим примером является реляционный сопоставитель объектов (ORM), в котором вы сопоставляете тип данных С# с типом данных базы данных, перечисления - хороший пример, когда вы должны знать его тип хранилища для его сопоставления. Но в этих случаях, его ИМО хорошо иметь для объяснения или отражения, его хороший флаг в обзорах, что здесь вы специально выходите за пределы обычного использования.