Я нашел это повсюду в этом коде:
public enum Blah: int
{
blah = 0,
blahblah = 1
}
Зачем ему нужно наследовать от int? Нужно ли это когда-либо?
Я нашел это повсюду в этом коде:
public enum Blah: int
{
blah = 0,
blahblah = 1
}
Зачем ему нужно наследовать от int? Нужно ли это когда-либо?
В соответствии с документацией:
Каждый тип перечисления имеет базовый тип, который может быть любым интегральный тип, кроме char. По умолчанию базовый тип перечисления Элементы - int.
Итак, нет, вам не нужно использовать int. Он будет работать с любым интегральным типом. Если вы не укажете, что он будет использовать int по умолчанию, и этот тип будет использоваться для хранения перечисления в памяти.
Перечисления неявно поддерживаются целыми числами. : int
просто возвращает значение по умолчанию, как void M();
vs. private void M();
.
Вы также можете создавать перечисления, которые поддерживаются другими типами межстрановых, например enum GiantEnum : long
.
Вам не нужно, это подразумевается. Согласно MSDN:
Перечисление представляет собой набор именованных констант, базовым типом которых является любой интегральный тип, кроме Char. Если базовый тип явно не объявлен, используется Int32. Enum является базовым классом для всех перечислений в .NET Framework.
Это означает, что вы можете использовать byte
, sbyte
, ushort
, int
, uint
, long
или ulong
.
Также, установив значения так, как вы описали (blah = 0, blahblah = 1), в то время как избыточно, это нормально, поскольку, согласно С# Спецификация
Если объявление элемента перечисления не имеет инициализатора, его связанное значение устанавливается неявно, как показано ниже:
• Если элемент перечисления является первым членом перечисления, объявленным в типе перечисления, его связанное значение равно нулю.
• В противном случае связанное значение элемента перечисления получается путем увеличения связанного значения элемента, предшествующего перечислению, предшествующего элементу, на единицу. Это увеличенное значение должно быть в диапазоне значений, которые могут быть представлены базовым типом, в противном случае возникает ошибка времени компиляции.
int
по умолчанию является типом любого enum
. Это не нужно явно указывать.
Это более полезно, если вы хотите использовать что-то еще (byte
, long
и друзей).
В большинстве случаев мне неинтересно, есть ли подпись или без знака, или сколько битов она имеет, поэтому я просто позволяю системе использовать ее по умолчанию, это int.
Однако есть моменты, когда мне все равно, что перечисление представляет собой подписанный 32-битный int, и тогда хорошо дать понять, что мне все равно. Я бы ожидал, что комментарий также прописал почему мне все равно.
Вы не нуждаетесь, чтобы наследовать от int
, но по умолчанию это делает. Вы можете наследовать от других интегральных типов (byte
, long
и т.д.), Если хотите. Например, если вы хотите сохранить память или пространство столбцов в БД.
он дает ему числовое значение, то есть все, насколько я знаю
Вам не нужно наследовать, поскольку базовый тип 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.
"член" перечисления может иметь базовое "значение". Наследование из int указывает вам, какой тип будет стоить.