共用方式為


Visual Basic 編碼慣例

Microsoft 開發了範例和文件,這些範例和文件遵循了本主題中的指導方針。 如果您遵循相同的編碼慣例,可能會獲得下列優點:

  • 您的程式代碼會有一致的外觀,讓讀者更能專注於內容,而不是版面配置。

  • 讀者更快速地瞭解您的程式代碼,因為它們可以根據先前的體驗進行假設。

  • 您可以更輕鬆地複製、變更和維護程式碼。

  • 您可以協助確保程式代碼示範 Visual Basic 的「最佳做法」。

命名慣例

  • 如需命名指導方針的詳細資訊,請參閱 命名指導方針 主題。

  • 請勿使用 「My」 或 「my」 作為變數名稱的一部分。 這種做法會讓My物件產生混淆。

  • 您不需要變更自動產生程式代碼中的物件名稱,使其符合指導方針。

版面配置慣例

  • 將索引標籤插入為空格,並使用智慧縮排搭配四個空格縮排。

  • 使用 程式代碼的漂亮清單(重新格式化) ,在程式代碼編輯器中重新格式化您的程序代碼。 如需詳細資訊,請參閱 選項、文字編輯器、基本版 (Visual Basic)

  • 每行只能使用一個語句。 請勿使用 Visual Basic 行分隔符 (:)。

  • 請避免使用明確行接續字元 “_”,以偏向語言允許的隱含行接續。

  • 每行只能使用一個宣告。

  • 如果 程式碼美化清單(重新格式化) 不會自動格式化延續行,請手動將延續行縮排一個 tab 鍵。 不過,清單中的項目應該總是靠左對齊。

    a As Integer,  
    b As Integer  
    
  • 在方法和屬性定義之間新增至少一個空白行。

批注慣例

  • 將批註放在個別行上,而不是放在程式代碼行結尾。

  • 以大寫字母開始批註文字,並以句號結束批註文字。

  • 在批注分隔符 (') 和批註文字之間插入一個空格。

    ' Here is a comment.
    
  • 請勿以格式化的星號區塊括住批注。

程序結構

  • 當您使用 Main 方法時,請對新的控制台應用程式使用預設建構,並針對命令列引數使用 My

    Sub Main()
      For Each argument As String In My.Application.CommandLineArgs
        ' Add code here to use the string variable.
      Next
    End Sub
    

語言指導方針

字串數據類型

  • 使用字串內插補點串連短字串,如下列程式碼所示。

    MsgBox($"hello{vbCrLf}goodbye")
    
  • 若要在迴圈中附加字串,請使用 StringBuilder 物件。

    Dim longString As New System.Text.StringBuilder
    For count As Integer = 1 To 1000
      longString.Append(count)
    Next
    

事件處理程式中的鬆散委派

請勿將 自變數 (ObjectEventArgs) 明確限定為事件處理程式。 如果您未使用傳遞至事件的事件自變數(例如 sender As Objecte As EventArgs),請使用寬鬆的委派,並排除程式代碼中的事件自變數:

Public Sub Form1_Load() Handles Form1.Load
End Sub

未帶正負號的數據類型

  • 使用 Integer 而非不帶正負號的類型,但必要之處除外。

陣列

  • 當您在宣告行上初始化陣列時,請使用簡短語法。 例如,使用下列語法。

    Dim letters1 As String() = {"a", "b", "c"}
    

    請勿使用下列語法。

    Dim letters2() As String = New String() {"a", "b", "c"}
    
  • 將陣列指示項放在類型上,而不是放在變數上。 例如,使用下列語法:

    Dim letters4 As String() = {"a", "b", "c"}
    

    請勿使用下列語法:

    Dim letters3() As String = {"a", "b", "c"}
    
  • 當您宣告及初始化基本資料型別的陣列時,請使用 { } 的語法。 例如,使用下列語法:

    Dim letters5 As String() = {"a", "b", "c"}
    

    請勿使用下列語法:

    Dim letters6(2) As String
    letters6(0) = "a"
    letters6(1) = "b"
    letters6(2) = "c"
    

使用with關鍵詞

當您對一個物件進行一系列呼叫時,請考慮使用 With 關鍵詞:

With orderLog
  .Log = "Application"
  .Source = "Application Name"
  .MachineName = "Computer Name"
End With

使用例外狀況處理時,請使用 Try...Catch 和 Using 語句。

請勿使用 On Error Goto

使用 IsNot 關鍵詞

使用 ... IsNot Nothing,而不是 Not ... Is Nothing

新增關鍵詞

  • 使用簡短實例。 例如,使用下列語法:

    Dim employees As New List(Of String)
    

    前一行相當於此:

    Dim employees2 As List(Of String) = New List(Of String)
    
  • 針對新的物件使用物件初始化運算式,而不是無參數建構函式:

    Dim orderLog As New EventLog With { 
        .Log = "Application", 
        .Source = "Application Name", 
        .MachineName = "Computer Name"}
    

事件處理

  • 使用 Handles 而非 AddHandler

    Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click
    End Sub
    
  • 使用 AddressOf,且不要明確地實例化委派:

    Dim closeItem As New ToolStripMenuItem( 
        "Close", Nothing, AddressOf ToolStripMenuItem1_Click)
    Me.MainMenuStrip.Items.Add(closeItem)
    
  • 當您定義事件時,請使用簡短語法,並讓編譯程式定義委派:

    Public Event SampleEvent As EventHandler(Of SampleEventArgs)
    ' or
    Public Event SampleEvent(ByVal source As Object, 
                              ByVal e As SampleEventArgs)
    
  • 在呼叫 Nothing 方法之前,請勿驗證事件是否為 RaiseEvent (null)。 RaiseEvent會在引發事件之前檢查Nothing

使用共享成員

Shared使用類別名稱呼叫成員,而不是從實例變數呼叫成員。

使用 XML 常值

XML 常值可簡化您使用 XML 時遇到的最常見工作(例如,載入、查詢和轉換)。 使用 XML 進行開發時,請遵循下列指導方針:

  • 使用 XML 常值來建立 XML 檔和片段,而不是直接呼叫 XML API。

  • 在檔案或專案層級匯入 XML 命名空間,以利用 XML 常值的效能優化。

  • 使用 XML 座標軸屬性來存取 XML 檔中的元素和屬性。

  • 使用內嵌表示式來包含值,以及從現有值建立 XML,而不是使用 API 呼叫,例如 Add 方法:

    Private Function GetHtmlDocument( 
        ByVal items As IEnumerable(Of XElement)) As String
    
      Dim htmlDoc = <html>
                      <body>
                        <table border="0" cellspacing="2">
                          <%= 
                            From item In items 
                            Select <tr>
                                     <td style="width:480">
                                       <%= item.<title>.Value %>
                                     </td>
                                     <td><%= item.<pubDate>.Value %></td>
                                   </tr> 
                          %>
                        </table>
                      </body>
                    </html>
    
      Return htmlDoc.ToString()
    End Function
    

LINQ 查詢

  • 針對查詢變數使用有意義的名稱:

    Dim seattleCustomers = From cust In customers 
                           Where cust.City = "Seattle"
    
  • 提供查詢中元素的名稱,以確保使用 Pascal 命名法正確命名匿名類型的屬性名稱。

    Dim customerOrders = From customer In customers 
                         Join order In orders 
                           On customer.CustomerID Equals order.CustomerID 
                         Select Customer = customer, Order = order
    
  • 當結果中的屬性名稱可能會造成混淆時,請重新命名屬性。 例如,如果您的查詢傳回客戶名稱和訂單識別碼,請重新命名它們,而不是在結果中保留NameID客戶名稱和訂單標識碼:

    Dim customerOrders2 = From cust In customers 
                          Join ord In orders
                            On cust.CustomerID Equals ord.CustomerID 
                          Select CustomerName = cust.Name, 
                                 OrderID = ord.ID
    
  • 在查詢變數和範圍變數的宣告中使用類型推斷:

    Dim customerList = From cust In customers
    
  • 將查詢子句對齊至 From 語句之下:

    Dim newyorkCustomers = From cust In customers 
                           Where cust.City = "New York" 
                           Select cust.LastName, cust.CompanyName
    
  • 在其他查詢子句之前使用 Where 子句,以便稍後的查詢子句在篩選的數據集上運作:

    Dim newyorkCustomers2 = From cust In customers 
                            Where cust.City = "New York" 
                            Order By cust.LastName
    
  • Join使用 子句明確定義聯結作業,而不是使用 Where 子句隱含定義聯結作業:

    Dim customerList2 = From cust In customers 
                        Join order In orders 
                          On cust.CustomerID Equals order.CustomerID 
                        Select cust, order
    

另請參閱