Einzelnen Beitrag anzeigen

Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#13

Re: property setzen bzw. ändern

  Alt 21. Apr 2004, 11:24
Zitat von Muetze1:
...
Nicht ganz richtig: Der Zugriff auf nicht statische Klassenmethoden ist bei einer Instanzenvariable von Nil nicht möglich, da der Compiler automatisch Code für den Zugriff auf die VMT erzeugt um die Adresse der Methode zu ermitteln. Somit wäre die Methodenadresse um dorthin zu springen an der Stelle hinterlegt (Instanz + VMT Eintragsoffset) z.B. NIL+$08 - was aber dann eine EAccessViolation bei $000008 erzeugt, wenn er die Adresse holen will.
Das geht nur mit statischen Funktionen (das ist der Name in C++, Delphi nennt das Class Procedure/Function).
...
Leider muss ich dich enttäuschen Du gehst davon aus, dass die methoden vom object-pointer aussgehend addressiert werden (nil+&80), das würde nur sinn machen wenn jedes object sich eine kopie der methoden einer klasse anlegt. Dem ist nicht so! Sondern die methode werden vom klassen-pointer ausgehend addressiert und der objekt-pointer wird als unsichtbarer self-parameter übergeben. Deshalt funktioniert dies auch, da ich nicht auf objekt-felder zugreife:

Delphi-Quellcode:
type
  TTest = class
    procedure NoStatic(str:string);
  end;

{ TTest }

procedure TTest.NoStatic(str: string);
begin
  ShowMessage(str);
end;

procedure TForm1.Button1Click(Sender: TObject);
var x:TTest;
begin
  x.NoStatic('No Exception');
end;
zB. unser schöne free würde sonst auch keinen sinn machen
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat