mehrere Instanzen einer Klasse gleichem Namen



  • ahoi,

    kann sein das ich gerade auf dem schlauch stehe, aber ich wollte von einer selbsterstellten klasse, welche von panel erbt, mehrere instanzen erzeugt.
    jetzt war ich der meinung, dass alle erzeugten objekte einen unterschiedlichen namen besitzen müssen, aber irgendwie muss das wohl nicht sein.
    Beispiel:

    so hätte ich es gemacht:

    this->ausgabe=gcnew Ausgabe();
    	this->ausgabe->Location=System::Drawing::Point(20,30);
    	this->Controls->Add(this->ausgabe);
    
            this->ausgabe1=gcnew Ausgabe());
    	this->ausgabe1->Location=System::Drawing::Point(20,30);
    	this->Controls->Add(this->ausgabe1);
    

    So geht es aber auch, und dabei besitzt jede instanz den selben bezeichner. 100 objekte mit selben namen?das sollte doch nicht so sein oder?

    for (int i=0;i<=10;i++){
    this->ausgabe=gcnew Ausgabe();
    	this->ausgabe->Location=System::Drawing::Point(20*i,30*i);
    	this->Controls->Add(this->ausgabe);
    }
    

    wie will ich denn dann exklusiv auf ein objekt zugreifen, wenn alle gleich heissen?es lässt sich nämlich nur auf das letzte objekt zugreifen das erstellt wurde, richtig?ist das ganze denn legitim?



  • Dein Member ausgabe enthält beim unteren Code Abschnitt eine Referenz auf die zuletz erzeugte Ausgabe Instanz. Ich denke nicht, dass Du nur Zugriff auf das letze erzeugte Ausgabe Objekt möchtest.

    (Indem Du dein neu erzeugtes Objekt mit x.Controls.Add(..) hinzufügst, wird es dargestellt.)

    Wenn Du Zugriff auf die einzelenen Ausgabe Objekte benötigst musst entweder in der Controls Liste suchen oder Du hältst Dir, wie im ersten Code Abschnitt eben einzelne Referenzen. Alternativ könntest Du Dir auch ein Dictionary (einzelne Objekte ansprechbar über einen beliebigen Key) oder eine separate Liste (einzelne Objekte ansprechbar über den Index) mit Referenzen auf die Ausgabe Objekte halten.

    Simon



  • also ist es ein legitimes mittel, mehrere objekte mit ein und der selben bezeichnung zu erstellen?



  • wanderameise schrieb:

    also ist es ein legitimes mittel, mehrere objekte mit ein und der selben bezeichnung zu erstellen?

    Kann so nicht gesagt werden, weils das nicht gibt.
    Es ist folgendermassen:
    Esgibt mehrere Objekte (soviele wie Du halt erzeugst). Und nur ein managed Handle (Bezeichener ausgabe).

    Ich mach mal ein Bsp. mit Kommentaren:

    ref class A
    {
    public:
       int v;
    };
    
    void f()
    {
       A^ a = nullptr; // Managed Handle
       a = gcnew A();  // In a steht jetzt ein managed Handle Wert, der auf das neu erzeugt Objekt vom Typ A() verweist.
       int w = a->v;   // Zugriff via managed Handle a.
    
       a = gcnew A();  // Zweites Objekt vom Typ A wird erzeugt und managed Handle darauf in a gespeichert. Nun hast Du KEIN Zugriff mehr auf das erste Objekt!!
       int q = a->v;   // Zugriff auf Member vom 2. Objekt!!
    }
    


  • ja ok danke erstmal


Anmelden zum Antworten