Visual Basic .NET Language
Einführung in die Syntax
Suche…
Bemerkungen
Die erste interessante Sache zu wissen ist, wie man Kommentare schreibt.
In VB .NET schreiben Sie einen Kommentar, indem Sie ein Apostroph schreiben oder REM
schreiben. Das bedeutet, dass der Rest der Zeile vom Compiler nicht berücksichtigt wird.
'This entire line is a comment
Dim x As Integer = 0 'This comment is here to say we give 0 value to x
REM There are no such things as multiline comments
'So we have to start everyline with the apostrophe or REM
Intellisense-Helfer
Eine interessante Sache ist die Möglichkeit, eigene Kommentare in Visual Studio Intellisense hinzuzufügen. So können Sie selbst geschriebene Funktionen und Klassen selbsterklärend gestalten. Dazu müssen Sie das Kommentarsymbol dreimal in die Zeile oberhalb Ihrer Funktion eingeben.
Sobald dies erledigt ist, fügt Visual Studio automatisch eine XML-Dokumentation hinzu:
''' <summary>
''' This function returns a hello to your name
''' </summary>
''' <param name="Name">Your Name</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Test(Name As String) As String
Return "Hello " & Name
End Function
Wenn Sie Ihre Testfunktion irgendwo in Ihren Code eingeben, wird diese kleine Hilfe angezeigt:
Eine Variable deklarieren
In VB.NET muss jede Variable vor ihrer Verwendung deklariert werden (wenn Option Explicit auf On gesetzt ist ). Es gibt zwei Möglichkeiten, Variablen zu deklarieren:
- In einer
Function
oder einemSub
:
Dim w 'Declares a variable named w of type Object (invalid if Option Strict is On)
Dim x As String 'Declares a variable named x of type String
Dim y As Long = 45 'Declares a variable named y of type Long and assigns it the value 45
Dim z = 45 'Declares a variable named z whose type is inferred
'from the type of the assigned value (Integer here) (if Option Infer is On)
'otherwise the type is Object (invalid if Option Strict is On)
'and assigns that value (45) to it
In dieser Antwort finden Sie alle Details zu Option Explicit
, Strict
und Infer
.
- Innerhalb einer
Class
oder einesModule
:
Auf diese Variablen (in diesem Kontext auch als Felder bezeichnet) kann für jede Instanz der Class
sie deklariert sind, zugegriffen werden. Sie können je nach Modifikator ( Public
, Private
, Protected
, Protected Friend
oder Friend
) auch außerhalb der deklarierten Class
verfügbar sein.
Private x 'Declares a private field named x of type Object (invalid if Option Strict is On)
Public y As String 'Declares a public field named y of type String
Friend z As Integer = 45 'Declares a friend field named z of type Integer and assigns it the value 45
Diese Felder können auch mit Dim
deklariert werden, die Bedeutung ändert sich jedoch je nach dem einschließenden Typ:
Class SomeClass
Dim z As Integer = 45 ' Same meaning as Private z As Integer = 45
End Class
Structure SomeStructure
Dim y As String ' Same meaning as Public y As String
End Structure
Modifikatoren
Modifikatoren geben an, wie externe Objekte auf die Daten eines Objekts zugreifen können.
- Öffentlichkeit
Dies bedeutet, dass jedes Objekt uneingeschränkt darauf zugreifen kann
- Privatgelände
Bedeutet, dass nur das deklarierende Objekt darauf zugreifen kann
- Geschützt
Bedeutet nur das deklarierende Objekt und jedes Objekt, das es erbt, kann darauf zugreifen und es anzeigen.
- Freund
Bedeutet nur das delcaring-Objekt, jedes Objekt, das davon erbt, und jedes Objekt im selben Namespace können darauf zugreifen und es anzeigen.
Public Class MyClass
Private x As Integer
Friend Property Hello As String
Public Sub New()
End Sub
Protected Function Test() As Integer
Return 0
End Function
End Class
Funktion schreiben
Eine Funktion ist ein Codeblock, der während der Ausführung mehrmals aufgerufen wird. Anstatt den gleichen Code immer wieder zu schreiben, kann man diesen Code in eine Funktion schreiben und diese Funktion jederzeit aufrufen.
Eine Funktion :
- Muss in einer Klasse oder einem Modul deklariert werden
- Gibt einen Wert zurück (angegeben durch den Rückgabetyp)
- Hat einen Modifikator
- Kann Parameter für die Verarbeitung übernehmen
Private Function AddNumbers(X As Integer, Y As Integer) As Integer
Return X + Y
End Function
Ein Funktionsname könnte als Rückgabeanweisung verwendet werden
Function sealBarTypeValidation() as Boolean
Dim err As Boolean = False
If rbSealBarType.SelectedValue = "" Then
err = True
End If
Return err
End Function
ist genauso wie
Function sealBarTypeValidation() as Boolean
sealBarTypeValidation = False
If rbSealBarType.SelectedValue = "" Then
sealBarTypeValidation = True
End If
End Function
Objektinitialisierer
Benannte Typen
Dim someInstance As New SomeClass(argument) With { .Member1 = value1, .Member2 = value2 '... }
Ist äquivalent zu
Dim someInstance As New SomeClass(argument) someInstance.Member1 = value1 someInstance.Member2 = value2 '...
Anonyme Typen (Option Infer muss aktiviert sein)
Dim anonymousInstance = New With { .Member1 = value1, .Member2 = value2 '... }
Eine ähnliche
anonymousInstance
zwar nicht denselben Typ wiesomeInstance
Der Mitgliedsname muss im anonymen Typ eindeutig sein und kann einer Variablen oder einem anderen Objektmitgliedernamen entnommen werden
Dim anonymousInstance = New With { value1, value2, foo.value3 '... } ' usage : anonymousInstance.value1 or anonymousInstance.value3
Jedem Mitglied kann das
Key
Schlüssel vorangestellt werden. Diese Member sindReadOnly
Eigenschaften, diejenigen ohne Read / Write-EigenschaftenDim anonymousInstance = New With { Key value1, .Member2 = value2, Key .Member3 = value3 '... }
Zwei anonyme Instanzen, die mit denselben Mitgliedern (Name, Typ, Vorhandensein von
Key
und Reihenfolge) definiert sind, haben denselben anonymen Typ.Dim anon1 = New With { Key .Value = 10 } Dim anon2 = New With { Key .Value = 20 } anon1.GetType Is anon2.GetType ' True
Anonyme Typen sind strukturell gleichwertig. Zwei Instanzen desselben anonymen Typs mit mindestens einer
Key
Eigenschaft mit denselbenKey
Werten sind gleich. Sie müssen dieEquals
Methode verwenden, um sie zu testen, mit=
wird nicht kompiliert undIs
vergleicht die Objektreferenz.Dim anon1 = New With { Key .Name = "Foo", Key .Age = 10, .Salary = 0 } Dim anon2 = New With { Key .Name = "Bar", Key .Age = 20, .Salary = 0 } Dim anon3 = New With { Key .Name = "Foo", Key .Age = 10, .Salary = 10000 } anon1.Equals(anon2) ' False anon1.Equals(anon3) ' True although non-Key Salary isn't the same
Der Initialisierer Named und Anonymous kann verschachtelt und gemischt werden
Dim anonymousInstance = New With {
value,
Key .someInstance = New SomeClass(argument) With {
.Member1 = value1,
.Member2 = value2
'...
}
'...
}
Collection Initializer
Arrays
Dim names = {"Foo", "Bar"} ' Inferred as String() Dim numbers = {1, 5, 42} ' Inferred as Integer()
Container (
List(Of T)
,Dictionary(Of TKey, TValue)
usw.)Dim names As New List(Of String) From { "Foo", "Bar" '... } Dim indexedDays As New Dictionary(Of Integer, String) From { {0, "Sun"}, {1, "Mon"} '... }
Ist äquivalent zu
Dim indexedDays As New Dictionary(Of Integer, String) indexedDays.Add(0, "Sun") indexedDays.Add(1, "Mon") '...
Elemente können das Ergebnis eines Konstruktors, eines Methodenaufrufs oder eines Eigenschaftszugriffs sein. Es kann auch mit dem Objektinitialisierer gemischt werden.
Dim someList As New List(Of SomeClass) From { New SomeClass(argument), New SomeClass With { .Member = value }, otherClass.PropertyReturningSomeClass, FunctionReturningSomeClass(arguments) '... }
Es ist nicht möglich, die Objektinitialisierersyntax UND die Erfassungsinitialisierersyntax gleichzeitig für dasselbe Objekt zu verwenden. Zum Beispiel funktionieren diese nicht
Dim numbers As New List(Of Integer) With {.Capacity = 10} _ From { 1, 5, 42 } Dim numbers As New List(Of Integer) From { .Capacity = 10, 1, 5, 42 } Dim numbers As New List(Of Integer) With { .Capacity = 10, 1, 5, 42 }
Benutzerdefinierter Typ
Wir können auch die Syntax für die Initialisierung von Auflistungen zulassen, indem wir einen benutzerdefinierten Typ angeben.
Es mussIEnumerable
implementieren und über eine durch Überladungsregeln zugängliche und kompatible Methode verfügen.Add
Methode (Instanz, Shared oder sogar Erweiterungsmethode)Gedachtes Beispiel:
Class Person Implements IEnumerable(Of Person) ' Inherits from IEnumerable Private ReadOnly relationships As List(Of Person) Public Sub New(name As String) relationships = New List(Of Person) End Sub Public Sub Add(relationName As String) relationships.Add(New Person(relationName)) End Sub Public Iterator Function GetEnumerator() As IEnumerator(Of Person) _ Implements IEnumerable(Of Person).GetEnumerator For Each relation In relationships Yield relation Next End Function Private Function IEnumerable_GetEnumerator() As IEnumerator _ Implements IEnumerable.GetEnumerator Return GetEnumerator() End Function End Class ' Usage Dim somePerson As New Person("name") From { "FriendName", "CoWorkerName" '... }
Wenn Sie der
List(Of Person)
eine Person hinzufügen möchten, indem Sie einfach den Namen in den Initialisierungssatz der Auflistung eingeben (die Klasse List (Person) kann jedoch nicht geändert werden), können wir eine Erweiterungsmethode verwenden' Inside a Module <Runtime.CompilerServices.Extension> Sub Add(target As List(Of Person), name As String) target.Add(New Person(name)) End Sub ' Usage Dim people As New List(Of Person) From { "Name1", ' no need to create Person object here "Name2" }