![]() |
Delphi-Version: XE
Warum braucht Class Property einen Static-Getter?
Tachchen,
wieso müssen bei Class-Property die Getter/Setter eigentlich Static-Class-Methods sein?
Delphi-Quellcode:
Aber durch Static gibt es dann kein Self mehr und man kann nicht mehr den Klassentyp einer abgeleiteten Klasse auslesen. :(
class function MyGetter: TObject; {static}
class property MyClass: TObject read MyGetter; //verlangt static |
AW: Warum braucht Class Property einen Static-Getter?
Zitat:
![]() Kann man wohl nichts machen |
AW: Warum braucht Class Property einen Static-Getter?
Zitat:
Was hast Du denn eigentlich vor, dass Du so ein Kronstrukt benötigst? Gruß aus dem hohen Norden Thomas |
AW: Warum braucht Class Property einen Static-Getter?
Zitat:
|
AW: Warum braucht Class Property einen Static-Getter?
Zitat:
Wie der Compiler es konkret handhabt, weiß ich gerade nicht, aber ich würde vermuten, dass er entweder sagt "undefinierter Bezeichner" oder es einfach stur durch den Klassennamen ersetzt. Ein vernünftiger Grund, weshalb Property-Getter statisch sein müssen, fällt mir spontan nicht ein. Faulheit der Compilerentwickler? |
AW: Warum braucht Class Property einen Static-Getter?
Nicht Static-Methoden kennen ihren Nachfahren.
Ein Property ist doch eigentlich nur ein "Alias" für den Getter, also sollte das doch mit dem Static eigentlich nichts zu tun haben :wall: Self ist ein unsichtbarer Parameter, der als erstes in der Parameterliste drinsteht. Nur bei Static gibt es diesen Parameter nicht. Das sieht intern wie eine "normale" Funktion, so als wäre sie nicht in einer Klasse drin.
Delphi-Quellcode:
type
TMyClass = class function Method: string; class function ClassMethod: string; class function StaticMethod: string; static; end; TOtherClass = class(TMyClass); end; function TMyClass.Method: string; begin // Self = die Instanz (TObject) // ClassType = TMyClass oder TOtherClass Result := ClassName; // MyClassType={Self.}ClassType / MyClassType=Self.ClassType end; class function TMyClass.ClassMethod: string; begin // Self = der Klassentyp (TClass) // ClassType = TMyClass oder TOtherClass Result := ClassName; // MyClassType=Self end; class function TMyClass.StaticMethod: string; begin // Self gibt es nicht // kennt nur sich und nicht den Nachfahren Result := 'k.A.'; end;
Code:
MyObj.Method TMyClass
OtherObj.Method TOtherClass TMyClass.Method geht natürlich nicht TOtherClass.Method geht natürlich nicht MyObj.ClassMethod TMyClass OtherObj.ClassMethod TOtherClass TMyClass.ClassMethod TMyClass TOtherClass.ClassMethod TOtherClass MyObj.StaticMethod k.A. OtherObj.StaticMethod k.A. TMyClass.StaticMethod k.A. TOtherClass.StaticMethod k.A. |
AW: Warum braucht Class Property einen Static-Getter?
Zitat:
Delphi-Quellcode:
Geht das?
Type
TMyClass = class class function StaticMethod; virtual; static; end; TOtherClass = class(TMyClass) class fnction StaticMethod; override; static; end; class function TMyClass.StaticMethod: string; begin Result := 'TMyClass'; end; class function TOtherClass .StaticMethod: string; begin Result := TOtherClass ; end; |
AW: Warum braucht Class Property einen Static-Getter?
Zitat:
Delphi-Quellcode:
type
TMyBaseClass = class public class procedure Execute; end; TMyClass1 = class(TMyBaseClass); TMyClass2 = class(TMyBaseClass); class procedure TMyBaseClass.Execute; var instance: TMyBaseClass; begin instance := Self.Create; try ... finally instance.Free; end; end; begin TMyClass1.Execute; // erzeugt ein TMyClass1 TMyClass2.Execute; // erzeugt ein TMyClass2 end; |
AW: Warum braucht Class Property einen Static-Getter?
Einen nicht static Getter bräuchte man, wenn
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:48 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 by Thomas Breitkreuz