Dynamisch Deklarieren / Instanzieren

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Dynamisch Deklarieren / Instanzieren

    Hey Leute.
    Ich hab da mal wieder eine Frage zum Deklarieren / Instanzieren.

    1. Wo ist der Unterschied??


    Ich habe mir eine Classe erstellt, die ich mit hilfe von Dim Liste as New MeineNeueClasse Deklariere / Instanziere
    Dahinter verbirgt sich eine "Form"
    Gehen wir mal davon aus, dass diese Deklaration durch einen Button_Click ausgeführt wird.

    Wenn ich nun den Button Drücke, erscheint wie gewollt meine Form Liste von "MeineNeueClasse"
    Wenn ich nochmal drücke, erscheint noch eine Form Liste von "MeineNeueClasse"

    Wie kann ich jetz die beiden "Listen" unterscheiden?? Sprich unterschiedlich ansprechen??
    Kann ich anstatt "Dim Liste as New MeineNeueClasse" vllt "Dim Liste(i) as New MeineNeueClasse erstellen?

    sprich, dass ich einen Index habe, worüber ich diese Anspreche??

    Hoffe ihr könnt mir helfen. Danke schonmal!!!!

    Gruß BlackWest
    Public / Private i as integer = 0

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Private
    Liste As New List(Of MeineNeueKlasse)

    liste.Add(New MeineNeueKlasse(i))
    i = i +1

    End Sub

    Test = MeineNeueClasse(i)

    so in etwa??? oder wie is das gemeint?
    Private deklerationen müssen immer außerhalb von Methoden und Funktionen stehen...die Variable i wird überhaupt nicht benötigt, da du da ebenfalls Liste.Count verwenden könntest...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hallo,

    also zunächst solltest du dich entscheiden, entweder deutsch: "Klasse" oder english: "Class" ;)

    nun zu deiner Frage: Deklarieren bedeutet Speicher im RAM für eine Variable zu reservieren.

    Dim i as MyClass-> Das ist eine Deklaration

    Instanzieren bedeutet soviel wie etwas in diesen reservierte Speicher legen:

    i = New MyClass oder Dim i As MyClass = New MyClass -> sind beides Instanzierungenm wobei das zweite eine Deklaration mit sofortiger Instanzierung ist.

    Zu deiner anderen Frage hat ja jvbsl schon geantwortet.
    Machen wir ein Beispiel

    VB.NET-Quellcode

    1. Dim instanz as meineKlasse
    2. instanz= new meineKlasse '<-- Instanz #1
    3. instanz=new MeineKlasse '<-- Instanz #2

    Dann hast Du 2 Instanzen von Deiner Klasse. Wird die erste nirgendwo sonst referenziert (ist sonst nirgendwo zugewiesen), so wird sie (irgendwann) von der Garbage Collection abgeräumt.

    Willst Du aber selber einen Überblick haben, wieviele Instanzen es gibt , tyxpisch z.B. für Sockets, dann ist eine gängige Methode in Deiner Klasse eine sogenannte Shared Liste/Array anzulegen, in der Du neue Instanzen im Constructor New hinzufügst und bei einem Dispose/Close wieder austrägst. Die Verwaltung übernisst Du in diesem Fall ...:

    VB.NET-Quellcode

    1. Class meineKlasse
    2. Public shared InstanzListe as List(of meineKlasse)
    3. Sub New()
    4. ' dein code beim anlegen einer neuen Instanz
    5. InstanzListe.Add(Me)
    6. End Sub


    Edit: ich bin zu langsam
    Ich bekomm das irgendwie noch nicht so ganz hin.
    Ich habe zwei Formen.. Form1 und Form1
    Form1 hat button1 und Button2
    Form2 hat nur eine Textbox1

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Liste As New List(Of Form2)
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Dim i As Integer
    5. For i = 0 To 4
    6. Liste.Add(New Form2)
    7. Form2.TextBox1.Text = i
    8. Next i
    9. End Sub
    10. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    11. Dim i As Integer
    12. For i = 0 To Liste.Count - 1
    13. MsgBox(Liste.Count)
    14. Next i
    15. End Sub
    16. End Class


    Laut MSGBox erstellt er wohl 5 mal die Form2, da diese die Zahl 5 ausgibt.
    Aber wie kann ich jezt aus diesem Programm auf die Einzelnen Form2 zugreifen und evtl die Textbox befüllen und mir den Inhalt in einer MsgBox anzeigen lassen?