![]() |
Was ist Self/ warum greift Self zu
Moin,
ich befasse mich gerade mit oop in Delphi. Nun hab ich ein Problem mit Self. Ich dachte bis jetzt immer, dass Self der Objektvariablen entspricht, dem ist aber anscheinend nicht so. Ein wenig Quelltext zur Verdeutlichung.
Delphi-Quellcode:
Ich fasse das nun so auf, dass Self nicht wirklich auf den Speicherbereich des Objektes verweißt. Kann ich diese Referenz irgendwie bekommen???
...
ActiveClass:=^TMeineKlasse Procedure TMeineKlasse.SetActive; Begin ActiveClass:=@Self; End; ... Meins:=TMeineKlasse.Create(Self); Meins.SetActive; if @Meins <> ActiveClass then showmessage('Unterschied'); Gruß Bomber [edit=SirThornberry]aussagekräftigeren Titel vergeben - Mfg, SirThornberry[/edit] |
Re: self
Self enthält den selben Inhalt wie die Instanzvariable. Wenn du also deine Zeigerspielchen weglässt und ActiveClass als TMeineKlasse deklarierst, solltest du ein anderes Ergebnis erhalten.
Übrigens: Wie sollten denn self und MeineKlasse - zwei verschiedene Variablen - den selben Speicherbereich teilen? Nochwas: Klassen und Zeiger sind in der Regel nicht nötig, da Klassen implizit schon Zeiger sind. |
Re: self
Nicht zu viel C++-Verzeigerung (Das drüben bin ich).
Delphi-Quellcode:
ActiveClass: TMeineKlasse;
Procedure TMeineKlasse.SetActive; Begin ActiveClass := Self; End Meins := TMeineKlasse.Create(Self); Meins.SetActive; if Meins <> ActiveClass then showmessage('Unterschied'); |
Re: self
Ich weiss nicht, ob Dir das weiterhilft:
Self ist immer das Formular, in dem Du Dich gerade bewegst. |
Re: self
Falsch. Self ist die Objektinstanz mit der eine Methode aufgerufen wird. Das ist nur ein Formular, wenn du dich in einer Methode von TForm oder eines abgeleiteten TFormxxx bewegst.
|
Re: self
Nun ich dachte bis jetzt, Self würde direct auf die Objektvariable verweisen. Habe das inwischen auch ohne Zeiger gelöst. Wollte jetzt nur mal wissen wie sich das verhält.
Wenn Self eine zweite Variable mit dem selben Inhalt ist, wie die Objektvariable, dann ist mir alles klar. Danke!!! |
Re: self
Zitat:
|
Re: self
Hab schon wieder ein ähnliches Problem. Gibt es generell irgendeine Möglichkeit einen Zeiger auf das Object zu bekommen?
|
Re: self
du musst sagen was du genau willst.
Die Klasse ist der Bauplan (zur Verdeutlichung der Bauplan eines hauses). Mit Klasse.Create wird der Bauplan umgesetzt (das Haus gebaut). Und eine Objectinstanz ist intern ein Pointer der auf den umgesetzten Bauplan zeigt (Als würde dir jemand sagen: Das Haus steht in der Badstraße 5) Self bezieht sich also auf das Haus in dem du stehst und nicht auf irgend einen Wegweiser oder eine Wegbeschreibung. Was meinst du jetzt also mit "Zeiger auf das Object" Wenn das "Object" das Haus selbst ist wäre ein "Zeiger auf das Object" also der Wegweiser, also eine Objectinstanz. |
Re: self
Ich brauche während der Klassenmethoden z.B.
TMeineClasse.create den pointer, der sich außerhalb der Klasse so ergeben würde. Objekt := TMeineKlasse.Create(Form1); pointer:=@Objekt; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz