共用方式為


Dim 陳述式 (Visual Basic)

更新:2007 年 11 月

為一個或多個變數宣告和配置儲存空間。

[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ] 
Dim [ WithEvents ] variablelist

參數

  • attributelist
    選擇項。請參閱屬性清單

  • accessmodifier
    選擇項。可以是下列其中一項:

    請參閱 Visual Basic 中的存取層級

  • Shared
    選擇項。請參閱 Shared

  • Shadows
    選擇項。請參閱 Shadows

  • Static
    選擇項。請參閱 Static

  • ReadOnly
    選擇項。請參閱 ReadOnly

  • WithEvents
    選擇項。指定這些物件變數是參考可以引發事件的類別執行個體。請參閱 WithEvents

  • variablelist
    必要項。這個陳述式中要宣告的變數清單。

    variable [ , variable ... ]

    每個 variable 都具有下列語法和參數:

    variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With { [ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]

    參數

    描述

    variablename

    必要項。變數名稱。請參閱宣告項目名稱

    boundslist

    選擇項。列出陣列變數每個維度 (Dimension) 的界限。

    New

    選擇項。在執行 Dim 陳述式時建立新的類別執行個體。

    datatype

    如果 Option Strict 為 On,則為必要項。變數的資料型別。

    With

    選擇項。引入物件初始設定式清單。

    propertyname

    選擇項。要建立執行個體的類別中某個屬性的名稱。

    propinitializer

    propertyname = 之後的必要項目。要評估並指派給屬性名稱的運算式。

    initializer

    如果未指定 New,則為選擇項。在建立時,評估並指派給變數的運算式。

備註

您應該宣告要在程式中使用的每一個變數,告知 Visual Basic 編譯器 (Compiler) 關於變數的資料型別和其他資訊 (例如哪些程式碼可以存取它)。下列範例會宣告變數存放 Integer 值。

Dim numberOfStudents As Integer

Dim 只能用於模組或程序層級。這表示變數的「宣告內容」(Declaration Context) 必須是類別、結構、模組、程序或區塊,且不可以是原始程式檔 (Source File)、命名空間 (Namespace) 或介面。如需詳細資訊,請參閱宣告內容和預設存取層級

如果 Option Explicit 為 On (預設值),則編譯器會要求您宣告所要使用的每一個變數。如果您設定為 Option Explicit Off,則每個未宣告的變數都會預設值為 Object 資料型別,而這可能不是您想要的結果。

您可以在 Dim 陳述式中指定每個變數的資料型別,還可以指定初始值。如果未指定,則 Visual Basic 會使用預設值。如需詳細資訊,請參閱這個說明網頁之「詳細資訊」下的「資料型別規則」和「預設值」。下列範例會宣告並初始化 String 變數。

Dim summary As String = "Summary of results" 

您可以在 Dim 陳述式中提供 accessmodifier,藉以指定哪些程式碼可以存取變數。如需詳細資訊,請參閱這個說明網頁之「詳細資訊」下的「修飾詞」和「存取層級」。

您可以宣告變數以儲存「陣列」(Array),陣列可以存放多個值。如需詳細資訊,請參閱這個說明網頁之「詳細資訊」下的「陣列規則」。如需陣列的詳細資訊,請參閱 Visual Basic 中的陣列。下列範例會宣告 Integer 陣列變數。

Dim days() As Integer 

一般而言,所有的 Dim 陳述式都應該置於會使用變數的程式碼區域的開頭。如需詳細資訊,請參閱這個說明網頁之「詳細資訊」下的「疑難排解」。

Visual Basic 2008 引入物件初始設定式,用來宣告具名和匿名型別的執行個體,以及區域型別推斷。如需詳細資訊,請參閱匿名型別物件初始設定式:具名和匿名型別區域型別推斷

詳細資訊

本節涵蓋下列概念的詳細資訊:

  • 宣告

  • 資料型別

  • 陣列

  • 行為

  • 疑難排解

宣告規則

  • 宣告內容:在模組層級宣告的變數 (不屬於任何程序) 即為「成員變數」(Member Variable) 或「欄位」(Field),屬於宣告它的類別、結構、或模組的成員。

    在程序層級宣告的變數即為「區域變數」(Local Variable),只能在宣告它的程序或區塊中使用。

  • 屬性:屬性只能套用到成員變數,不能套用到區域變數。屬性會提供資訊給組件的中繼資料 (Metadata),而這對於像區域變數的暫時儲存區而言不具意義。

  • 隱含使用 Dim:如果您指定了 Public、Protected、Friend、Protected Friend、Private、Shared、Shadows、Static、ReadOnly 或 WithEvents 修飾詞,則可以選擇省略 Dim 關鍵字。

    Public maximumAllowed As Double
    Protected Friend currentUserName As String
    Private salary As Decimal
    Static runningTotal As Integer
    

    在模組層級中,您無法使用 Static 修飾詞宣告成員變數。在程序層級中,您無法使用 Shared、Shadows、ReadOnly、WithEvents 或任何存取修飾詞來宣告區域變數。

  • WithEvents 變數:您只能在成員變數上指定 WithEvents,而不能在程序內的區域變數上指定它。

    如果指定 WithEvents,則變數的資料型別必須是特定的類別型別,而不是 Object。您無法以 WithEvents 宣告陣列。

    如需事件的詳細資訊,請參閱事件和事件處理常式

  • 多個變數:同一個宣告陳述式中可以宣告多個變數,方式便是為每個變數指定 variablename 部分,然後在每個陣列名稱後加上括號。變數之間以逗號 ( , ) 來分隔。

    Dim lastTime, nextTime, allTimes() As Date
    

資料型別規則

  • 資料型別:Dim 陳述式可以宣告變數的資料型別。您可以指定任何資料型別,或列舉型別、結構、類別或介面的名稱。

    Dim finished As Boolean
    Dim monitorBox As System.Windows.Forms.Form
    
  • 預設型別:如果不指定 datatype,則變數會使用 initializer 的資料型別。根據預設,如果既不指定 datatype,也不指定 initializer,則資料型別為 Object 資料型別。如果同時指定 datatype 和 initializer,則 initializer 的資料型別必須可以轉換為 datatype。

  • 不同型別:您可以為不同的變數指定不同的型別,方法便是為每個宣告的變數各使用一個 As 子句。或者,您可以使用通用的 As 子句,將數個變數宣告為同一個型別。每個變數都會使用 variablename 部分後遭遇之第一個 As 子句中指定的資料型別。

    Dim a, b, c As Single, x, y As Double, i As Integer
    ' a, b, and c are all Single; x and y are both Double
    
  • 初始設定:Dim 陳述式可以初始化 variablelist 中選取之變數的內容。若是實值型別,您可以使用 initializer 提供要指派給變數的運算式。運算式必須評估為可在編譯時期計算的常數。

    Dim quantity As Integer = 10
    Dim message As String = "Just started"
    

    若是參考型別,您可以使用 New 關鍵字,建立 datatype 指定之類別或結構的新執行個體。如果使用 New,則不需要使用 initializer 運算式。不過,您必須提供必要的引數給要在其中建立變數之類別的建構函式 (Constructor)。

    Dim bottomLabel As New System.Windows.Forms.Label
    

    如果以同一個 As 子句宣告一個以上的變數,則您無法為該變數群組提供 initializer。

陣列規則

  • 陣列變數:若要指定 variablelist 中的某個變數為陣列,請緊接著在它的 variablename 後面加上括號。如果陣列具有一個以上的維度,則必須在括號內加入逗號表示維度的數目。

    Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte
    

    一個陣列可擁有 1 到 32 個維度。

    如需詳細資訊,請參閱 Visual Basic 中的陣列

  • 陣列界限:您可以指定每個維度的下限和上限 (Upper Bound)。若要這麼做,請在括號內加入 boundslist。boundslist 會指定每個陣列的上限和選擇性地指定下限。不論您是否指定下限,下限一律為零。每個索引都可以是從零到其上限值的值。

    下列兩個陳述式的用法是相同的。每個陳述式都宣告具有 21 個 Integer 元素的陣列。當您存取陣列時,索引可以是從 0 到 20 的值。

    Dim totals(20) As Integer
    Dim totals(0 To 20) As Integer
    

    下列陳述式會宣告型別為 Double 的二維陣列。這個陣列共有 4 列 (3 + 1),每列各有 6 行 (5 + 1)。

    Dim matrix2(3, 5) As Double
    

    請注意,所謂的上限是指該索引可能的最高值,而不是該維度的長度 (長度是上限加一)。

  • 空白陣列界限:您可以將陣列宣告中的所有界限留空。如果這樣做,陣列會有您指定的維度數,但是還沒初始化。因此,它的值會是 Nothing,直到您至少初始化部分項目。Dim 陳述式必須指定所有維度的界限,或完全不指定。

    Dim messages() As String
    
  • 空白陣列:您可以使用 -1 宣告陣列維度的上限。這表示陣列是空的,但並非 Nothing,有些 Common Language Runtime 函式需要有這種區別。但是,Visual Basic 程式碼無法存取這類陣列。如果您嘗試這樣做,執行時就會發生 IndexOutOfRangeException 錯誤。如需詳細資訊,請參閱 HOW TO:建立沒有元素的陣列

  • 陣列初始設定:您可以用大括號 ({}) 括住初始值,藉以初始化陣列的值。

    Dim longArray() As Long = {0, 1, 2, 3}
    

    若是多維陣列,則每個個別維度的初始設定會以外層維度中的大括號括住。元素是以資料列為主要順序來指定。

    Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}
    

行為

  • 預設值:如果不為變數指定 initializer,則 Visual Basic 會將變數初始化為資料型別的預設值。下表顯示預設初始設定值。

    資料型別

    預設值

    所有數字型別 (包括 Byte 和 SByte)

    0

    Char

    二進位 0

    所有參考型別 (包括 Object、String 和所有陣列)

    Nothing

    Boolean

    False

    Date

    1 年 1 月 1 日的 12:00 AM (01/01/0001 12:00:00 AM)

    結構的每個項目都會被視為個別的變數加以初始化。如果您宣告陣列的長度,但未初始化陣列的元素,則每個元素都會被視為個別的變數加以初始化。

  • 存取層級:程序外的類別和模組成員變數預設為私用存取,而結構成員變數預設為公用存取。您可以使用存取修飾詞調整存取層級。您不能對程序內的區域變數使用存取修飾詞。

  • 範圍:區域變數的範圍只限於所在的程序或區塊。成員變數的範圍則廣及整個類別、結構或模組。

  • 限定性條件:類別、結構或模組外的程式碼必須以該類別、結構或模組的名稱限定成員變數的名稱。程序或區塊外的程式碼無法參考該程序或區塊內的區域變數。

  • 存留期 (Lifetime):Static 區域變數的存留期比宣告它的程序長。變數的存留期範圍取決於程序的宣告位置和它是否為 Shared。

    程序宣告

    初始化變數

    變數不再存在

    在模組中

    第一次呼叫程序時

    程式停止執行時

    在類別或結構中,Shared

    第一次以特定執行個體或以類別或結構本身呼叫程序時

    程式停止執行時

    在類別或結構中,不是 Shared

    第一次以特定執行個體呼叫程序時

    當執行個體釋出以進行記憶體回收 (GC) 時

疑難排解

  • 執行順序:Dim 陳述式本身並非執行陳述式。不過,如果它初始化一個或多個變數,初始設定就會被視為指派陳述式 (Assignment Statement)。這表示變數的值會經歷下列步驟:

    1. 第一次進入宣告變數的程式碼項目時,Visual Basic 會將它初始化為資料型別的預設值。

    2. 當執行到變數的 Dim 陳述式時,Visual Basic 會將它初始化為 Dim 陳述式中提供的值。

    3. 當執行回變數的 Dim 陳述式時,Visual Basic 會再次將它設為 Dim 陳述式中提供的值。

    當您使用 Dim 陳述式初始化變數時,這具有下列意涵:

    • 如果您在執行 Dim 陳述式之前就使用變數,則該變數的值將是資料型別的預設值,而不是 Dim 陳述式中提供的值。

    • 如果永遠執行不到 Dim 陳述式,則該變數永遠不會初始化為 Dim 陳述式中提供的值。

    • 如果您變更值之後又返回 Dim 陳述式,則變更後的值會以 Dim 陳述式中提供的值取代。

    如果您將所有 Dim 陳述式置於其所在程式碼區域 (例如模組或程序) 的開頭,則程式碼會依您預期的方式初始化這些陳述式。

範例

下列範例會使用 Dim 陳述式搭配各種選項來宣告變數。

' The following statement declares and initializes a Long variable.
Dim startingAmount As Long = 500
' The following statement declares a variable that refers to a Button 
' object, creates a new Button object, and assigns it to the variable.
Dim switchButton As New System.Windows.Forms.Button
' The following statement declares a variable that can only be 
' accessed by code in the same class, structure, or module.
Private homeTelephone As String = ""
' The following statement declares a local variable that always retains
' its value, even after its procedure returns to the calling code.
Static totalSales As Double
' The following statement declares a variable that refers to an array.
Dim highTemperature(31) As Integer
' The following statement declares and initializes an array variable 
' that holds 4 Boolean check values.
Dim checkValues() As Boolean = {False, False, True, False}

請參閱

工作

HOW TO:宣告陣列變數

HOW TO:宣告陣列變數

HOW TO:宣告匿名型別的執行個體

HOW TO:使用物件初始設定式宣告物件

概念

Visual Basic 中的變數宣告

物件初始設定式:具名和匿名型別

匿名型別

物件初始設定式:具名和匿名型別

區域型別推斷

參考

Const 陳述式 (Visual Basic)

ReDim 陳述式 (Visual Basic)

Option Explicit 陳述式 (Visual Basic)