【发布时间】:2014-04-10 11:13:15
【问题描述】:
我们知道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 为真有什么理由吗?
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
【问题讨论】:
-
.NET 没有什么像您认为的那样简单!