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

Enum, наследующий от int

Я нашел это повсюду в этом коде:

public enum Blah: int
{
    blah = 0,
    blahblah = 1
}

Зачем ему нужно наследовать от int? Нужно ли это когда-либо?

4b9b3361

Ответ 1

В соответствии с документацией:

Каждый тип перечисления имеет базовый тип, который может быть любым интегральный тип, кроме char. По умолчанию базовый тип перечисления Элементы - int.

Итак, нет, вам не нужно использовать int. Он будет работать с любым интегральным типом. Если вы не укажете, что он будет использовать int по умолчанию, и этот тип будет использоваться для хранения перечисления в памяти.

Ответ 2

Перечисления неявно поддерживаются целыми числами.
: int просто возвращает значение по умолчанию, как void M(); vs. private void M();.

Вы также можете создавать перечисления, которые поддерживаются другими типами межстрановых, например enum GiantEnum : long.

Ответ 3

Вам не нужно, это подразумевается. Согласно MSDN:

Перечисление представляет собой набор именованных констант, базовым типом которых является любой интегральный тип, кроме Char. Если базовый тип явно не объявлен, используется Int32. Enum является базовым классом для всех перечислений в .NET Framework.

Это означает, что вы можете использовать byte, sbyte, ushort, int, uint, long или ulong.

Также, установив значения так, как вы описали (blah = 0, blahblah = 1), в то время как избыточно, это нормально, поскольку, согласно С# Спецификация

Если объявление элемента перечисления не имеет инициализатора, его связанное значение устанавливается неявно, как показано ниже:

• Если элемент перечисления является первым членом перечисления, объявленным в типе перечисления, его связанное значение равно нулю.

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

Ответ 4

int по умолчанию является типом любого enum. Это не нужно явно указывать.

Это более полезно, если вы хотите использовать что-то еще (byte, long и друзей).

Ответ 5

В большинстве случаев мне неинтересно, есть ли подпись или без знака, или сколько битов она имеет, поэтому я просто позволяю системе использовать ее по умолчанию, это int.

Однако есть моменты, когда мне все равно, что перечисление представляет собой подписанный 32-битный int, и тогда хорошо дать понять, что мне все равно. Я бы ожидал, что комментарий также прописал почему мне все равно.

Ответ 6

Вы не нуждаетесь, чтобы наследовать от int, но по умолчанию это делает. Вы можете наследовать от других интегральных типов (byte, long и т.д.), Если хотите. Например, если вы хотите сохранить память или пространство столбцов в БД.

Ответ 7

он дает ему числовое значение, то есть все, насколько я знаю

Ответ 8

Вам не нужно наследовать, поскольку базовый тип 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.

Ответ 9

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