Tôi viết mã sau đây cho một số thử nghiệm, và đầu ra là ngoài mong đợi của tôi.Tại sao System.Enum không phải là một loại giá trị?
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
Vì vậy, tôi kiểm tra với Reflector thi hành Type.IsValueType tài sản. Đó là:
public bool get_IsValueType()
{
return this.IsValueTypeImpl();
}
protected virtual bool IsValueTypeImpl()
{
Type type = this;
return (((type != valueType) && (type != enumType)) && this.IsSubclassOf(valueType));
}
Trong MSDN, System.Enum được định nghĩa là:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Enum : ValueType, IComparable,
IFormattable, IConvertible
Vậy tại sao các IsValueType implentmented như vậy? Tại sao có một phát hiện cho enumType?
Cảm ơn Jon. Điều đó làm tôi bối rối. Hai câu hỏi tôi có. 1) Nếu System.ValueType không phải là một loại giá trị, sau đó làm thế nào để tìm hiểu xem một loại là loại giá trị hay không? 2) trong ví dụ trên, bạn có thể chỉ định một loại giá trị (Foo.x) cho một loại tham chiếu (Enum) ngầm, những gì về boxing và unboxing? – KFL