Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Vorteil class function (https://www.delphipraxis.net/116681-vorteil-class-function.html)

Thomas Feichtner 4. Jul 2008 09:33


Vorteil class function
 
Hallo Zusammen.

Ich stoße beim durchforsten immer wieder auf class function.
Welche Vorteile/Nachteile hat es wenn man gewisse funktionen als class function ausführt?
Hier ein Beispiel beim Aufrufen einer Form.

Hier ohne Klassenfunktion
Delphi-Quellcode:
unit unit2;

interface

uses Windows, Buttons, Classes, ComCtrls, Controls, Forms, StdCtrls, ExtCtrls;

type
  TMyForm2 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
 
  function ShowMyForm(AOwner: TComponent): TModalResult;

implementation

{$R *.dfm}

function ShowMyForm(AOwner: TComponent): TModalResult;
var
  myForm2: TMyForm2;
begin
  Result := 0;
  try
    myForm := TMyForm2.Create(AOwner);
    Result := myForm.ShowModal;
  finally
    FreeAndNil(myForm);
  end;
end;
und hier mit Klassenfunktion
Delphi-Quellcode:
unit unit1;

interface

uses Windows, Buttons, Classes, ComCtrls, Controls, Forms, StdCtrls, ExtCtrls;

type
  TMyForm = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    class function ShowMyForm(AOwner: TComponent): TModalResult;
  end;

implementation

{$R *.dfm}

class function TLsBaseForm.ShowMyForm(AOwner: TComponent): TModalResult;
var
  myForm: TMyForm;
begin
  Result := 0;
  try
    myForm := Self.Create(AOwner);
    Result := myForm.ShowModal;
  finally
    FreeAndNil(myForm);
  end;
end;
Und hier die Unterschiede beim Aufrufen:
Delphi-Quellcode:
procedure TFrom3.Button1Click(Sender: TObject);
begin
  { ohne Klassenfunktion }
  unit2.ShowMyForm(Self);
  { mit Klassenfunktion }
  unit1.TMyFrom.ShowMyForm(Self);
end;
Danke für eure Antworten

spaxxn 4. Jul 2008 09:37

Re: Vorteil class function
 
Wenn du möchtest, dass Formulare nicht zur Erzeugungszeit miterzeugt werden, sondern du sie erst dann erzeugen möchtest, wenn sie auch angezeigt werden, dann realisiert man das so oder zumindest in der Art.

Das dient in erster Linie dazu, den Speicherverbrauch einer Anwendung nicht unnötig aufzublähen.

Edit: Hatte mich verlesen, der Bezug von dem was ich geschrieben habe zu deiner Frage ist gleich null ;)

Auf DSDT gibt es das dazu

Sherlock 4. Jul 2008 09:40

Re: Vorteil class function
 
Zitat:

Zitat von spaxxn
Wenn du möchtest, dass Formulare nicht zur Erzeugungszeit miterzeugt werden, sondern du sie erst dann erzeugen möchtest, wenn sie auch angezeigt werden, dann realisiert man das so oder zumindest in der Art.

Das ist ja im ersten Moment nicht unbedingt ein Grund.

Die zitierte Aussage ergänzt um: "Funktionen die nicht in der Formularklasse definiert sind, sind bereits vor Erzeugung des Formulars verfügbar."

Macht den sinn vielleicht deutlicher.

Edit @Spaxxn: Ja, das hatte ich mir fast gedacht, und versucht zu retten ;)


Sherlock

taaktaak 4. Jul 2008 09:44

Re: Vorteil class function
 
Wenn ich mich da mal einklinken darf:
Das ist doch aber bereits der Fall, wenn die Funktion als Methode im public-Abschnitt genannt wird - oder? Was erreiche ich mit dem Zusatz "class", das verstehe ich nicht...

Meflin 4. Jul 2008 09:56

Re: Vorteil class function
 
Ganz einfach: eine class procedure kannst du auch dann ausführen, wenn die Klasse noch garnicht instanziert wurde!

Beispielsweise kannst du so eine Formklasse erstellen, die sich bei einem Aufruf von .Show selbst instanziert ;)

taaktaak 4. Jul 2008 10:07

Re: Vorteil class function
 
Ah, interessant! Danke für die Auskunft :hi:

HeinzJ 4. Jul 2008 11:04

Re: Vorteil class function
 
Class Member stehen grundsätzlich auch dann zur Verfügung, wenn die Klasse noch nicht instanziert wurde.

hoika 4. Jul 2008 11:11

Re: Vorteil class function
 
Hallo,

du kannst damit sogar Klassen schreiben,
die nur class methods haben,
quasi "globale" Funktionen, die aber trotzdem schön zu einer Klasse gehören.


Heiko

Thomas Feichtner 4. Jul 2008 12:16

Re: Vorteil class function
 
Zitat:

Zitat von hoika
Hallo,
du kannst damit sogar Klassen schreiben,
die nur class methods haben,
quasi "globale" Funktionen, die aber trotzdem schön zu einer Klasse gehören.

Was bringt mir das wenn ich gewisse Funktionen in einer Klasse habe und nicht einfach eine Funktionssammlung in einer Unit?

Also richtigen Vorteil / Nachteil habe ich noch nicht gelesen oder hab ich grad ein Brett vorm Kopf?

Meflin 4. Jul 2008 12:20

Re: Vorteil class function
 
Zitat:

Zitat von Thomas Feichtner
Was bringt mir das wenn ich gewisse Funktionen in einer Klasse habe und nicht einfach eine Funktionssammlung in einer Unit?

Vorteil wäre hier beispielsweise, dass du Namenskonflikte vermeiden kannst - und zwar zwingendermaßen auch für andere Benutzer deiner Unit.

Beispiel: Du hast eine Unit Foo, mit einer Funktion IntToStr ;)

Klar kannst du jetzt über Foo.IntToStr und SysUtils.IntToStr sicherstellen, dass immer die richtige Version verwendet wird. Aber wenn du dein IntToStr zur class function, sagen wir der Klasse TFooUtils machst, dann muss immer TFooUtils.IntToStr verwendet werden...

Abgesehen davon ist "Vorteil" das falsche Wort: du kannst mit class members eben Dinge machen, die ohne nicht gehen... Aber einen "Vorteil" im eigentlichen Sinne gegenüber herkömmlichen members gibt es wohl nicht!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.
Seite 1 von 2  1 2      

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