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在設計上面十分精巧,兼顧了向下兼容性同時也很好的運用抽象的特點處理好了可為空的值類型的實現。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com