AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Understanding Class Defination

Ein Thema von ATS3788 · begonnen am 12. Feb 2015 · letzter Beitrag vom 16. Feb 2015
Antwort Antwort
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#1

Understanding Class Defination

  Alt 12. Feb 2015, 09:18
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;
Martin MIchael
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Understanding Class Defination

  Alt 12. Feb 2015, 09:27
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Understanding Class Defination

  Alt 12. Feb 2015, 09:40
http://docwiki.embarcadero.com/RADSt...lassenmethoden
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Understanding Class Defination

  Alt 12. Feb 2015, 09:42
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 class property für class var, was dann globale Variablen sind, die auch schön zugeordnet sind.
Und natürlich noch der class constructor und class destructor , was dem initialization und 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.014 Beiträge
 
Delphi 12 Athens
 
#5

AW: Understanding Class Defination

  Alt 12. Feb 2015, 11:24
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 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 virtual/override Methode, aber sie steht eben bereits zur Verfügung, bevor die eigentliche Klasseninstanz erzeugt wird.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Understanding Class Defination

  Alt 12. Feb 2015, 11:31
Nja, wenn dich der Compiler zwingt es static zu machen, wenn man sich Getter und Setter für sein class property bastelt, dann bringt das auch nicht viel,
aber ansonsten hast du Recht.

Außerdem haben nicht-statische Klassenmethoden auch den versteckten Self -Parameter, in welchem der Typ drin steht, mit welchem diese Methode aufgerufen wurde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Feb 2015 um 11:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Understanding Class Defination

  Alt 12. Feb 2015, 11:44
Und das mit dem 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.
TBar.Construct ruft die geerbte Klassenmethode von TFoo auf, da aber dort mit Self.Create die Instanz erzeugt wird, bekommen wir auch tatsächlich eine TBar Instanz zurück
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#8

AW: Understanding Class Defination

  Alt 16. Feb 2015, 06:27
Danke euch allen
Eine schöne Woche

Martin Michael
Martin MIchael
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:27 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