C#中可空值类型的一些细节
来源:互联网 发布:图像特征检测算法 编辑:程序博客网 时间:2024/05/21 21:40
可空值类型的几种实现:
模式1:Magic Number 魔值
该模式是牺牲一个值来专门表示空值,此模式的优势就是仅仅牺牲一个值,不会浪费任何内存,并且也不需要添加任何新的类型。该模式是IEE-754 浮点类型中所使用的,如 NaN。
模式2:引用类型包装
该模式可采取两种形式。较简单的形式是直接使用Object作为变量类型,并根据需要进行装箱、拆箱。较复杂的形式是假定值类型A可空,就可为其准备一个新的引用类型,该引用类型中包含A的一个实例。
该模式虽然可以很直接的表示出NULL这种语义,但是他们都要求在heap上创建对象,显然的,速度相对分配在栈上慢一点,而且还有垃圾回收开销,装箱、拆箱过程带来的开销。
模式3:额外的Bool值标志
该模式以一个值类型的值来表示,其包含一个bool值表示是否为空和一个非空模式下的值类型。实现就是将“值和标志”封装在一另一个值类型中,如
Struct NullableVal{ public: int Value{set;get;} bool HasValue{set;get;} }
模式3 就是C# 2.0以后所采用的模式。
使用方法
有两种声明方法:
Nullable val;
T? val;
以上都仍为值类型。
第二种就是第一种的一种语法糖而已,两者并无任何区别,产生的IL代码都是一样的。
其构造函数有2个
1、默认构造函数,创建一个默认为NULL的对象(可空上的无,而不是引用的空对象)。
2、接受T的一个实例作为值。
待添加~~~~
阅读全文
0 0
- C#中可空值类型的一些细节
- C#中的正则表达式的一些细节
- 一些C#小细节的碎碎念
- 关于C++的一些细节[三:复合类型]
- java中的String类型的存储原理和一些细节
- 关于C#中的DateTime类型的细节问题
- 关于C#中的DateTime类型的细节问题
- C# 在引用类型做为参数时的一个细节
- 关于C#中的DateTime类型的细节问题
- 关于C#中的DateTime类型的细节问题
- 一些容易被初学者忽视的C#语言细节
- C#一些相似类型的区别
- C# 类型转换的一些简单方法
- document_getElementById的一些细节
- JS的一些细节
- 一些简单的细节
- dll的一些细节
- C++的一些细节
- std::map 自定义类做为key时 find operator< 的正确写法
- 感知机中损失函数1/||w||可以不考虑(或直接忽略)的原因
- Delphi控件的安装方法
- HDU 4701 Game 递推+博弈
- 1073 家族
- C#中可空值类型的一些细节
- iOS-数据结构
- hdu3338 Kakuro Extension(较难,好题) [最大流][数和]神奇最大流行进列出
- vb.net 教程 3-11 窗体控件综合编程 2-2
- 链表中倒数第k个结点
- iOS 输入金钱数目的TextField
- RabbitMQ第二课--java demo
- 免费照片、图片、图标、平铺背景网址收藏(来源css3 manual一书第三版289页)
- 第一篇