Как мы знаем, System.Enum является базой для всех перечислений, но мне интересно, почему отражение говорит о том, что оно не является перечислением?
Console.WriteLine(typeof(System.Enum).IsEnum) // says it is false
Я не могу понять логику, поэтому System.Enum не является перечислением, но все, что происходит от него, это перечисление?
У меня был второй шок, когда я увидел в msdn, что это класс
public abstract class Enum : ValueType,
IComparable, IFormattable, IConvertible
Итак, Enum - это класс, однако это тип значения (полученный из специального класса ValueType
, который делает перечисление как тип значения) и является базовым для всех перечислений, но не является перечислением:)
Ну, если вы не считаете, что Enum является классом, проверьте typeof(System.Enum).IsClass
Возникает вопрос: есть ли причина, по которой IsEnum
является ложным, а IsClass
- true для типа, который является типом значений и является базовым для всех перечислений?
enum AAA { }
typeof(System.Enum).IsClass //True
typeof(System.Enum).IsEnum //False
typeof(AAA).IsClass //False
typeof(AAA).IsEnum //True
typeof(AAA).BaseType //System.Enum