.NET Framework 入門筆記 -- 實值型別Value Type

如果你有一點程式基礎或學過資料結構,或許聽過 Call By Value 和 Call By Address,其實這與 .NET Framework 裡的「實值型別(Value Type)、參考型別 (Reference Type)」差不多意思。

實值型別的變數可以直接包含它自己的資料,而不是只記錄該資料位於記憶體的參考位址。Value Type的Instance是存在一個稱為「堆疊(Stack)」的記憶體區域。

一般Value Type有三種:
  • 內建型別
  • 使用者定義型別
  • 列舉
內建型別

內建的數值型別都屬於Value Type。(包含布林及日期)

常用Value Type:
  • Integer (正負21億)
  • UInteger (正42億)
  • Double
依MSDN的建議,整數以 Integer 及 UInteger 執行效率最佳,浮點數以 Double 執行效率最佳。

其他Value Type:
  • Char
  • Boolean
  • Date
比較特別的是日期,日期也是Value Type。

我們在指派Value Type變數之間的值時,資料會從其中一個變數複製到另外一個變數,儲存在堆疊中的兩個不同位置。

Dim a As Integer = 5
Dim b As Integer
' b = 5
b = a

b儲存的是a的值,也就是5,而非a的記憶體位置。

使用者定義型別

又名「結構(Structures)」,結構在大部分情況下,幾乎和類別一樣。結構是數個型別的整合,以便讓Program更容易處理相關資料。可參考我這篇「結構(Structure)關鍵字」。以效率而言,結構比類別有效率。

列舉

列舉是指擁有固定值的相關符號。你可以把列舉想像我們網頁上的「下拉式選擇」,例如,我們在選擇地址時,都會先選擇縣市,再來選鄉鎮…你能發現,這些選擇性的值都非常的固定,變動的機會非常的小,這就非常合適使用列舉。

' 注意,是回傳Integer
' 由0開始, Mr = 0, Ms = 1 ...
Enum Titles As Integer
    Mr
    Ms
    Mrs
    Dr
End Enum

使用也很簡單,就把舉列當成一般型別使用。

Dim t As Titles = Titles.Dr

' 3
Console.WriteLine(t)
' Dr.
Console.WriteLine("{0}.", t)

列舉的目的是為了簡化程式的撰寫及增進程式的閱讀性,讓你使用有意義的符號取代簡單的數值。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。