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
语言指南
String 数据类型
若要连接字符串,请使用" and "符 (&)。
MsgBox("hello" & vbCrLf & "goodbye")
若要追加字符串在循环中,请使用 StringBuilder 对象。
Dim longString As New System.Text.StringBuilder For count As Integer = 1 To 1000 longString.Append(count) Next
事件处理程序中的宽松委托
不要显式限定参数 (对象和 EventArgs) 到事件处理程序。 如果不使用传递给事件的事件参数 (例如,为对象,作为 EventArgs 的 e 的发送方),请使用宽松委托,并省略事件参数中的代码:
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 关键字而不是 Not...Is Nothing。
New 关键字
使用短实例化。 例如,使用下面的语法:
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 方法。 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
在结果中的属性名称不明确时重命名属性。 例如,在中,如果查询返回客户的名称和订单 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