问题
When I declare an int
as nullable
int? i=null;
Does i
here become a reference type?
回答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)
回答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.
回答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.
回答4:
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....
回答5:
Nullable types cannot be reference types.
http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx
回答6:
You shouldn't need to make a reference type a nullable type as you can pass null in its place.
来源:https://stackoverflow.com/questions/3149173/are-nullable-types-reference-types