Delphi: Zeiger vom Klassenzeiger?



  • Hallo,

    gibt es in Delphi Zeiger vom Klassenzeiger (also praktisch doppel Zeiger? In C++ **TForm).

    Konkret möchte ich einer anderen Form einen Klassenzeiger übergeben. Die Form soll aber nicht nur drauf zugreifen können, sondern auch eine neue Klasse erzeugen dürfen. Ich kann zwar den Zeiger per VAR übergeben, jedoch habe ich noch keine Möglichkeit gefunden, das als VAR auch abzuspeichern.

    Danke!



  • Original erstellt von Loggy:
    **
    Die Form soll aber nicht nur drauf zugreifen können, sondern auch eine neue Klasse erzeugen dürfen.
    **

    Du meinst: du möchtest eine neue Instanz einer Klasse erzeugen.
    Warum erstellst du nicht eine neue:
    - Variable anlegen: var MyClass: TMyClass;
    - Konstruktor aufrufen: MyClass := TMyClass.Create;
    - Instanz verwenden
    - zum Schluss indirekt den Destruktor aufrufen: MyClass.Free;



  • Ne, nicht ganz.

    Ich möchte den Klassenzeiger an ein neues Form übergeben. Dann in einer OnClick (oder eine andere On... Methode) möchte ich die Klasse freigeben und neu erstellen.

    In der anderen Klasse (die den Zeiger übergeben hat) soll der Klassenzeiger dann aber nicht auf die alte Klasse (die es dann ja nicht mehr gibt), sondern auf die neu erstellte zeigen.

    Möglich wäre natürlich, dass ich in die Klasse Methoden einbaue, die die Klasse zurücksetzen können (als wäre sie neu erstellt), da ich dafür aber ja schon die Construktor Methoden habe, wäre das zusätzliche arbeit.

    Ich hoffe ihr versteht, was ich meine.



  • Registrier dich doch mal hier: www.delphipraxis.net und frag dann auch mal da. Eventuell kann man dir da besser helfen.



  • in Delphi sind Klassen doch sowieso so'n Zwischending zwischen Referenz und Zeiger.

    -> Destruktor der Klasse aufrufen. Danach Konstruktor aufrufen -> fertig. Alle Referenzen dieser Klasse verweisen auf die neu instanziierte.



  • Mhmm, gute Idee.

    Muss das also gar nicht in der Form:

    Klasse := TKlasse.Create;

    machen? Denn hierbei würde ja die Referenz geändert und wenn ich davon eine Kopie hätte, würde die nicht mitgeändert (bei einer Änderung der Klasse schon, aber hier ändere ich ja die Referenz).

    Du meinst also so:

    Klasse.Free;
    Klasse.Create;

    ?

    Danke!

    [ Dieser Beitrag wurde am 13.12.2002 um 15:29 Uhr von Loggy editiert. ]



  • genau so mein ich das.

    Muss Dir allerdings sagen, dass mein Delphi-Wissen auf TurboPascal 6.0 zurückgeht und dass es ein paar Jährchen her ist, seit ich was mit gemacht hab. Is also nur so ne Idee, obs funzt, weiß ich net.



  • Ein Tipp: Ich glaube du verwechselst die Begriffe Klasse und Objekt.
    Eine Klasse ist die Beschreibung eines Objekts, das Objekt ist eine konkrete
    verwirklichung.
    Beispiel: Nach einem Bauplan für einen Tisch (die Klasse) baust du einen
    realen Tisch (das Objekt).
    Objekte werden häufig auch als Instanz der Klasse genannt.
    In Delphi musst den Konstruktor / Destruktor immer explizit aufrufen:

    var Klasse :TKlasse;
    
    Klasse := TKlasse.Create;  //nie Klasse.Create;
    
    //....
    
    Klasse.Free;
    

    Dein vorhaben ist - soweit ich das verstehe - aus Sicht "hübscher" objekt-
    orientierter Programmierung ein wenig wirr. Nebeinbei hört es sich
    nach meinen Delphierfahrungen gefährlich an: Delphi hat viele Fallstricke
    und versteckte Fehler, die nicht unbedingt logisch nachvollziehbar sind.
    Ich kann mir vorstellen, dass eine Lösung, wie du sie andenkst, dein
    Programm spontan zum Absturz bringen kann - aber wer weiß, vielleicht macht
    Delphi auch mal was richtig 😃

    Bist du sicher, dass dein Problem nicht irgentwie anders zu lösen ist???



  • Naja, egal. Erstelle ich eben extra Methoden.

    Finds aber schon komisch, dass ich keinen Zeiger auf einen Klassenzeiger erstellen kann (in C++ kein Problem). Oder doch?


Anmelden zum Antworten