AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

@self abhängig von Codeposition

Ein Thema von hackerknecht · begonnen am 8. Jun 2005 · letzter Beitrag vom 8. Jun 2005
Antwort Antwort
hackerknecht

Registriert seit: 8. Jun 2005
2 Beiträge
 
#1

@self abhängig von Codeposition

  Alt 8. Jun 2005, 07:31
@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:
function Klasse.IAM : pointer;
begin
 result := @self;
end;
so macht es in der Kindklasse einen Unterschied ob die überschriebene IAM
eben obigen Code genauso ausführt, oder
Delphi-Quellcode:
function KindKlasse.IAM : pointer;
begin
/// result := @self;
 result := inherited IAM;
end;
verwendet wird.
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.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: @self abhängig von Codeposition

  Alt 8. Jun 2005, 07:35
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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: @self abhängig von Codeposition

  Alt 8. Jun 2005, 07:59
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?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: @self abhängig von Codeposition

  Alt 8. Jun 2005, 08:28
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.
  Mit Zitat antworten Zitat
hackerknecht

Registriert seit: 8. Jun 2005
2 Beiträge
 
#5

Re: @self abhängig von Codeposition

  Alt 8. Jun 2005, 09:11
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 ...))
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: @self abhängig von Codeposition

  Alt 8. Jun 2005, 14:12
Also:

Wenn man eine Methode mit:

MyObj.MyMethode 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.

Da ich wirklich bei deinen ganzen Pointern nicht durchsehe, hoffe ich, dass dir das bissle hilft.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#7

Re: @self abhängig von Codeposition

  Alt 8. Jun 2005, 14:32
Zitat von hackerknecht:
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 ...))
hmm, objekte sind ja schon zeiger, wozu also dieses komplizierte self-pointer-abstrakt-blah-konstrukt

wenn du uns an deinem code (oder schnippsel davon) teilhaben lässt, wird sich vieles vllt erklären - oder vereinfachen - lassen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz