Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0072: VB2008: Objektinitialisierer durch With {}

 von 

Beschreibung

Mit VB9 kann man nun Objekte mit With-Blöcken ohne überladenen Konstruktor direkt initialisieren. So kann man zudem anonyme Typen schaffen. Dieser Tipp zeigt kurz die Funktionsweise in Kombination mit einer LINQ-Abfrage.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5

.NET-Version(en):

Visual Basic 2008

Download:

Download des Beispielprojektes [8,17 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2008
' Option Strict:    Aus
' Option Explicit:  An
' Option Infer:     An
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Deployment
'  - System.Xml
'  - System.Core
'  - System.Xml.Linq
'  - System.Data.DataSetExtensions
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Data
'  - System.Diagnostics
'  - System.Linq
'  - System.Xml.Linq
'

' ##############################################################################
' ################################ Module1.vb ##################################
' ##############################################################################
Option Infer On
Option Strict On
Option Explicit On

' Typ für ein Raumschiff
Class Raumschiff
    Public Besatzungsstärke As UInteger
    Public Typ As String
    Public Name As String
End Class

Module Module1

    Sub Main()

        ' Flotte initialisieren
        Dim Flotte As New Generic.List(Of Raumschiff)(New Raumschiff() { _
                New Raumschiff() With { _
                    .Typ = "Kreuzer", _
                    .Name = "Deadalus", _
                    .Besatzungsstärke = 400}, _
                New Raumschiff() With { _
                    .Typ = "Jäger", _
                    .Name = "Phantom", _
                    .Besatzungsstärke = 2}, _
                New Raumschiff() With { _
                    .Typ = "Kreuzer", _
                    .Name = "Prometheus", _
                    .Besatzungsstärke = 1200} _
            })

        ' Linq-Query ausführen
        ' Wähle aus der Flotte alle Schiffe vom Typ Kreuzer aus, 
        ' sortiere sie aufsteigend nach ihrem Namen und gib ihre
        ' Besatzungsstärke und den Namen aus
        Dim Kreuzer = _
            From Schiff As Raumschiff In Flotte _
            Where Schiff.Typ = "Kreuzer" Order By Schiff.Name Ascending _
            Select New With { _
                .Besatzungsstärke = Schiff.Besatzungsstärke, _
                .Schiffsname = Schiff.Name}

        Console.WriteLine("Folgende Kreuzer sind in der Flotte enthalten:")

        ' "Kreuzer" ist eine Auflistung aus anonymen Typen
        For Each Schiff In Kreuzer
            Console.WriteLine(" > {0} ({1} Mann Besatzung)", _
                Schiff.Schiffsname, _
                Schiff.Besatzungsstärke)
        Next

        Console.ReadKey()
    End Sub

End Module

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.