Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.529 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zugriff auf Klasseneigenschaften -- Verstehe die Fehlermledung nicht

  Alt 7. Aug 2011, 16:00
Die Ursache ist wohl einfach nur, daß solche Klasseneigenschaften, aus irgendwelchen unerfindlichen Gründen, keine "Vererbung" unterstützen.
Darum auch nur direkte Klassenvariablen oder statische Klassenmethoden.

Also im Grunde hatte dir doch die Fehlermeldung ja genau gesagt, was somit nötig wäre.

Die Aufrufkonventionen zwischen eine Klassenmethode und einer statischen Klassenmethode sind halt ein bissl unterschiedlich.
Denn statische Klassenmethoden besitzen kein Self.

Bei den sonstigen Methoden wird über Self der Klassentyp mitgegeben, über welchen die Methode aufgerufen wurde.
(bei "normalen" Methoden steckt in Self natürlich die Objekt-Instanz)
Delphi-Quellcode:
TForm1 = class(TForm)
  class procedure ClassMethod(i: Integer);
  class procedure StaticClassMethod(i: Integer); static;
  class procedure VirtualClassMethod(i: Integer); virtual;
end;


ClassMethod(123);
StaticClassMethod(456);
VirtualClassMethod(789);


Unit1.pas.37: ClassMethod(123);
004A0ECF BA7B000000 mov edx,$0000007b
004A0ED4 8B03 mov eax,[ebx]
004A0ED6 E8E9FFFFFF call TForm1.ClassMethod

Unit1.pas.38: StaticClassMethod(456);
004A0EDB B8C8010000 mov eax,$000001c8
004A0EE0 E80F000000 call TForm1.StaticClassMethod

Unit1.pas.39: VirtualClassMethod(789);
004A0EE5 BA15030000 mov edx,$00000315
004A0EEA 8B03 mov eax,[ebx]
004A0EEC FF9018010000 call dword ptr [eax+$00000118]

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    class procedure ClassMethod(i: Integer);
    class procedure StaticClassMethod(i: Integer); static;
  end;

  TFormX = class(TForm1)
  end;

class procedure TForm1.ClassMethod(i: Integer);
begin
  ShowMessage(Format('%s %s %d', [Self.ClassName, ClassName, i]));
end;

class procedure TForm1.StaticClassMethod(i: Integer);
begin
  ShowMessage(Format('%s %d', [ClassName, i]));
end;

TFormX.ClassMethod(123);
TFormX.StaticClassMethod(456);

// TFormX TFormX 123
// TForm1 456
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat