Соглашения о написании кода в Visual Basic
Корпорация Майкрософт разрабатывает примеры и документацию, которые соответствуют рекомендациям, приведенным в этом разделе. Если вы следуйте тем же соглашениям по кодированию, вы можете получить следующие преимущества:
Код будет иметь согласованный вид, чтобы читатели могли лучше сосредоточиться на содержимом, а не макете.
Читатели более быстро понимают код, так как они могут делать предположения на основе предыдущего опыта.
Вы можете копировать, изменять и поддерживать код проще.
Вы можете убедиться, что код демонстрирует "рекомендации" для Visual Basic.
Соглашения об именах
Дополнительные сведения об именовании см . в разделе "Рекомендации по именованию".
Не используйте "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
Для сцепления коротких строк рекомендуется использовать интерполяцию строк, как показано в следующем коде.
MsgBox($"hello{vbCrLf}goodbye")
Чтобы добавить строки в циклы, используйте StringBuilder объект.
Dim longString As New System.Text.StringBuilder For count As Integer = 1 To 1000 longString.Append(count) Next
Расслабленные делегаты в обработчиках событий
Не указывайте явно аргументы (Object
и EventArgs
) обработчики событий. Если вы не используете аргументы событий, передаваемые в событие (например, sender As Object
), e 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
Используйте пробную попытку... Перехват и использование инструкций при использовании обработки исключений
Не используйте 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
NULL перед вызовомRaiseEvent
метода.RaiseEvent
проверка передNothing
вызовом события.
Использование общих членов
Вызов Shared
элементов с помощью имени класса, а не из переменной экземпляра.
Использование XML-литерала
XML-литералы упрощают наиболее распространенные задачи, которые возникают при работе с XML (например, загрузка, запрос и преобразование). При разработке с использованием XML выполните следующие рекомендации.
Используйте XML-литералы для создания XML-документов и фрагментов вместо вызова API-интерфейсов XML напрямую.
Импортируйте пространства имен 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
Переименуйте свойства, если имена свойств в результате могут быть неоднозначными. Например, если запрос возвращает имя клиента и идентификатор заказа, переименуйте их вместо того, чтобы оставить их как
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