Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Корпорация Майкрософт разрабатывает примеры и документацию, которые соответствуют рекомендациям, приведенным в этом разделе. Если вы следуйте тем же соглашениям по кодированию, вы можете получить следующие преимущества:
Код будет иметь согласованный вид, чтобы читатели могли лучше сосредоточиться на содержимом, а не макете.
Читатели более быстро понимают код, так как они могут делать предположения на основе предыдущего опыта.
Вы можете копировать, изменять и поддерживать код проще.
Вы помогаете гарантировать, что ваш код демонстрирует "лучшие практики" для 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)Не проверяйте, имеет ли событие значение
NothingNULL перед вызовом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.LastNameJoinИспользуйте предложение для явного определения операции соединения вместо использованияWhereпредложения для неявного определения операции соединения:Dim customerList2 = From cust In customers Join order In orders On cust.CustomerID Equals order.CustomerID Select cust, order