Перечисление, наследуемое от int
Я нашел это повсюду в этом коде:
public enum Blah: int
{
blah = 0,
blahblah = 1
}
Зачем ему наследовать от int? Это когда-нибудь нужно?
9 ответов
Согласно документации:
Каждый тип перечисления имеет базовый тип, который может быть любым целым типом, кроме char. Базовым типом элементов перечисления по умолчанию является int.
Так что нет, вам не нужно использовать int. Это будет работать с любым целым типом. Если вы не укажете ничего, он будет использовать int по умолчанию, и именно этот тип будет использоваться для хранения перечисления в памяти.
Перечисления неявно поддерживаются целыми числами.: int
просто повторяет значение по умолчанию, так же, как void M();
против private void M();
,
Вы также можете создавать перечисления, которые поддерживаются другими типами интегралов, такими как enum GiantEnum : long
,
Вам не нужно, это подразумевается. По данным MSDN:
Перечисление - это набор именованных констант, базовый тип которых является любым целочисленным типом, кроме Char. Если базовый тип явно не объявлен, используется Int32. Enum является базовым классом для всех перечислений в.NET Framework.
Это означает, что вы могли бы использоватьbyte
, sbyte
, ushort
, int
, uint
, long
, или же ulong
,
Кроме того, установка значений, как вы описали (blah=0, blahblah=1), в то время как избыточные, это нормально, так как, в соответствии со спецификацией C#
Если объявление элемента enum не имеет инициализатора, его значение устанавливается неявно, как показано ниже:
• Если член перечисления является первым членом перечисления, объявленным в типе перечисления, его соответствующее значение равно нулю.
• В противном случае соответствующее значение элемента перечисления получается путем увеличения соответствующего значения текстового предшествующего элемента перечисления на единицу. Это увеличенное значение должно находиться в диапазоне значений, которые могут быть представлены базовым типом, в противном случае возникает ошибка времени компиляции.
int
по умолчанию тип любого enum
, Это не должно быть объявлено явно.
Это более полезно, когда вы хотите использовать что-то еще (byte
, long
, и друзья).
Вам не нужно наследовать от int
но по умолчанию это так. Вы можете наследовать от других целочисленных типов (byte
, long
и т. д.) если хотите. Примером может быть, если вы хотите сохранить память или пространство столбца в БД.
Большую часть времени меня не волнует, является ли enum подписанным или неподписанным, или сколько у него битов, поэтому я просто позволяю системе использовать по умолчанию int.
Однако бывают случаи, когда мне все равно, что enum - это 32-битное целое число со знаком, и тогда хорошо, когда я проясняю, что мне все равно. Я бы также ожидал комментарий, объясняющий, почему я забочусь.
Вам не нужно наследовать, так как базовый тип Enum по умолчанию - int.
http://msdn.microsoft.com/en-us/library/sbbt4032(v=vs.71).aspx
base-type (Optional)
The underlying type that specifies the storage allocated for each enumerator. It can be one of the integral types except char. The default is int.
Перечисление "member" может иметь базовое "value". Наследование от int сообщает вам, какой тип будет принимать значение.