Escribo el siguiente código para algunas pruebas, y la salida está fuera de mis expectativas.¿Por qué System.Enum no es un tipo de valor?
public enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
Console.WriteLine(typeof(System.Enum).IsValueType.ToString()); // False
Console.WriteLine(typeof(Days).IsValueType.ToString()); // True
Así que consulte con reflector de la aplicación de la propiedadType.IsValueType. Que es:
public bool get_IsValueType()
{
return this.IsValueTypeImpl();
}
protected virtual bool IsValueTypeImpl()
{
Type type = this;
return (((type != valueType) && (type != enumType)) && this.IsSubclassOf(valueType));
}
En MSDN, System.Enum se define como:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Enum : ValueType, IComparable,
IFormattable, IConvertible
Entonces por qué el IsValueType implentmented de esa manera? ¿Por qué hay una detección para enumType?
Gracias Jon. Eso me confunde. Dos preguntas que tengo 1) Si System.ValueType no es un tipo de valor, ¿cómo averiguar si un tipo es de tipo de valor o no? 2) en el ejemplo anterior, puede asignar un tipo de valor (Foo.x) a un tipo de referencia (Enum) implícitamente, ¿qué pasa con el boxeo y el desempaquetado? – KFL