C#可空类型(Nullable Types)


在讨论可空类型前,先回顾一下.NET 对于类型的定义: 
".NET 中类型分为值类型和引用类型,值类型不能为空,引用类型可为空"; 
在这样的前提下,所有值类型都赋予了一个初始值例如:int i;(初始为0); 
由于数据库中出现的对应的值类型可为空,这样就出现了两者不能对应的问题。 
所有在C# 2.0中引入了可为空的值类型,强调一点可空类型对于是值类型而言。 
实现方法如下: 

int  i = 3;//一个值类型 
int? k = 3;//一个可为空的值类型(简称可空类型) 
int  m = null;//错误 
int? j = null;//正确 

从上面的例子我们可以看到在值类型后加上?可以定义一个可为空的值类型。 
这里我们再深入考虑下面两个问题: 
1,可空类型是否是一种新的.NET数据类型呢? 
2,可空类型和一般值类型有哪些区别呢? 
回答如下; 
1,可空类型是否是一种新的.NET数据类型呢? 

可空类型不是一种新的.NET数据类型。 
实际上空类型是定义在.NET库中的一种范型类System.Nullable<T>,其中T就是可替换的值类型。 
int? k = 3;同样可以写作System.Nullable<int> k = 3; 
其中的操作是通过该类的运算符重载实现的。 
2,可空类型和一般值类型有哪些区别呢? 
主要区别是空类型并不是一种真正的类型,而是一个对象。 
例如; 
int? j = 3; 
int k = 3; 
在反编译器(ildasm.exe)下面的状态是 
[mscorlib]System.Nullable`1<int32> i 
[1] int32 k 
并且同时对于执行了Nullable默认构造函数 
instance void valuetype [mscorlib]System.Nullable`1<int32>::.ctor(!0) 
.NET 2.0在设计上面十分精巧,兼顾了向下兼容性同时也很好的运用抽象的特点处理好了可为空的值类型的实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值