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