Una conseguenza interessante del fatto che "System.Enum is the only reference type that extends System.ValueType" (Brad Abrams, SLAR, p. 174) è quella che typeof(System.Enum).IsClass ritorna false! E' quindi l'unico tipo t all'interno del Framework per il quale l'espressione t.IsAbstract && !t.IsClass && !t.IsInterface è true!
Tutto ciò si spiega guardando l'ultima parte del codice (quella sottolineata) della proprietà IsClass:
public bool IsClass
{
get
{
return ((GetAttributeFlagsImpl() & TypeAttributes.ClassSemanticsMask) == TypeAttributes.Class && !IsSubclassOf(Type.valueType));
}
}
dove valueType è:
private static readonly Type valueType = typeof(System.ValueType);
La conclusione? La conclusione è che esiste una classe che non è classe :-) Meno male che è soltanto una. :-)