![]() |
@self abhängig von Codeposition
@self ist sicher keine unkritische Sache, da in der Regel die Arbeit mit SELF wohl ausreicht.
Haben wir 2 Klassen mit einer virtuellen
Delphi-Quellcode:
so macht es in der Kindklasse einen Unterschied ob die überschriebene IAM
function Klasse.IAM : pointer;
begin result := @self; end; eben obigen Code genauso ausführt, oder
Delphi-Quellcode:
verwendet wird. :wall:
function KindKlasse.IAM : pointer;
begin /// result := @self; result := inherited IAM; end; Ist das ein Fehler ?? vom Compiler ? Ich meine eine Membervariable, sollte doch immer den gleichen Wert liefern, egal wo in der Hirachie diese verwendet wird. |
Re: @self abhängig von Codeposition
Self ist eine Variable die auf dem Stack abgelegt wird. Dementsprechend bekommst du Probleme, wenn du einen Pointer auf Self zurückgibts. Die Frage ist wozu du eine Funktion brauchst, die dir Self zurück liefert.
|
Re: @self abhängig von Codeposition
Wieso verwendest Du @self?
Wenn Du self und nicht @self verwendest sollte doch reichen oder was willst Du mit einem Pointer auf den Self-Pointer? |
Re: @self abhängig von Codeposition
Self ist wie bereits gesagt auf dem Stack abgelegt. Es ist einfach der erste Parameter einer Methode.
Eine class method hat als Self nicht den Zeiger auf die Instanz des Objekts sondern auf die Klasseninformationen sprich das Template fuer Instanzen. Parameter fallen unter die lokalen Variablen, die nach Ende der Methode ungueltig werden. |
Re: @self abhängig von Codeposition
Vielen Dank für Euere schnelle Hilfe !
Wenn self nur auf dem Stack liegt, ist das Problem mit @self klar. ( Hatte gehofft/gedacht, daß self mit/bei den Member-variablen gespeichert wird ) (( Wozu ?? Ich erstelle mehrere Indices auf Bäume von polymorphen Objecten zum Sortieren/Suchen. Bei einem Index "Name" z.B. muss das Object einen Pointer auf seinen Namen-Member liefern. @Fname z.B. , kommt dann ein anderer Index z.B. PLZ dann halt @FPLZ ec.. Diese pointer werden dann an entsprechende Vergleichsfunktionen weitergeliefert. Da einige Funktionen sehr abstrakt sind, arbeitet vieles nur mit Pointern. Bei einem komplexen Index, der nicht über einen einfachen Vergleich wie String- oder Integervergleich machbar ist, sondern nur über die Objecte, müssten dann die Objecte einen Zeiger auf sich selbst liefern können ...)) |
Re: @self abhängig von Codeposition
Also:
Wenn man eine Methode mit:
Delphi-Quellcode:
aufruft. Dann ist innerhalb von MyMethode Self einfach MyObj. Also musst du als Aufrufer der Methode Self kennen, da dies ja der Zeiger auf das eigentliche Objekt ist.
MyObj.MyMethode
Da ich wirklich bei deinen ganzen Pointern nicht durchsehe, hoffe ich, dass dir das bissle hilft. |
Re: @self abhängig von Codeposition
Zitat:
wenn du uns an deinem code (oder schnippsel davon) teilhaben lässt, wird sich vieles vllt erklären - oder vereinfachen - lassen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 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