Visual Basic 编码约定

Microsoft 开发遵循本主题中的准则的示例和文档。 如果您遵循相同的编码约定,您可能会收到以下优点:

  • 您的代码将具有一致的,因此,读者可以改进目录中的焦点,而非布局。

  • 因为它们可根据以前的经验作出假设,读者更快速地理解您的代码。

  • 可以复制,更改和更易于维护代码。

  • 有助于确保您的代码演示“最优方法”的 Visual Basic。

命名约定

  • 有关命名准则的信息,请参见 Guidelines for Names 主题。

  • 请不要在变量名中使用“My”或“my”。 此方式与 My 对象混淆。

  • 您不必更改对象的名称在自动生成的代码进行符合指南。

布局约定

  • 为空格插入选项和使用智能缩进包含四个空格缩进。 有关更多信息,请参见如何:设置编辑器制表符和缩进选项

  • 使用 整齐排列代码 (重新格式化) 重新设置将在代码编辑器中的代码。 有关更多信息,请参见选项,文本编辑器,基本 (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-cn,VS.110).gifString 数据类型

  • 若要连接字符串,请使用" and "符 (&)。

    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-cn,VS.110).gif事件处理程序中的宽松委托

不要显式限定参数 (对象和 EventArgs) 到事件处理程序。 如果不使用传递给事件的事件参数 (例如,为对象,作为 EventArgs 的 e 的发送方),请使用宽松委托,并省略事件参数中的代码:

Public Sub Form1_Load() Handles Form1.Load
End Sub

h63fsef3.collapse_all(zh-cn,VS.110).gif无符号数据类型

  • 使用 Integer 而不是它们是必需的无符号类型,但。

h63fsef3.collapse_all(zh-cn,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-cn,VS.110).gif使用 With 关键字

当允许一系列时调用一个对象,请考虑使用 With 关键字:

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

h63fsef3.collapse_all(zh-cn,VS.110).gif当您使用异常处理时,请使用 try…catch 和 using 语句

不要使用 On Error Goto。

h63fsef3.collapse_all(zh-cn,VS.110).gif使用 IsNot 关键字

使用 IsNot 关键字而不是 Not...Is Nothing。

h63fsef3.collapse_all(zh-cn,VS.110).gifNew 关键字

  • 使用短实例化。 例如,使用下面的语法:

    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"}
    

h63fsef3.collapse_all(zh-cn,VS.110).gif事件处理

  • 使用 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 方法。 RaiseEvent 会在引发事件之前检查是否存在 Nothing。

h63fsef3.collapse_all(zh-cn,VS.110).gif使用共享成员

使用类名称调用 Shared 成员,而不是从实例变量调用。

h63fsef3.collapse_all(zh-cn,VS.110).gif使用 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
    

h63fsef3.collapse_all(zh-cn,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
    

请参见

其他资源

代码安全维护指南