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

Какой смысл наличия

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

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

byte b = (byte)SomeEnum.SomeValue;
18
задан Bakuriu 25 April 2014 в 11:13
поделиться

3 ответа

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

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

13
ответ дан 30 November 2019 в 09:03
поделиться

From enum (Справочник C #)

Базовый тип указывает, сколько памяти выделяется для каждого {{1} } перечислитель. Однако явное приведение необходимо для преобразования из типа перечисления в целочисленный тип.

3
ответ дан 30 November 2019 в 09:03
поделиться

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

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

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

Языки с сильным типированием, такие как C #, стремятся немного усложнить выход за рамки ваших «контрактов» по ​​кодированию. Обычно это помогает сделать дизайн приложения немного лучше.

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

3
ответ дан 30 November 2019 в 09:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: