![]() |
Understanding Class Defination
Hallo Freunde
Was eine Klasse "class" das ist klar Nur für was benutzt man s.u. für eine Funktion den class Ausdruck. Also Result := 'APPLICATION'; wird überschrieben. Aber geht dies nicht auch ohne class ?
Delphi-Quellcode:
type
TFormMain = class(TUIRibbonForm) procedure FormContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); private { Private declarations } FCurrentContext: Integer; FCommandContexts: array [0..3] of TUICommandBoolean; private procedure ContextToggle(const Args: TUICommandBooleanEventArgs); strict protected procedure RibbonLoaded; override; public { Public declarations } class function RibbonResourceName: String; override; //// Hier dies class meine ich end; -------------------------------------------------------- { Returns the name of the ribbon resource. By default, this is 'APPLICATION', which is the name the Ribbon Compiler uses when no name is specified. If you specified a name to the Ribbon Compiler (using then /name switch), then you need to override this function and return that name. Specifying an incorrect name will cause an exception on startup. } class function RibbonResourceName: String; virtual; class function TUIRibbonForm.RibbonResourceName: String; begin Result := 'APPLICATION'; end; |
AW: Understanding Class Defination
Eine Klassenmethode gehört zur Klasse und nicht zu einer Instanz der Klasse. Sie wird auf die Klasse (Typ) aufgerufen und nicht über das Objekt. Es wird kein instantiiertes Objekt benötigt. Der Konstruktor ist auch eine Art von Klassenmethode.
|
AW: Understanding Class Defination
|
AW: Understanding Class Defination
Das ist wie eine "billige" Prozedur nur daß sie nicht irgendwo ungeliebt rumgammelt, sonder schön dort zugeordnet ist, wozu sie gehört.
Genauso gibt es auch
Delphi-Quellcode:
für class var, was dann globale Variablen sind, die auch schön zugeordnet sind.
class property
Und natürlich noch der
Delphi-Quellcode:
und
class constructor
Delphi-Quellcode:
, was dem
class destructor
Delphi-Quellcode:
und
initialization
Delphi-Quellcode:
entspricht, aber einige nette Vorteile hat, also wieder die Zuordnung/Kapselung und vorallem daß es nicht ausgeführt wird, wenn man die Klasse nirgendwo verwendet hat ... gerade das ist ein Grund, warum bei RTL/VCL so viel sinnloses und ungenutztes Zeug geladen wird, nur weil man zufällig die Unit direkt oder indirekt eingebunden hat.
finalization
|
AW: Understanding Class Defination
Zitat:
Delphi-Quellcode:
ist es eben keine "billige" Prozedur mehr. Damit lässt sich nämlich das interne Verhalten des TUIRibbonForm in der abgeleiteten Klasse nachträglich manipulieren, was mit einer "billigen" Prozedur eben nicht ginge. Es ist schon eher wie eine normale
virtual/override
Delphi-Quellcode:
Methode, aber sie steht eben bereits zur Verfügung, bevor die eigentliche Klasseninstanz erzeugt wird.
virtual/override
|
AW: Understanding Class Defination
Nja, wenn dich der Compiler zwingt es
Delphi-Quellcode:
zu machen, wenn man sich Getter und Setter für sein
static
Delphi-Quellcode:
bastelt, dann bringt das auch nicht viel,
class property
aber ansonsten hast du Recht. :) Außerdem haben nicht-statische Klassenmethoden auch den versteckten
Delphi-Quellcode:
-Parameter, in welchem der Typ drin steht, mit welchem diese Methode aufgerufen wurde.
Self
|
AW: Understanding Class Defination
Und das mit dem
Delphi-Quellcode:
in der Klassenmethode ist auch gut so, denn dadurch geht das hier:
Self
Delphi-Quellcode:
program dp_183894;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; type TFoo = class public class function Construct: TFoo; end; TBar = class( TFoo ) end; { TFoo } class function TFoo.Construct: TFoo; begin Result := Self.Create; end; procedure Test; var LFoo: TFoo; begin LFoo := TBar.Construct; try Writeln( LFoo.ClassName ); finally LFoo.Free; end; end; begin try Test; except on E: Exception do Writeln( E.ClassName, ': ', E.Message ); end; ReadLn; end.
Delphi-Quellcode:
ruft die geerbte Klassenmethode von
TBar.Construct
Delphi-Quellcode:
auf, da aber dort mit
TFoo
Delphi-Quellcode:
die Instanz erzeugt wird, bekommen wir auch tatsächlich eine
Self.Create
Delphi-Quellcode:
Instanz zurück :)
TBar
|
AW: Understanding Class Defination
Danke euch allen
Eine schöne Woche Martin Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 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