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:

Intellisense-Hilfe

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 einem Sub :
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 eines Module :

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 wie someInstance

    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 sind ReadOnly Eigenschaften, diejenigen ohne Read / Write-Eigenschaften

      Dim 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 denselben Key Werten sind gleich. Sie müssen die Equals Methode verwenden, um sie zu testen, mit = wird nicht kompiliert und Is 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 muss IEnumerable 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"
     }
    


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow