可空类型(C Sharp)

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值