Codierungskonventionen in Visual Basic
Microsoft entwickelt Beispiele und Dokumentation, die den Richtlinien in diesem Thema folgen. Wenn Sie dieselben Codierungskonventionen beachten, erhalten Sie möglicherweise folgende Vorteile:
Der Code erhält eine konsistente Gestaltung, damit sich die Leser mehr auf den Inhalt und nicht auf das Layout konzentrieren.
Leser verstehen den Code schneller, da sie Rückschlüsse aus früheren Erfahrungen ziehen können.
Sie können den Code kopieren, ändern und leichter pflegen.
Sie können sicherstellen, dass der Code die "empfohlenen Vorgehensweisen" für Visual Basic berücksichtigt.
Namenskonventionen
Informationen zu Benennungsrichtlinien finden Sie im Thema Guidelines for Names.
Verwenden Sie nicht "My" oder "my" als Teil eines Variablennamens. Diese Vorgehensweise führt zu Verwechslungen mit den My-Objekten.
Sie müssen die Namen von Objekten in automatisch generiertem Code nicht ändern, um sie an die Richtlinien anzupassen.
Layoutkonventionen
Fügen Sie Registerkarten als Leerzeichen ein, und verwenden Sie intelligenten Einzug mit vier Leerzeichen.
Verwenden Sie Automatische Strukturierung und Einrückung des Programmcodes, um den Code im Code-Editor neu zu formatieren. Weitere Informationen finden Sie unter Optionen, Text-Editor, Standard (Visual Basic).
Verwenden Sie pro Zeile nur eine Anweisung. Verwenden Sie nicht das Visual Basic-Zeilentrennzeichen (:).
Vermeiden Sie, das explizite Zeilenfortsetzungszeichen "_" zugunsten der impliziten Zeilenfortsetzung, wenn die Sprache dies ermöglicht.
Verwenden Sie pro Zeile nur eine Deklaration.
Mit Automatische Strukturierung und Einrückung des Programmcodes werden Fortsetzungszeilen nicht automatisch formatiert. Sie müssen zum Einrücken manuell auf einen Tabstopp gezogen werden. In einer Liste werden jedoch die Elemente immer links ausgerichtet.
a As Integer, b As Integer
Fügen Sie zwischen Methoden- und Eigenschaftendefinitionen mindestens eine Leerzeile ein.
Konventionen für Kommentare
Fügen Sie den Kommentar in einer eigenen Zeile und nicht am Ende einer Codezeile ein.
Beginnen Sie den Kommentartext mit einem Großbuchstaben, und beenden Sie ihn mit einem Punkt.
Fügen Sie ein Leerzeichen zwischen dem Kommentartrennzeichen (') und dem Kommentartext ein.
' Here is a comment.
Erstellen Sie keine formatierten Blöcke von Sternchen, die die Kommentare umgeben.
Programmstruktur
Wenn Sie die Main-Methode verwenden, verwenden Sie das Standardkonstrukt für neue Konsolenanwendungen, und verwenden Sie My für Befehlszeilenargumente.
Sub Main() For Each argument As String In My.Application.CommandLineArgs ' Add code here to use the string variable. Next End Sub
Sprachrichtlinien
String-Datentyp
Um Zeichenfolgen verketten, verwenden Sie ein kaufmännisches Und-Zeichen (&).
MsgBox("hello" & vbCrLf & "goodbye")
Verwenden Sie das StringBuilder-Objekt, um Zeichenfolgen in Schleifen anzuhängen.
Dim longString As New System.Text.StringBuilder For count As Integer = 1 To 1000 longString.Append(count) Next
Weniger strenge Delegaten in Ereignishandlern
Um Ereignishandler zu vermeiden, qualifizieren Sie die Argumente (Object und EventArgs) nicht explizit. Wenn Sie nicht die Ereignisargumente verwenden, die an ein Ereignis übergeben werden (z. B. Sender als Objekt, "e" als EventArgs), verwenden Sie weniger strenge Delegaten, und lassen Sie die Ereignisargumente im Code aus:
Public Sub Form1_Load() Handles Form1.Load
End Sub
Datentyp ohne Vorzeichen
- Verwenden Sie Integer anstelle von Typen ohne Vorzeichen, wenn sie nicht notwendig sind.
Arrays
Verwenden Sie die kurze Syntax, wenn Sie Arrays in der Deklarationszeile initialisieren. Sie können z. B. folgende Syntax verwenden.
Dim letters1 As String() = {"a", "b", "c"}
Verwenden Sie nicht die folgende Syntax.
Dim letters2() As String = New String() {"a", "b", "c"}
Legen Sie den Arraybezeichner im Typ und nicht in der Variablen ab. Sie können z. B. folgende Syntax verwenden:
Dim letters4 As String() = {"a", "b", "c"}
Verwenden Sie nicht die folgende Syntax:
Dim letters3() As String = {"a", "b", "c"}
Verwenden Sie die { }-Syntax, wenn Sie Arrays aus grundlegenden Datentypen deklarieren und initialisieren. Sie können z. B. folgende Syntax verwenden:
Dim letters5() As String = {"a", "b", "c"}
Verwenden Sie nicht die folgende Syntax:
Dim letters6(2) As String letters6(0) = "a" letters6(1) = "b" letters6(2) = "c"
Verwenden des with-Schlüsselworts
Wenn Sie eine Reihe von Aufrufen eines Objekts ausführen, sollten Sie erwägen, das With-Schlüsselwort zu verwenden:
With orderLog
.Log = "Application"
.Source = "Application Name"
.MachineName = "Computer Name"
End With
Verwenden Sie try-catch-Anweisungen zur Ausnahmebehandlung.
Verwenden Sie nicht On Error Goto.
Verwenden des IsNot-Schlüsselworts
Verwenden Sie das Schlüsselwort IsNot statt Not...Is Nothing.
New-Schlüsselwort
Verwenden Sie die kurze Instanziierung. Sie können z. B. folgende Syntax verwenden:
Dim employees As New List(Of String)
Die vorangehende Zeile entspricht der Folgenden:
Dim employees2 As List(Of String) = New List(Of String)
Verwenden Sie für neue Objekte Objektinitialisierer anstelle des parameterlosen Konstruktors:
Dim orderLog As New EventLog With { .Log = "Application", .Source = "Application Name", .MachineName = "Computer Name"}
Ereignisbehandlung
Verwenden Sie eher Handles als AddHandler:
Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click End Sub
Verwenden Sie AddressOf, und instanziieren Sie den Delegaten nicht explizit:
Dim closeItem As New ToolStripMenuItem( "Close", Nothing, AddressOf ToolStripMenuItem1_Click) Me.MainMenuStrip.Items.Add(closeItem)
Wenn Sie ein Ereignis definieren, verwenden Sie die kurze Syntax, und lassen Sie den Delegaten vom Compiler definieren:
Public Event SampleEvent As EventHandler(Of SampleEventArgs) ' or Public Event SampleEvent(ByVal source As Object, ByVal e As SampleEventArgs)
Überprüfen Sie nicht, ob ein Ereignis Nothing (NULL) ist, bevor Sie die RaiseEvent-Methode aufrufen. Die RaiseEvent-Methode führt vor dem Auslösen des Ereignisses eine Überprüfung auf den Wert Nothing durch.
Verwenden von Shared-Membern
Rufen Sie Shared-Member über den Klassennamen auf, nicht von einer Instanzvariablen aus.
Verwenden von XML-Literalen
XML-Literale vereinfachen allgemeine Aufgaben bei der Arbeit mit XML (z. B. Laden, Abfragen und Umwandeln). Beachten Sie bei der Entwicklung mit XML die folgenden Richtlinien:
Verwenden Sie zum Erstellen von XML-Dokumenten und –Fragmenten XML-Literale, anstatt die XML-APIs direkt aufzurufen.
Importieren Sie XML-Namespaces auf Datei- oder Projektebene, um die Leistungsoptimierung für XML-Literale zu verwenden.
Verwenden Sie die XML-Achseneigenschaften, um auf Elemente und Attribute in einem XML-Dokument zuzugreifen.
Verwenden Sie eingebettete Ausdrücke, um Werte einzuschließen und XML aus vorhandenen Werten zu erstellen, anstatt API-Aufrufe wie die Add-Methode zu nutzen:
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-Abfragen
Verwenden Sie aussagekräftige Namen für Abfragevariablen:
Dim seattleCustomers = From cust In customers Where cust.City = "Seattle"
Geben Sie Aliasnamen für Elemente in einer Abfrage an, um eine korrekte Großschreibung von Eigenschaftennamen anonymer Typen in Pascal-Schreibweise sicherzustellen:
Dim customerOrders = From customer In customers Join order In orders On customer.CustomerID Equals order.CustomerID Select Customer = customer, Order = order
Benennen Sie Eigenschaften um, wenn die Eigenschaftennamen im Ergebnis nicht eindeutig sind. Wenn die Abfrage beispielsweise einen Kundennamen und eine Auftrags-ID zurückgibt, sollten Sie diese im Ergebnis umbenennen, anstatt Name und ID zu übernehmen:
Dim customerOrders2 = From cust In customers Join ord In orders On cust.CustomerID Equals ord.CustomerID Select CustomerName = cust.Name, OrderID = ord.ID
Verwenden Sie den Typrückschluss in der Deklaration von Abfragevariablen und Bereichsvariablen:
Dim customerList = From cust In customers
Richten Sie Abfrageklauseln unter der From-Anweisung aus:
Dim newyorkCustomers = From cust In customers Where cust.City = "New York" Select cust.LastName, cust.CompanyName
Verwenden Sie vor anderen Abfrageklauseln Where-Klauseln, sodass die nachfolgenden Abfrageklauseln für den reduzierten, gefilterten Datensatz ausgeführt werden:
Dim newyorkCustomers2 = From cust In customers Where cust.City = "New York" Order By cust.LastName
Verwenden Sie zum expliziten Definieren eines Verbindungsvorgangs die Join-Klausel anstelle der Where-Klausel, bei der ein Verbindungsvorgang implizit definiert wird:
Dim customerList2 = From cust In customers Join order In orders On cust.CustomerID Equals order.CustomerID Select cust, order