Value Types and Reference Types

Visual Basic 中有兩種型別:參考型別和實值型別。 參考型別的變數會儲存對其資料 (物件) 的參考,而實值型別的變數則會直接包含其資料。 使用參考類型時,這兩種變數可以參考相同的物件,因此對其中一個變數進行的作業可能會影響另一個變數所參考的物件。 使用實值類型時,每個變數都有自己的資料複本,因此在某一個變數上進行的作業不可能會影響其他變數 (但參數上的 ByRef 修飾元除外)。

實值型別

如果資料類型在自己的記憶體配置中保存資料,則資料類型是實值類型 。 實值類型包括下列各項:

  • 所有數值資料類型

  • BooleanCharDate

  • 所有結構,即使其成員是參考型別

  • 基礎類型列舉,因為其基礎類型一律為 SByteShortIntegerLongByteUShortUIntegerULong

每個結構都是實值型別,即使其中包含參考型別成員也一樣。 因此,.NET Framework 結構會實作 CharInteger 等實值型別。

您可以使用保留關鍵字來宣告實值類型,例如 Decimal。 您也可以使用 New 關鍵字來初始化實值類型。 如果類型具有採用參數的建構函式,這會特別有用。 其中一個範例是 Decimal(Int32, Int32, Int32, Boolean, Byte) 建構函式,該函式會從提供的元件建置新的 Decimal 值。

參考型別

參考型別儲存其資料的參考。 參考型別包括下列各項:

  • String

  • 所有陣列,即使其元素是實值類型

  • 類別類型,例如 Form

  • 委派

類別是「參考型別」。 請注意,每個陣列都是參考型別,即使陣列的成員是實值型別也一樣。

由於每個參考型別都代表基礎 .NET Framework 類別,因此當您將其初始化時,必須使用 New Operator 關鍵字。 下列陳述式會初始化陣列。

Dim totals() As Single = New Single(8) {}  

不是類型的元素

下列程式設計元素不符合類型資格,因為您無法將其中任何項目指定為宣告元素的資料類型:

  • 命名空間

  • 單元

  • 事件

  • 屬性和程序

  • 變數、常數和欄位

使用物件資料類型

您可以將參考型別或實值型別指派給資料類型的 Object 變數。 Object 變數一律會保存資料的參考,絕不會保存資料本身。 不過,如果您將實值類型指派給 Object 變數,其行為就如同該變數保留自己的資料一樣。 如需詳細資訊,請參閱物件資料類型

您可以藉由將 Object 變數傳遞至 Microsoft.VisualBasic 命名空間 Information 類別中的 IsReference 方法,來找出變數是做為參考型別還是實值型別。 如果 Object 變數的內容代表參考型別,則 Information.IsReference 會傳回 True

另請參閱