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的一个实例作为值。

待添加~~~~

原创粉丝点击