共用方式為


Visual Basic 中的語句

Visual Basic 中的語句是完整的指示。 它可以包含關鍵詞、運算符、變數、常數和表達式。 每個語句都屬於下列其中一個類別:

  • 宣告語句,其會命名變數、常數或程式,也可以指定數據類型。

  • 可起始動作的可執行檔語句。 這些語句可以呼叫方法或函式,而且可以迴圈或分支程式代碼區塊。 可執行語句包括 Assignment 語句,可將值或表示式指派給變數或常數。

本主題描述每個類別。 此外,本主題描述如何在單行上結合多個語句,以及如何在多行上繼續語句。

宣告陳述式

您可以使用宣告語句來命名和定義程式、變數、屬性、陣列和常數。 當您宣告程式設計專案時,您也可以定義其資料類型、存取層級和範圍。 如需詳細資訊,請參閱 宣告元素特性

下列範例包含三個宣告。

Public Sub ApplyFormat()
    Const limit As Integer = 33
    Dim thisWidget As New widget
    ' Insert code to implement the procedure.
End Sub

第一個宣告是 Sub 語句。 連同其比對 End Sub 語句,它會宣告名為 applyFormat的程式。 它還指定 applyFormatPublic,這意味著任何可以參考它的程式代碼都可以呼叫它。

第二個宣告是 Const 語句,它會宣告常數 limit,並 Integer 指定數據類型和值為 33。

第三個 Dim 語句宣告了變數 thisWidget。 數據類型是特定物件,也就是從 類別建立的物件 Widget 。 您可以將變數宣告為任何基本數據類型,或是您所使用之應用程式中公開的任何物件類型。

初始值

當包含宣告語句的程式代碼執行時,Visual Basic 會保留宣告專案所需的記憶體。 如果專案保留值,Visual Basic 會將它初始化為其數據類型的預設值。 如需詳細資訊,請參閱「Dim 語句」中的「行為」。

您可以將初始值指派給變數做為其宣告的一部分,如下列範例所示。

Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.

如果變數是物件變數,您可以在使用 New Operator 關鍵詞宣告該變數時明確建立其類別的實例,如下列範例所示。

Dim f As New FileInfo("filename")

請注意,在宣告語句中指定的初始值不會指派給變數,直到執行到達其宣告語句為止。 在那段時間之前,變數會包含其數據類型的預設值。

可執行語句

可執行語句會執行動作。 它可以呼叫程式、分支至程序代碼中的另一個位置、循環執行數個語句,或評估表達式。 指派語句是可執行語句的特殊案例。

下列範例會使用 If...Then...Else 控件結構,根據變數的值來執行不同的程式代碼區塊。 在每個程式代碼區塊內,迴圈 For...Next 會執行指定的次數。

Public Sub StartWidget(ByVal aWidget As widget,
    ByVal clockwise As Boolean, ByVal revolutions As Integer)
    Dim counter As Integer
    If clockwise = True Then
        For counter = 1 To revolutions
            aWidget.SpinClockwise()
        Next counter
    Else
        For counter = 1 To revolutions
            aWidget.SpinCounterClockwise()
        Next counter
    End If
End Sub

If上述範例中的語句會檢查 參數 clockwise的值。 如果值為 True,它會呼叫 spinClockwiseaWidget方法。 如果值為 False,它會呼叫 spinCounterClockwiseaWidget方法。 控制元件 If...Then...Else 結構結尾為 End If

每個區塊內的For...Next迴圈都會呼叫相應的方法,次數等於revolutions參數的值。

工作分派語句

Assignment 語句會執行指派作業,其包含取得指派運算符 (=) 右邊的值,並將其儲存在左邊的 元素中,如下列範例所示。

v = 42

在上述範例中,指派語句會將常值 42 儲存在 變數 v中。

合格的程式設計元素

指派運算子左邊的程式設計項目必須能夠接受和儲存值。 這表示它必須是非 ReadOnly 的變數或屬性,或必須是陣列元素。 在賦值語句中,這類元素有時稱為 左值,意指「左值」。

指派運算子右邊的值是由表達式所產生,它可以由常值、常數、變數、屬性、陣列元素、其他運算式或函數調用的任何組合所組成。 下列範例說明這點。

x = y + z + FindResult(3)

上述範例將變數y中的值加到變數z中的值,然後再加上函式findResult呼叫所傳回的值。 然後,這個表達式的總值會儲存在 變數 x中。

指派語句中的數據類型

除了數值之外,指派運算符也可以指派 String 值,如下列範例所示。

Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.

您也可以使用Boolean常值或Boolean表達式來指派Boolean值,如下列範例所示。

Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.

同樣地,您可以將適當的值指派給CharDateObject資料類型的程式元素。 您也可以將物件實例指派給宣告為其所屬類別的元素。

複合指派語句

複合指派語句 先在表達式上執行作業,再將它指派給程式設計專案。 下列範例說明下列其中一個運算符, +=其會依右邊表達式的值,遞增運算符左邊的變數值。

n += 1

上述範例會將 1 新增至 的值 n,然後將新值儲存在 中 n。 它是以下语句的簡寫:

n = n + 1

您可以使用此類型的運算符來執行各種複合指派作業。 如需這些運算子的清單及其詳細資訊,請參閱 指派運算元

串連指派運算符 (&=) 適用於將字串新增至現有字串結尾,如下列範例所示。

Dim q As String = "Sample "
q &= "String"
' q now contains "Sample String".

指派語句中的類型轉換

您指派給變數、屬性或陣列元素的值必須是適合該目的地元素的數據類型。 一般而言,您應該嘗試產生與目的元素相同的數據類型值。 不過,某些類型可以在指派期間轉換成其他類型。

如需在數據類型之間轉換的資訊,請參閱 Visual Basic中的類型轉換。 簡單來說,Visual Basic 會自動將指定型別的值轉換成它所擴大的任何其他類型。 擴大轉換是在執行時總是能成功,且不會遺失任何資料。 例如,Visual Basic 會在適當時將 Integer 值轉換成 Double,因為 Integer 可以擴展為 Double。 如需詳細資訊,請參閱 擴大和縮小轉換

縮小轉換(非擴大的轉換)具有執行時失敗或數據遺失的風險。 您可以使用類型轉換函式明確地執行縮小轉換,或者您可以透過設定 Option Strict Off來指示編譯程式以隱含方式執行所有轉換。 如需詳細資訊,請參閱 隱含和明確轉換

將多個語句放在一行

您可以在以冒號 (:) 字元分隔的單一行上有多個語句。 下列範例說明這點。

Dim sampleString As String = "Hello World" : MsgBox(sampleString)

雖然偶爾很方便,但這種形式的語法可讓您的程式代碼難以閱讀和維護。 因此,建議您將一個語句保持在一行。

跨多行延續語句

語句通常適用於一行,但是當它太長時,您可以使用行接續序列將它繼續到下一行,其中包含空格後面接著底線字元 (_),後面接著歸位字元。 在下列範例中, MsgBox 可執行檔語句會繼續超過兩行。

Public Sub DemoBox()
    Dim nameVar As String
    nameVar = "John"
    MsgBox("Hello " & nameVar _
        & ". How are you?")
End Sub

隱含行接續

在許多情況下,您可以在下一行繼續語句,而不使用底線字元 (_)。 下列語法元素會在下一行程式代碼上隱含地繼續 語句。

  • 在逗號 (,) 之後。 例如:

    Public Function GetUsername(ByVal username As String,
                                ByVal delimiter As Char,
                                ByVal position As Integer) As String
    
        Return username.Split(delimiter)(position)
    End Function
    
  • 在開括號(()之後或關括號之前())。 例如:

    Dim username = GetUsername(
        Security.Principal.WindowsIdentity.GetCurrent().Name,
        CChar("\"),
        1
      )
    
  • 在左大括弧 ({)之後或在右大括弧 (})之前。 例如:

    Dim customer = New Customer With {
      .Name = "Terry Adams",
      .Company = "Adventure Works",
      .Email = "terry@www.adventure-works.com"
    }
    

    如需詳細資訊,請參閱 物件初始化表達式:具名和匿名型 別或 集合初始化表達式

  • 在 XML 字面值中,開啟的內嵌表示式(<%=)之後或內嵌表示式的關閉之前(%>)。 例如:

    Dim customerXml = <Customer>
                          <Name>
                              <%=
                                  customer.Name
                              %>
                          </Name>
                          <Email>
                              <%=
                                  customer.Email
                              %>
                          </Email>
                      </Customer>
    

    如需詳細資訊,請參閱 XML 中的內嵌運算式

  • 串連運算子(&)之後。 例如:

    cmd.CommandText = 
        "SELECT * FROM Titles JOIN Publishers " &
        "ON Publishers.PubId = Titles.PubID " &
        "WHERE Publishers.State = 'CA'"
    

    如需詳細資訊,請參閱 依功能列出的運算符

  • 指定運算子之後(=&=:=+=-=*=/=\=^=<<=>>=)。 例如:

    Dim fileStream =
      My.Computer.FileSystem.
        OpenTextFileReader(filePath)
    

    如需詳細資訊,請參閱 依功能列出的運算符

  • 在表達式內,二元運算符(+-/*Mod<><><=>=^>><<AndAndAlsoOrOrElseLikeXor)之後。 例如:

    Dim memoryInUse =
      My.Computer.Info.TotalPhysicalMemory +
      My.Computer.Info.TotalVirtualMemory -
      My.Computer.Info.AvailablePhysicalMemory -
      My.Computer.Info.AvailableVirtualMemory
    

    如需詳細資訊,請參閱 依功能列出的運算符

  • IsIsNot 運算子之後。 例如:

    If TypeOf inStream Is 
      IO.FileStream AndAlso
      inStream IsNot
      Nothing Then
    
        ReadFile(inStream)
    
    End If
    

    如需詳細資訊,請參閱 依功能列出的運算符

  • 在成員限定符字元 (.) 和成員名稱之前。 例如:

    Dim fileStream =
      My.Computer.FileSystem.
        OpenTextFileReader(filePath)
    

    不過,當您使用 _ 語句或在類型初始化清單中提供值時,您必須在成員限定符後面加入行接續字元 (With)。 當您使用 = 語句或物件初始化清單時,請考慮在指派運算符(例如,With)之後中斷這一行。 例如:

    ' Not allowed:
    ' Dim aType = New With { .
    '    PropertyName = "Value"
    
    ' Allowed:
    Dim aType = New With {.PropertyName =
        "Value"}
    
    
    
    Dim log As New EventLog()
    
    ' Not allowed:
    ' With log
    '    .
    '      Source = "Application"
    ' End With
    
    ' Allowed:
    With log
        .Source =
          "Application"
    End With
    

    如需詳細資訊,請參閱 With...End With 語句物件初始化器:具名和匿名類型

  • 在 XML 軸屬性限定符(..@...)之後。 不過,當您使用 _ 關鍵詞時指定成員限定符時,必須包含行接續字元 (With)。 例如:

    Dim customerName = customerXml.
      <Name>.Value
    
    Dim customerEmail = customerXml...
      <Email>.Value
    

    如需詳細資訊,請參閱 XML 軸屬性

  • 在您指定屬性時,於小於符號(<) 之後或大於符號(>) 之前。 此外,當您指定屬性時,大於符號(>)也會出現在之後。 不過,當您指定元件層級或模組層級屬性時,必須包含行接續字元 (_)。 例如:

    <
    Serializable()
    >
    Public Class Customer
        Public Property Name As String
        Public Property Company As String
        Public Property Email As String
    End Class
    

    如需詳細資訊,請參閱 屬性概觀

  • 查詢運算子之前和之後(AggregateDistinctFromGroup ByGroup JoinJoinLetOrder BySelectSkipSkip WhileTakeTake WhileWhereInIntoOnAscendingDescending)。 您無法在由多個關鍵字 (Order ByGroup JoinTake WhileSkip While) 組成的查詢運算符關鍵字之間斷行。 例如:

    Dim vsProcesses = From proc In
                        Process.GetProcesses
                      Where proc.MainWindowTitle.Contains("Visual Studio")
                      Select proc.ProcessName, proc.Id,
                             proc.MainWindowTitle
    

    如需詳細資訊,請參閱 查詢

  • In 語句中的 For Each 關鍵詞之後。 例如:

    For Each p In
      vsProcesses
    
        Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}",
          p.ProcessName,
          p.Id,
          p.MainWindowTitle)
    Next
    

    如需詳細資訊,請參閱 For Each...Next 語句

  • From 集合初始化表達式中的 關鍵詞之後。 例如:

    Dim days = New List(Of String) From
      {
       "Mo", "Tu", "We", "Th", "F", "Sa", "Su"
      }
    

    如需詳細資訊,請參閱 集合初始化表達式

新增批注

原始程式碼不一定是自我解釋的,即使是撰寫原始程式碼的程式設計人員也一樣。 因此,為了協助記錄其程式代碼,大多數程式設計人員都會自由使用內嵌批注。 程序代碼中的批註可以說明程式或特定指示給稍後閱讀或使用它的任何人。 Visual Basic 會在編譯期間忽略批注,而且不會影響編譯的程序代碼。

批注行以單引號 (') 開頭,或 REM 後面接著空格。 您可以在程序代碼中的任何位置新增它們,但字串內除外。 若要將批註附加至語句,請在語句後面插入單引號或REM,接著添加批注。 批注也可以另起一行。 下列範例示範這些可能性。

' This is a comment on a separate code line.
REM This is another comment on a separate code line.
x += a(i) * b(i) ' Add this amount to total.
MsgBox(statusMessage) REM Inform operator of status.

檢查編譯錯誤

如果您輸入一行程式代碼之後,該行會顯示波浪藍色底線,可能也會顯示錯誤訊息,這表示該行程式碼有語法錯誤。 您必須瞭解語句發生錯誤的原因(在工作清單中查看,或將滑鼠指標暫留在錯誤上方並讀取錯誤訊息),並加以更正。 在您修正程式代碼中的所有語法錯誤之前,您的程式將無法正確編譯。

術語 定義
指派運算符 提供語言參考頁面的連結,涵蓋指派運算元,例如 =*=&=
運算子和表達式 示範如何將元素與運算子結合,以產生新的值。
如何在程式碼中拆分與合併語句 示範如何將單一語句分成多行,以及如何將多個語句放在同一行上。
如何:標籤語句 示範如何標記一行程序代碼。