可空类型(C Sharp)

来源:互联网 发布:百度一下淘宝商城 编辑:程序博客网 时间:2024/06/05 16:53

1.      Int ?  num = null;

2.      可空类型的来源

3.      可空类型的定义:

 

代码参见文件夹里的Demo

代码的运行结果:

介绍两个方法:

1.      Nullable<T>.GetValueOrDefault方法(不带参数)

其返回值:

自己理解的返回值:

返回当前值或者默认值0。

2.      Nullable<T>.GetValueOrDefault(T)方法(带参数)

 

其返回值:

 

 

自己理解的返回值:

返回当前值或者默认值T

3.      Nullable<T>.GetHashCode方法

 


返回值:


如果HasValue的属性为真,则返回对象的哈希代码。如果为假的,则返回0。

 

4.      可空类型的装箱和拆箱

值类型存在装箱和拆箱的过程,可空类型也属于值类型,从而也有装箱和拆箱的过程的。

装箱指的的从值类型到引用类型的过程,拆箱当然也就是装箱的反过程,即从引用类型到值类型的过程。

(这里进一步解释下我理解的装箱和拆箱,首先.Net中值类型是分配在堆栈上的,然而引用类型分配在托管堆上,装箱过程就是把值类型的值从推栈上拷贝到托管堆上,然后推栈上存储的是对托管堆上拷贝值的引用,然而拆箱就是把托管堆上的值拷贝到堆栈上.简单一句话概况,装箱和拆箱就是一个值的拷贝的一个过程,就想搬家一样,把东西从一个地方搬到另一个地方,对于深入的理解,大家可以参考下园中的博文.)。

 

5.   可空类型的装箱和拆箱

当把一个可空类型赋给一个引用类型变量时,此时CLR 会对可空类型(Nullable<T>)对象进行装箱处理,首先CLR会检测可空类型是否为null,如果为null,CLR则不进行实际的装箱操作(因为null可以直接赋给一个引用类型变量),如果不为null,CLR会从可空类型对象中获取值,并对该值进行装箱(这个过程就是值类型的装箱过程了。),当把一个已装箱的值类型赋给一个可空类型变量时,此时CLR会对已装箱的值类型进行拆箱处理,如果已装箱值类型的引用为null,此时CLR会把可空类型设为null。

代码详见文件里的Demo1:

主函数如下:

 

子函数如下:

定义可空类型的变量:

 

获得可空对象的类型:

 

将可空类型装箱操作:


装箱后的引用类型的类型:(依然是整形32bit

 

拆箱为非可空变量:


拆箱为可空变量:

装箱为一个没有值的可空类型的对象:

 

拆箱为可空变量:

6.      程序运行结果:

 

 

0 0
原创粉丝点击