Reputation: 34407
When I declare an int
as nullable
int? i=null;
Does i
here become a reference type?
Upvotes: 152
Views: 33442
Reputation: 115440
No, a nullable is a struct. What is happening is that the nullable struct has two values:
int
for int?
, DateTime
for DateTime?
, etc.).HasValue
is the property.)When you set the value of the data type, the struct changes HasValue
to true.
Nullable types (C# Programming Guide)
Upvotes: 155
Reputation: 137128
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.
Upvotes: 27
Reputation: 456417
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.
Upvotes: 19
Reputation: 16145
You shouldn't need to make a reference type a nullable type as you can pass null in its place.
Upvotes: 1
Reputation: 4064
Nullable types cannot be reference types.
http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx
Upvotes: 1
Reputation: 61589
No, the Nullable type is in fact a struct. The runtime will intelligently handle the setting of a null value for you, giving the appearance of a reference type, when it's not....
Upvotes: 6