none
Klassen und List(Of T) RRS feed

  • Frage

  • Guten Tag,

    ich habe eine Klasse (Schwankung). Diese wird in einem anderen Modul mehrfach
    Instantiiert. 

    SW = New Schwankung

    Jetzt meine Frage: Zum Start des Programms können z.B. vier Instanzen erzeugt werden.
    Zu einem späteren Zeitpunkt können mehrere Instanzen hinzukommen oder wegfallen.
    Hinzufügen ist ja kein Problem. Nur das Löschen einer bestimmten Instanz scheint nicht so einfach zu gehen. Müsste ich jede Instanz in einer List(Of T) speichern. Oder? Wäre zumindest ein Ansatz. Wie müßte ich diese List declarieren?

    Gruß Olaf 


    Olafx

    Sonntag, 24. August 2014 15:17

Antworten

  • Hallo,
    so ganz verstehe ich dich nicht. Wenn du mehrere Instanzen hast, und die Anzahl zur Laufzeit unterschiedlich ist brauchst du eine Liste zum Abspeichern. Beispielsweise die von dir vorgeschlagene List(of T):

    'Liste in Klasse oder Modul deklarieren und zuweisen'
    Dim myInstances As New List(Of Schwankung)

    Wenn du nun eine neue Instanz erstellst, kannst du sie einfach hinzufügen:

    Dim myNewInstance as new Schwankung()
    'Zuweisung von Eigenschaften usw.'
    myInstances.Add(myNewInstance)

    Das Abrufen geschieht über den Index in der Liste:

    '1. Element abrufen'
    dim myInstance = myNewInstances(0)
    'Mache etwas mit "myInstance"'

    Oder alle in einer For Each Schleife:

    For Each instance In myInstances
      'verarbeite instance'
    Next

    Das Löschen geht über den Index:

    'Entfernt 1. Item'
    myInstances.RemoveAt(0)

    oder über die Instanz selbst:

    'Entfernt das Element myInstance'
    myInstances.Remove(myInstance)

    Die List(Of T)-Klasse hat noch viele weitere Methoden, die du in der MSDN findest.


    PS: Fürs verständnis. Eine List(Of T) ist eine Liste mit mehreren Elementen. Wenn du also irgend etwas mit einem bestimmten Element machen willst, musst du dieses erst heraus "picken". Das geht i.d.R. über den Index.

    PPS: Verwechsle in meinen Beispielen myInstance nicht mit myInstances ;)


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Sonntag, 24. August 2014 16:27
    Moderator

Alle Antworten

  • Hier mal gefummel:

    Dim Test As New List(Of Schwankung)
            Test.Add(New Schwankung(1))
    
            Debug.Print(Test.Last.ToString)

    Jetzt kann ich aber nicht auf die Rückgabewerte zugreifen.

    Normalerweise wäre die Klasse so:

    Dim Test as New Schwankung(1)

    Test.Ausgabewert

    Oder Eingabewert für eine Sub

    Test.Schwankung(Kurs)

    Beides fehlt in der List(Of T). Ich erstelle ja eine List und keine Instanz der Klasse. Oder?

    Wie könnte ich das Lösen?

    Gruß Olaf


    Olafx

    Sonntag, 24. August 2014 16:22
  • Hallo,
    so ganz verstehe ich dich nicht. Wenn du mehrere Instanzen hast, und die Anzahl zur Laufzeit unterschiedlich ist brauchst du eine Liste zum Abspeichern. Beispielsweise die von dir vorgeschlagene List(of T):

    'Liste in Klasse oder Modul deklarieren und zuweisen'
    Dim myInstances As New List(Of Schwankung)

    Wenn du nun eine neue Instanz erstellst, kannst du sie einfach hinzufügen:

    Dim myNewInstance as new Schwankung()
    'Zuweisung von Eigenschaften usw.'
    myInstances.Add(myNewInstance)

    Das Abrufen geschieht über den Index in der Liste:

    '1. Element abrufen'
    dim myInstance = myNewInstances(0)
    'Mache etwas mit "myInstance"'

    Oder alle in einer For Each Schleife:

    For Each instance In myInstances
      'verarbeite instance'
    Next

    Das Löschen geht über den Index:

    'Entfernt 1. Item'
    myInstances.RemoveAt(0)

    oder über die Instanz selbst:

    'Entfernt das Element myInstance'
    myInstances.Remove(myInstance)

    Die List(Of T)-Klasse hat noch viele weitere Methoden, die du in der MSDN findest.


    PS: Fürs verständnis. Eine List(Of T) ist eine Liste mit mehreren Elementen. Wenn du also irgend etwas mit einem bestimmten Element machen willst, musst du dieses erst heraus "picken". Das geht i.d.R. über den Index.

    PPS: Verwechsle in meinen Beispielen myInstance nicht mit myInstances ;)


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Sonntag, 24. August 2014 16:27
    Moderator
  • Hallo Tom,

    Danke für die Hilfe. 
    Das hat mir sehr geholfen.

    Gruß Olaf


    Olafx

    Sonntag, 24. August 2014 17:30