Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Understanding Class Defination (https://www.delphipraxis.net/183894-understanding-class-defination.html)

ATS3788 12. Feb 2015 09:18

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;

mkinzler 12. Feb 2015 09:27

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.

DeddyH 12. Feb 2015 09:40

AW: Understanding Class Defination
 
http://docwiki.embarcadero.com/RADSt...lassenmethoden

himitsu 12. Feb 2015 09:42

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:
class property
für class var, was dann globale Variablen sind, die auch schön zugeordnet sind.
Und natürlich noch der
Delphi-Quellcode:
class constructor
und
Delphi-Quellcode:
class destructor
, was dem
Delphi-Quellcode:
initialization
und
Delphi-Quellcode:
finalization
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.

Uwe Raabe 12. Feb 2015 11:24

AW: Understanding Class Defination
 
Zitat:

Zitat von himitsu (Beitrag 1289626)
Das ist wie eine "billige" Prozedur nur daß sie nicht irgendwo ungeliebt rumgammelt, sonder schön dort zugeordnet ist, wozu sie gehört.

Durch das
Delphi-Quellcode:
virtual/override
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
Delphi-Quellcode:
virtual/override
Methode, aber sie steht eben bereits zur Verfügung, bevor die eigentliche Klasseninstanz erzeugt wird.

himitsu 12. Feb 2015 11:31

AW: Understanding Class Defination
 
Nja, wenn dich der Compiler zwingt es
Delphi-Quellcode:
static
zu machen, wenn man sich Getter und Setter für sein
Delphi-Quellcode:
class property
bastelt, dann bringt das auch nicht viel,
aber ansonsten hast du Recht. :)

Außerdem haben nicht-statische Klassenmethoden auch den versteckten
Delphi-Quellcode:
Self
-Parameter, in welchem der Typ drin steht, mit welchem diese Methode aufgerufen wurde.

Sir Rufo 12. Feb 2015 11:44

AW: Understanding Class Defination
 
Und das mit dem
Delphi-Quellcode:
Self
in der Klassenmethode ist auch gut so, denn dadurch geht das hier:
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:
TBar.Construct
ruft die geerbte Klassenmethode von
Delphi-Quellcode:
TFoo
auf, da aber dort mit
Delphi-Quellcode:
Self.Create
die Instanz erzeugt wird, bekommen wir auch tatsächlich eine
Delphi-Quellcode:
TBar
Instanz zurück :)

ATS3788 16. Feb 2015 06:27

AW: Understanding Class Defination
 
Danke euch allen
Eine schöne Woche

Martin Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz