Sonntag, 12. Februar 2012


Artikel

Februar 2010 | Artikel

In der Kürze liegt die Würze

(Link zum Artikel: http://www.entwickler.de/dotnet//002872)

Neue Features für VB.NET 10

Text: von Thorsten Kansy
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Ende März 2010 sollen sie erscheinen: Visual Studio 2010, .NET Framework 4.0 und damit auch verbesserte Versionen der Sprachen C# und VB.NET. Das bedeutet, dass es Zeit ist, einen Blick auf die neuen VB.NET-Features zu werfen.
Teil 1   Teil 2   

Mit Version 7 wurde aus Visual Basic die .NET-Programmiersprache VB.NET. Nun steht mittlerweise schon Version 10 am Start bereit. Und aus der Sprache für die „Bedürfnisse eines Anfängers“ ist schon längst ein professionelles Werkzeug geworden. Dieser Artikel soll eine Übersicht vermitteln, welche Neuerungen und vor allen Dingen welche Verbesserungen den VB.NET-Programmierer mit der nächsten Version erwarten. Dabei wird der Schwerpunkt auf eine Übersicht gelegt, da einige Punkte für sich bereits einen eigenen Artikel rechtfertigen. Die gezeigten Neuerungen umfassen sowohl Verbesserungen und Erweiterungen an der Sprache an sich als auch an der integrierten Entwicklungsumgebung des Visual Studios 2010.

Automatische Zeilenfortsetzung

Die Tage des Underscores („_“) für die Zeilenfortsetzung langer Anweisungen über mehrere Zeilen sind gezählt. Anweisungen können sich nun über mehrere Zeilen erstrecken. Möglich ist das z. B. nach Kommata, Klammern, &-Zeichen, allen Zuweisungsoperatoren, allen binären Operatoren, Is und IsNot, bei eingebetteten XML-Ausdrücken nach <%= oder vor %> und einigen anderen Sprachelementen, sodass auch LINQ-Abfragen und For Each-Schleifen von diesem neuen Feature profitieren können:

  1. Dim vProcesses = From proc In
  2. Process.GetProcesses
  3. Where proc.MainWindowTitle.StartsWith("V")
  4. Select proc.ProcessName, proc.Id,
  5. proc.MainWindowTitle
  6. For Each p In
  7. vProcesses
  8. Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}",
  9. p.ProcessName,
  10. p.Id,
  11. p.MainWindowTitle)
  12. Next
Eine kleine, aber feine Verbesserung meint der Autor.

Vereinfachte Implementierung von Eigenschaften

Eigenschaften können nun kompakter angelegt werden. Statt umständlich den folgenden Code schreiben zu müssen

  1. Private _Name As String
  2. Property Name As String
  3. Get
  4. Return _Name
  5. End Get
  6. Set(ByVal value As String)
  7. _Name = value
  8. End Set
  9. End Property

reicht nun ein einfaches und übersichtliches:

Public Property Name As String

Der Compiler kümmert sich um den Rest. Auch Standardwerte können für eine solche vereinfachte Eigenschaft definiert werden: Public Property Name As String = "Thorsten Kansy". Da Eigenschaften für Datenbindung etc. verstärk verwendet werden, kann mit dieser Verbesserung einiges an Tipparbeit gespart werden. Und als Nebeneffekt wird der Quellcode um einiges übersichtlicher.

Vereinfache Initialisierung von Auflistungen

Mit dem neuen From-Schlüsselwort können Auflistungen direkt bei der Initialsierung mit Inhalt gefüllt werden:

Dim names As New List(Of String) From {"Tick", "Trick", "Track"}

Ähnlich sieht es auch bei generischen Auflistungen wie dem Dictionary(Of T, T) aus

Dim days = New Dictionary(Of Integer, String) From
{{0, "Sonntag"}, {1, "Montag"}}

oder in Kombination mit der generischen List(Of T) einer vereinfachten Eigenschaft:

Public Property Items As List(Of String) =
New List(Of String) From {"Tick", "Trick", "Track"}

Ebenfalls eine Verbesserung, die schnell ihre Anhänger finden dürfte.

Mehrzeilige Lambda-Ausdrücke und Unterroutinen

Auch Lambda-Ausdrücke und Unterroutinen können sich nun übersichtlich über mehrere Zeilen verteilen. Mit dem Function- oder Sub-Schlüsselwort, je nachdem, ob ein Rückgabewert benötigt wird, ist deren Definition überall dort gültig, wo auch ein Delegat stehen kann. Die folgenden beiden Beispiele demonstrieren dies:

  1. // Definition
  2. Dim Add2 = Function(x)
  3. Return x + 2
  4. End Function
  5. // Aufruf
  6. Debug.WriteLine(Add2(2))
  7. Die Ausgabe ist “4”, was wenig überraschend ist.
  8. // Definition
  9. Dim LogMe = Sub(x)
  10. Debug.WriteLine(x)
  11. End Sub
  12. // Aufruf
  13. LogMe("Hallo Welt")

Solche Lambda-Ausdrücke können wie gewohnt dann auch als Parameter an den Stellen übergeben werden, an denen ein passender Delegat erwartet wird.

Equivalence Support (No-PIA-Feature)

Dieses Feature erlaubt es, Informationen über Schnittstellen direkt aus einer Assembly zu gewinnen. Auf diese Weise ist es möglich, direkt mit unterschiedlichen COM-Komponenten wie Microsoft Office zu arbeiten, ohne dass das eigene Programm neu kompiliert werden muss. Damit sind Primary Interop Assemblys (PIAs) überflüssig und ein großes Problem gelöst, da PIAs oftmals aufwärts, nicht aber abwärts kompatibel sind. In der Praxis bedeutete dies, dass auf dem PC, auf dem das Projekt kompiliert und die PIA erzeugt wurde, die älteste mögliche Version der COM-Komponente installiert sein musste, damit auch neuere Version funktionieren konnten – egal, ob die Schnittstelle kompatibel war oder nicht. Mit dem No-PIA-Feature muss nur noch die Kompatibilität gegeben sein.

Teil 1   Teil 2   

Kommentare