分析 C# 2.0 新特性  -- 空类型(Nullable Types)
在讨论C# 2.0 空类型前,先回顾一下.NET 1.0和.NET 1.1对于类型有下面这样的定义:
".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/dragonlhf/archive/2007/11/13/958128.html

分析 C# 2.0 新特性 -- 空类型(Nullable Types)相关推荐

  1. 分析 C# 2.0 新特性 -- 范型(Generics)

    分析 C# 2.0 新特性 -- 范型(Generics) 作者:梁振[MS-MVP]   范型是提高面向对象程序多态性设计衍生的. 1,C# 多态性设计回顾和展望 在引入范型这个概念之前,回顾一下1 ...

  2. [翻译] C# 8.0 新特性

    原文: Building C# 8.0 [译注:原文主标题如此,但内容大部分为新特性介绍,所以意译标题为 "C# 8.0 新特性"] C# 的下一个主要版本是 8.0.我们已经为它 ...

  3. Android6.0新特性

    1.大量漂亮流畅的动画 安卓6.0系统增加了大量漂亮的过度动画,可以从视觉上减少卡顿感,给用户带来流畅的体验.说到过渡动画,以前可是苹果手机的拿手好戏,现在安卓大有赶超iOS的趋势. 2.相机新增专业 ...

  4. [转]C# 2.0新特性与C# 3.5新特性

    C# 2.0新特性与C# 3.5新特性 一.C# 2.0 新特性: 1.泛型List<MyObject> obj_list=new List(); obj_list.Add(new MyO ...

  5. WCF4.0新特性体验(3):标准终结点(Standard Endpoints)

    今天在WCF4.0新特性体验第3节,我们介绍WCF4.0里的标准终结点概念,也就是Standard Endpoints. WCF4.0提供了那些标准终结点?他们有什么作用?如何使用标准终结点?如何该表 ...

  6. C#6.0,C#7.0新特性

    C#6.0,C#7.0新特性 C#6.0新特性 Auto-Property enhancements(自动属性增强) Read-only auto-properties (真正的只读属性) Auto- ...

  7. WCF4.0新特性体验(6):路由服务Routing Service(下)

    紧接前文WCF4.0新特性体验(5):路由服务Routing Service(上).今天我们介绍WCF4.0消息路由的实现机制,然后会讲解路由服务的实现过程. [4]WCF与路由服务: 其实在介绍WC ...

  8. 【Servlet3.0新特性】第03节_文件上传

    这是一个Web Project 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web- ...

  9. python-3.8.0 新特性之赋值表达式

    [python-3.8.0 新特性之赋值表达式] 赋值表达式的语法是这样的" name := expression ",形式上看和赋值语句 " = " 差不多, ...

最新文章

  1. iOS 使用钥匙串将用户密码存入本地
  2. pandas新字段(数据列)生成、使用np.where或者apply lambda函数结合if else生成新的字段,详解及实战
  3. webpack 打包vue,组件不显示
  4. leetcode 岛屿的个数
  5. python api数据接口_python写数据api接口
  6. python内点法_python射线法判断一个点在图形区域内外
  7. 力压微信成 App Store 榜第一,子弹短信能否避免火一把就“死”?| 畅言
  8. 创编游戏计算机课反思,游戏课创编设计(王秀英)
  9. python生成可执行exe控制Microsip自动填写号码并拨打
  10. 浅谈 *.axf,*.bin,*.hex 文件
  11. 编译原理支配树部分名词介绍
  12. ctab提取dna流程图_CTAB法提取植物DNA原理以及步骤
  13. 如何设置分布式IO模块Profinet的地址
  14. python_6_17
  15. 网易再次下注10亿元,能在视频领域“砸”出水花吗
  16. microbit python积木编程_TurnipBit—MicroPython开发板:从积木式编程语言开始学做小小创客...
  17. 关于Ubuntu18.04安装后没有gcc、make、网卡驱动的问题总结以及解决办法
  18. 鸿蒙系统和小米系统区别,华为鸿蒙系统对比小米MIUI12,到底谁更强!
  19. 10个免费的电子书搜索下载网站
  20. html交叉轴排列,10-flex 项目交叉轴单独对齐

热门文章

  1. 深入探究Spark -- Cluster Manger部署(最常用为YARN实现Task Scheduler)
  2. bzoj 4517: [Sdoi2016]排列计数
  3. hdu 2064汉诺塔III 递推
  4. 推荐:iReaper - MSDN中文Webcast下载程序
  5. [摘抄]MySQL数据库系统的常规管理介绍
  6. 在.Net如何制作自定义的快捷方式(转)
  7. PYTHON自动化Day4-交换变量,字符串方法,拷贝,集合,文件,文件指针
  8. DataGridView动态添加新行的两种方法
  9. stanford corenlp的TokensRegex
  10. GCPC2014 C Bounty Hunter