A reference type is storeed as a reference (like a pointer) to an object instance.
null
means a reference that isn't pointing to an instance of an object.
Value types are stored as the values themselves, without any references.
Therefore, it doesn't make sense to have a null
value type—the value type by definition contains a value.
Nullable<T>
is a value type with a HasValue
flag that can be false
to indicate that there is no value. It still has a value (when HasValue
is false
, Value
is default(T)
), but the HasValue
flag tells you to ignore the value.
It has nothing to do with null
, except that the CLR automatically unboxes null
boxed values to a Nullable<T>
with HasValue
set to false
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…