Are nullable types reference types?
When I declare an int
as nullable
int? i=null;
Does i
here become a reference type?
Solution 1:
No, a nullable is a struct. What is happening is that the nullable struct has two values:
- The value of the data type (
int
forint?
,DateTime
forDateTime?
, etc.). - A boolean value which tells if the data type value has been set. (
HasValue
is the property.)
When you set the value of the data type, the struct changes HasValue
to true.
Nullable types (C# Programming Guide)
Solution 2:
From Nullable Types (C# Programming Guide):
Nullable types are instances of the System.Nullable struct.
and
Nullable types represent value-type variables that can be assigned the value of null. You cannot create a nullable type based on a reference type. (Reference types already support the null value.)
So, no they're not reference types.
Solution 3:
Nullable types are neither value types nor reference types. They are more like value types, but have a few properties of reference types.
Naturally, nullable types may be set to null
. Furthermore, a nullable type cannot satisfy a generic struct
constraint. Also, when you box a nullable type with HasValue
equal to false
, you get a null
pointer instead of a boxed nullable type (a similar situation exists with unboxing).
These properties make nullable types non-value types, but they sure aren't reference types either. They are their own special nullable-value type.