博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#可空类型(Nullable Types)
阅读量:5066 次
发布时间:2019-06-12

本文共 906 字,大约阅读时间需要 3 分钟。

在讨论可空类型前,先回顾一下.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在设计上面十分精巧,兼顾了向下兼容性同时也很好的运用抽象的特点处理好了可为空的值类型的实现。

转载于:https://www.cnblogs.com/fanyong/archive/2012/11/01/2750258.html

你可能感兴趣的文章
ABAP工作区,内表,标题行的定义和区别
查看>>
《xxx重大需求征集系统的》可用性和可修改性战术分析
查看>>
Python 中 创建类方法为什么要加self
查看>>
关于indexOf的使用
查看>>
【转】JS生成 UUID的四种方法
查看>>
英语单词
查看>>
centos6.8下安装matlab2009(图片转帖)
查看>>
Mongo自动备份
查看>>
求助大神!怎样批量删除数据库表中某个字段中同样的一段字符!
查看>>
VMWARE虚拟机无法访问的三种方法分析
查看>>
enq: SQ - contention
查看>>
cer证书签名验证
查看>>
ant 安装
查看>>
新手Python第一天(接触)
查看>>
vue路由动态加载
查看>>
iOS中ARC内部原理
查看>>
【bzoj1029】[JSOI2007]建筑抢修
查看>>
synchronized
查看>>
你不得不了解的应用容器引擎---Docker
查看>>
easyui datagrid 弹出页面会出现两个上下滚动条处理办法!
查看>>