共用方式為


Visual Basic 編碼慣例

Microsoft 開發遵循本主題中的方針的範例和文件。 如果您遵循相同的編碼慣例,您可能具有下列優點:

  • 您的程式碼會有一致的外觀,因此,讀取器可以改善在內容的焦點,而非配置。

  • 因為它們可以根據先前的經驗,假設讀取器迅速了解您的程式碼。

  • 您可以複製,變更、更容易維護程式碼。

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

命名規範

  • 如需命名方針的詳細資訊,請參閱 Guidelines for Names 主題。

  • 請不要使用 "My" 或 "my" 做為變數名稱的一部分。 這麼做會建立與 My 物件產生混淆。

  • 您不必變更物件名稱是自動產生的程式碼讓它們符合方針。

配置慣例

  • 插入索引標籤為空格和使用智慧型縮排具有四個空格縮排。 如需詳細資訊,請參閱HOW TO:設定編輯器索引標籤和縮排選項

  • 使用 [美化排列 (重新格式化程式碼)] 重新格式化您在程式碼編輯器的程式碼。 如需詳細資訊,請參閱基本 (Visual Basic)、文字編輯器、選項

  • 每行只使用一個陳述式。 不要使用 Visual Basic 行分隔符號 (:)。

  • 避免使用明確行接續字元「_」傾向於隱含行接續符號的地方,語言允許它。

  • 每行只使用一個宣告。

  • 如果 [美化排列 (重新格式化程式碼)] 不會自動格式化連續行,手動連續行縮排一個定位停駐點。 不過,在清單的靠左對齊項目。

    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
    

語言方針

h63fsef3.collapse_all(zh-tw,VS.110).gif字串資料型別

  • 若要串連字串,請使用連字號 (&)。

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

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

h63fsef3.collapse_all(zh-tw,VS.110).gif事件處理常式中比較不嚴謹的委派

不要明確地限定引數 (物件和 EventArgs) 給事件處理常式。 如果您不使用傳遞至事件的事件引數 (例如,為物件,做為的 EventArgs e 的寄件者),請使用寬鬆委派,並忽略事件引數中的程式碼:

Public Sub Form1_Load() Handles Form1.Load
End Sub

h63fsef3.collapse_all(zh-tw,VS.110).gif不帶正負號的資料型別

  • 使用 Integer 而不是需要的不帶正負號的型別,除了。

h63fsef3.collapse_all(zh-tw,VS.110).gif陣列

  • 當您使用在宣告一行時,陣列使用短語法。 例如,請使用下列語法。

    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"
    

h63fsef3.collapse_all(zh-tw,VS.110).gif使用 With 關鍵字

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

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

h63fsef3.collapse_all(zh-tw,VS.110).gif因此,使用例外狀況處理時,請使用 try…catch 和 using 陳述式

不要使用 On Error Goto。

h63fsef3.collapse_all(zh-tw,VS.110).gif使用 IsNot 關鍵字

使用 IsNot 關鍵字而非 Not...Is Nothing。

h63fsef3.collapse_all(zh-tw,VS.110).gifNew 關鍵字

  • 使用短的執行個體化。 例如,請使用下列語法:

    Dim employees As New List(Of String)
    

    前一行等於:

    Dim employees2 As List(Of String) = New List(Of String)
    
  • 為新物件使用物件初始設定式,代替無參數的建構函式 (Constructor):

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

h63fsef3.collapse_all(zh-tw,VS.110).gif事件處理

  • 使用 Handles,而非 AddHandler:

    Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click
    End Sub
    
  • 使用 AddressOf,且不要明確地對委派 (Delegate) 執行個體化。

    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)
    
  • 不要檢查事件是否為 (null) Nothing ,在呼叫 RaiseEvent 方法。 RaiseEvent 會在引發事件之前檢查 Nothing。

h63fsef3.collapse_all(zh-tw,VS.110).gif使用共用成員

使用類別名稱呼叫 Shared 成員,而不要從執行個體變數進行呼叫。

h63fsef3.collapse_all(zh-tw,VS.110).gif使用 XML 常值

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

  • 使用 XML 常值建立 XML 文件和片段,而不要直接呼叫 XML API。

  • 在檔案或專案等級匯入 XML 命名空間,以充分利用 XML 常值的效能最佳化。

  • 使用 XML 軸屬性 (Property) 存取 XML 文件中的項目和屬性 (Attribute)。

  • 使用內嵌運算式,以加入值並從現有值建立 XML,而不要使用如 Add 方法之類的 API 呼叫:

    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
    

h63fsef3.collapse_all(zh-tw,VS.110).gifLINQ 查詢

  • 使用有意義的名稱做為查詢變數的名稱:

    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
    
  • 當結果中的屬性名稱會變成模稜兩可時,請重新命名屬性。 例如,在中,如果您的查詢傳回客戶名稱和訂單 ID,重新命名而不是將它們保留為 Name 和 ID 的結果:

    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
    

請參閱

其他資源

安全程式碼撰寫方針