欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > C# >内容正文

C#

C#可空类型(Nullable Types)

发布时间:2024/4/15 C# 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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在设计上面十分精巧,兼顾了向下兼容性同时也很好的运用抽象的特点处理好了可为空的值类型的实现。

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

总结

以上是生活随笔为你收集整理的C#可空类型(Nullable Types)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。