Перечисление, наследуемое от int - PullRequest
25 голосов
/ 14 июня 2011

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

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

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

Ответы [ 9 ]

31 голосов
/ 14 июня 2011

Согласно документации :

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

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

12 голосов
/ 14 июня 2011

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

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

5 голосов
/ 14 июня 2011

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

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

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

Кроме того, установка значений, как вы описали (blah = 0, blahblah = 1), в то время как избыточна, в порядке, так как, согласно спецификации C #

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

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

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

3 голосов
/ 14 июня 2011

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

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

1 голос
/ 06 августа 2014

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

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

0 голосов
/ 14 июня 2011

Перечисление «member» может иметь базовое «value». Наследование от int сообщает вам, какой тип будет принимать значение.

0 голосов
/ 14 июня 2011

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

0 голосов
/ 14 июня 2011

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

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

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