Какой смысл наличия
enum SomeEnum : byte // <----
{
SomeValue = 0x01,
...
}
когда необходимо сделать бросок только для присвоения его тому же типу переменной как перечисления, лежащие в основе типа?
byte b = (byte)SomeEnum.SomeValue;
На самом деле особого смысла нет, за исключением того, что если базового типа по умолчанию ( int
) вам недостаточно, т.е. вы хотите использовать более высокие целочисленные значения, чем это, тогда вы можете сделать его длинным
. Это может быть полезно, если у вас есть перечисление [Flags]
с более чем 32 значениями.
Вы можете сделать его byte
или коротким
, чтобы ограничить диапазон значений, но на самом деле он все равно займет 4 байта (то есть так же, как int
).
Базовый тип указывает, сколько памяти выделяется для каждого {{1} } перечислитель. Однако явное приведение необходимо для преобразования из типа перечисления в целочисленный тип.
Помимо технических причин, почему ... Здесь есть принцип конструкции.
указание перечисления как имеющего байтовое хранилище является деталью реализации. Использование перечисления - это другая проблема, вам не нужно знать или заботиться о деталях его реализации.
В клиентском коде тот факт, что вы используете перечисление, должен означать, что вы на самом деле имеете в виду использовать перечисление, а не байт или длинный и т. Д. В противном случае, почему бы просто не использовать тип данных, который вы имеете в виду.
Языки с сильным типированием, такие как C #, стремятся немного усложнить выход за рамки ваших «контрактов» по кодированию. Обычно это помогает сделать дизайн приложения немного лучше.
Конечно, я не говорю, что не бывает случаев, когда вам нужно вмешиваться в детали реализации. Хорошим примером является, скажем, объектно-реляционный преобразователь (ORM), в котором вы сопоставляете тип данных C # с типом данных базы данных, перечисления - хороший пример, когда вам нужно знать тип хранилища, чтобы сопоставить его. Но в этих случаях его ИМО хорошо иметь явное отражение или отражение, это хороший признак в обзорах, что здесь вы специально выходите за пределы обычного использования.