AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Zugriff auf Klasseneigenschaften -- Verstehe die Fehlermledung nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Klasseneigenschaften -- Verstehe die Fehlermledung nicht

Ein Thema von Jazzman_Marburg · begonnen am 7. Aug 2011 · letzter Beitrag vom 10. Aug 2011
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.829 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
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


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 03:36 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