none
Zugriff auf Klassenvariable über Benamung RRS feed

  • Frage

  • Hallo Experten,

    mit eurer Unterstützung habe ich eine Klassenstruktur aufgebaut, die dem folgendem Muster folgt:

    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim xfamilie As New List(Of familie)
    
    	'Familie Mustermann erfassen
            xfamilie.Add(New familie With {.Bezeichnung = "Mustermann"}) 'Familie Mustermann erstellen
            xfamilie(0).AddPerson("Mustermann", "Hans Uwe")	'Vater
    	xfamilie(0).AddPerson("Mustermann", "Anna")	'Mutter
    	xfamilie(0).AddPerson("Mustermann", "Michael")	'Kind
            xfamilie(0).Personen(0).AddAuto("BMW", "rot")	'Auto des Vaters
            xfamilie(0).Personen(1).AddAuto("VW", "gelb")	'Auto der Mutter
    
    	'Familie Maier erfassen
            xfamilie.Add(New familie With {.Bezeichnung = "Maier "}) 'Familie Maier erstellen
            xfamilie(1).AddPerson("Maier ", "Wolfgang")	'Vater
    	xfamilie(1).AddPerson("Maier ", "Gabi")		'Mutter
    	xfamilie(1).AddPerson("Maier ", "Lucas")	'Kind 1
    	xfamilie(1).AddPerson("Maier ", "Marie")	'Kind 2
            xfamilie(1).Personen(0).AddAuto("Audi", "grün")	'Auto des Vaters
    
        End Sub
    End Class
    
    
    Public Class familie
        Public Property Bezeichnung As String
        Public Property Personen As new List(Of Person)
    
        Public Sub AddPerson(Name As String, Vorname As String)
            Personen.Add(New Person With {.Name = Name, .Vorname = Vorname.Split(" ").ToArray.ToList})
        End Sub
    End Class
    
    Public Class Person
        Public Property Name As String
        Public Property Vorname As new List(Of String)
        Public Property Typ As String 'zB. Vater Mutter Kind etc
        Public Property Autos As new List(Of Auto)
        Public Sub AddAuto(Marke As String, Farbe As String)
            Autos.Add(New Auto With {.Marke = Marke, .Farbe = Farbe})
        End Sub
    End Class
    
    Public Class Auto
        Public Property Marke As String
        Public Property Farbe As String
    End Class

    Der Code läuft wie er soll und einwandfrei, aber jetzt meine Frage. Die folgend Code erzeugen eine Ausgabe

     Debug.print (xfamilie(0).Person(2).Vorname(0))  'Ausgabe -> Michael
     Debug.print (xfamilie(1).Person(0).Autos(0).Marke) 'Ausgabe -> Audi

    Nun gibt es ja etliche Controls etc im VB, wo nicht über einen Integer-Index zugriffen wird, sondern über einen String-Index:

     Debug.print (xfamilie("Mustermann").Person(2).Vorname(0))  'Ausgabe -> Michael
     Debug.print (xfamilie("Maier").Person(0).Autos(0).Marke) 'Ausgabe -> Audi

    Wie muss ich die Klasse anpassen, damit beides geht also xfamilie(index as integer)... und xfamilie(string)...  (Natürlich wäre die Bezeichnung "Musterman" und "Maier" eindeutig!!!)

    mfg eem monarch






    Donnerstag, 18. Dezember 2014 08:18

Antworten

  • Hi,
    so etwas kann man über ein Wörterbuch lösen:

        Dim familien As New Dictionary(Of String, familie)
        For Each f In xfamilie
          familien.Add(f.Personen(0).Name, f)
        Next
    
        MsgBox(familien("Mustermann").Personen(0).Vorname(0))

    Du solltest außerdem besser mit Option Strict On arbeiten.

    --
    Peter


    Donnerstag, 18. Dezember 2014 09:42

Alle Antworten

  • Hi,
    so etwas kann man über ein Wörterbuch lösen:

        Dim familien As New Dictionary(Of String, familie)
        For Each f In xfamilie
          familien.Add(f.Personen(0).Name, f)
        Next
    
        MsgBox(familien("Mustermann").Personen(0).Vorname(0))

    Du solltest außerdem besser mit Option Strict On arbeiten.

    --
    Peter


    Donnerstag, 18. Dezember 2014 09:42
  • Danke ....

    Ok, das strict meckerter nur das ... Vorname.Split(" ").ToArray  ... an, habe es entsprechend geändert.

    Donnerstag, 18. Dezember 2014 13:55