Jedes Objekt einer Klasse durchgehen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von TimBo93.

    Jedes Objekt einer Klasse durchgehen

    Hi,

    sry für die vielleicht peinliche Frage, aber ich bin komplett neu im Gebiet des OOP. Ich habe viele Jahre mit Blitz3D programmiert und jetzt möchte ich halt OOP kennenlernen.

    Ich habe eine Klasse, welche 2 Variablen speichert:

    VB.NET-Quellcode

    1. Public Class Zuordnung
    2. Public Name As String
    3. Public Pfad As String
    4. End Class


    und in meinem Code erstelle ich Objekte:

    VB.NET-Quellcode

    1. Dim verbindung As Zuordnung
    2. While mydata.Read()
    3. If Len(mydata(1)) = 1 Then
    4. verbindung = New Zuordnung
    5. verbindung.Name = mydata(0)
    6. End If
    7. End While


    jetzt frage ich mich, wie ich jedes Objekt durchgehen kann.

    Ich habe es so probiert:

    VB.NET-Quellcode

    1. For each verbindung As Zuordnung
    2. TreeView1.Nodes.Add(verbindung.Name)
    3. Next

    doch das gibbt einen Syntax-Fehler (ohne nähere Beschreibung aus)

    Wäre für Hilfe echt dankbar !

    Grüße
    TimBo
    Visual Basic FTW :D
    Programmiere u.a. mit C# (XNA), Blitz Basic 3D, BlitzPlus , PHP.

    TimBo93 schrieb:

    sry für die vielleicht peinliche Frage

    Ich denke nicht dass die Frage oder auch der gepostete Code Dir in irgendeiner Form peinlich sein sollte.

    Wenn Du möchtest ein paar Verbesserungen / Erleichterungen:

    Der Code

    VB.NET-Quellcode

    1. Dim verbindung As Zuordnung
    2. While mydata.Read()
    3. If Len(mydata(1)) = 1 Then
    4. verbindung = New Zuordnung
    5. verbindung.Name = mydata(0)
    6. End If
    7. End While

    ist syntaktisch vollkommen korrekt , nur
    - ist Len noch so ein Überbleibsel aus der VB6 Zeit, besser wäre nun .Length für die Länge des Strings zu benutzen
    - kann die Zuweisung der Member in 1 Statement geschehen mit dem With Statement

    TimBo93 schrieb:

    jetzt frage ich mich, wie ich jedes Objekt durchgehen kann.

    Du bist schon selber dafür verantwortlich die Instanzen Deiner Klasse irgendwo aufzubewahren, besonders geeignet sind die .Net Listen (List (of T)), eine Verbesserung des altbekannten Arrays

    So könnte Dein Code jetzt lauten:

    VB.NET-Quellcode

    1. ' Liste aller Instanzen der Klasse Zuordnung
    2. Dim ZuordnungsListe As New List(Of Zuordnung)
    3. ' Klasse Zuordnung
    4. Public Class Zuordnung
    5. Public Name As String
    6. Public Pfad As String
    7. End Class
    8. ...
    9. Dim Verbindung As Zuordnung
    10. While mydata.Read
    11. If mydata(1).Length = 1 Then
    12. Verbindung = New Zuordnung With {.Name = mydata(0) , .Pfad = "irgendeinpfad"}
    13. ZuordnungsListe.Add(Verbindung)
    14. End If
    15. End While
    16. ...
    17. For Each verbindung As Zuordnung In ZuordnungsListe
    18. TreeView1.Nodes.Add(verbindung.Name)
    19. Next

    Alternativ kannst Du Dir natürlich auch Deine etwas magere Klasse Zuordnung etwas aufpeppen, indem Du einen Konstruktor Sub New einfügst als auch die Liste der Instanzen mit einfügst, so dass alles Wesentliche in der Klasse zusammengefasst ist:

    VB.NET-Quellcode

    1. ' Klasse Zuordnung
    2. Public Class Zuordnung
    3. ' Constructor
    4. Public Sub New(ByVal name As String, ByVal pfad As String)
    5. Me.Name = name : Me.Pfad = pfad
    6. List.Add(Me) ' Instanz zur statischen Liste hinzufügen
    7. End Sub
    8. ' Liste aller Instanzen als statische (shared) Liste
    9. Public Shared List As New List(Of Zuordnung)
    10. ' öffentliche Member
    11. Public Name As String
    12. Public Pfad As String
    13. End Class
    14. ...
    15. While mydata.Read
    16. If mydata(1).Length = 1 Then New Zuordnung(mydata(0), "irgendeinpfad")
    17. End While
    18. ....
    19. ' alle Instanzen durchlaufen
    20. For Each verbindung As Zuordnung In ZuordnungsListe
    21. TreeView1.Nodes.Add(verbindung.Name)
    22. Next

    Aber von der Funktion her ist das genau das Gleiche wie der vorherige Code, und es ist mehr oder minder Geschmackssache welchen Du verwenden möchtest.
    Danke Kanagroo, das hat mich echt schon sehr viel weiter gebracht ! Ich kenne es nicht so, dass man die Objekte in eine Liste machen muss.

    Aber als was muss ich die "ZuordnungsListe" im 2ten Programmbeispiel deklarieren ? Ist es überhaupt sinnvoll noch eine zweite Liste zu erstellen? Die Liste bbefindet sich ja schon in der Klasse als Public Shared oder?

    Grüße
    TimBo
    Visual Basic FTW :D
    Programmiere u.a. mit C# (XNA), Blitz Basic 3D, BlitzPlus , PHP.

    TimBo93 schrieb:

    Aber als was muss ich die "ZuordnungsListe" im 2ten Programmbeispiel deklarieren ? Ist es überhaupt sinnvoll noch eine zweite Liste zu erstellen? Die Liste bbefindet sich ja schon in der Klasse als Public Shared oder?

    *hust* das war nur da um zu sehen ob Du aufgepasst hast :rolleyes:

    Das war bei Copy & Paste in der Eile so reingerutscht, natürlich hast Du recht und es muss da heissen

    VB.NET-Quellcode

    1. ' alle Instanzen durchlaufen
    2. For Each verbindung As Zuordnung In Zuordnung.Liste
    3. TreeView1.Nodes.Add(verbindung.Name)
    4. Next

    Shared Member / Methoden werden immer mit dem Klassennamen angesprochen, nicht mit dem Namen einer Instanz.

    Sry
    kein sry !
    jetzt geht es :)

    Jetzt kann ich mit dem "programmieren" anfangen und komplexere Sachen in die Hand nehmen.
    Visual Basic FTW :D
    Programmiere u.a. mit C# (XNA), Blitz Basic 3D, BlitzPlus , PHP.