VB.NET中的值類型、引用類型與Nullable類型

Creative Commons License

 

VB.NET中有三種數據類型:值類型、引用類型與Nullable類型。本文將從條件判斷入手,討論三者之間的區別。

值類型

繼承自System.ValueType的類通常被稱爲值類型,包括日期與數字。日期型對象的默認值爲“0001-01-01 00:00:00”,而數字型對象的默認值爲“0”。有兩種方法指定值類型的默認值:不設值或設置爲Nothing。如:

上面的兩個變量值均爲“0001-01-01 00:00:00”。將Nothing設置給值類型變量是爲其指定默認值,這一點的確有點難以理解,不過確是如此。如下例:

判斷值類型變量是否相等只能使用“=”。如:

引用類型

與值類型對應的是引用類型,字符或字符串類型均爲引用類型。引用類型的變量保存了對象的地址,將此類變量設置爲Nothing時,其指向的就是空地址。

除了使用“=”進行判斷外,引用類型的變量還可以通過“Is”進行判斷。“ = ”用於比較兩個對象的內容是否相同;“Is”則用於比較兩個引用是否指向同一個對象。下面的例子可以證明這一點:

Nullable類型

如果想要讓值類型的變量具有引用類型的特徵,我們可以藉助於Nullable類型。如下例:

Nullable類型是一種介於值類型與引用類型之間的類型,我們可以使用“Is”判斷Nullable變量是否爲Nothing,但不能利用“Is”判斷兩個Nullable變量是否引用同一個對象;另一方面我們也可以利用“=”判斷兩個對象的內容是否相同,但某些場合對Nullable變量的判斷不會返回我們熟悉的True或False。如下例:

通過查看內存可以知道,上例中 (Tmp = 1) 或 (Tmp <> 1) 返回的都是Nothing,而不是True或者False。這種現象將直接導致誤判,如何避免這種現象發生呢?
請使用Nullable類提供的靜態方法對Nullable變量進行比較。 上述代碼可以如下改造:

總而言之,VB.NET的三種數據類型各有其用法,應特別注意Nullable類型的用法。

 

© 醜小鴨技術專欄 | 查看原文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章