Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Корпорация Майкрософт разрабатывает примеры и документацию, которые соответствуют рекомендациям, приведенным в этом разделе. Если вы следуйте тем же соглашениям по кодированию, вы можете получить следующие преимущества:
Код будет иметь согласованный вид, чтобы читатели могли лучше сосредоточиться на содержимом, а не макете.
Читатели более быстро понимают код, так как они могут делать предположения на основе предыдущего опыта.
Вы можете копировать, изменять и поддерживать код проще.
Вы помогаете гарантировать, что ваш код демонстрирует "лучшие практики" для 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
Рекомендации по языку
Тип данных строки
Для сцепления коротких строк рекомендуется использовать интерполяцию строк, как показано в следующем коде.
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
Используйте инструкции 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
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