AGB  ·  Datenschutz  ·  Impressum  







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

Vorteil class function

Ein Thema von Thomas Feichtner · begonnen am 4. Jul 2008 · letzter Beitrag vom 4. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
Thomas Feichtner

Registriert seit: 30. Nov 2007
Ort: Rum
137 Beiträge
 
Delphi 10.4 Sydney
 
#1

Vorteil class function

  Alt 4. Jul 2008, 09:33
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
mfg

Thomas Feichtner
  Mit Zitat antworten Zitat
Benutzerbild von spaxxn
spaxxn

Registriert seit: 19. Nov 2004
253 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: Vorteil class function

  Alt 4. Jul 2008, 09:37
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
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.764 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Vorteil class function

  Alt 4. Jul 2008, 09:40
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
Oliver
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#4

Re: Vorteil class function

  Alt 4. Jul 2008, 09:44
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...
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#5

Re: Vorteil class function

  Alt 4. Jul 2008, 09:56
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
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#6

Re: Vorteil class function

  Alt 4. Jul 2008, 10:07
Ah, interessant! Danke für die Auskunft
Ralph
  Mit Zitat antworten Zitat
HeinzJ

Registriert seit: 17. Aug 2007
Ort: Bremen
84 Beiträge
 
Delphi 2007 Architect
 
#7

Re: Vorteil class function

  Alt 4. Jul 2008, 11:04
Class Member stehen grundsätzlich auch dann zur Verfügung, wenn die Klasse noch nicht instanziert wurde.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Vorteil class function

  Alt 4. Jul 2008, 11:11
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
Heiko
  Mit Zitat antworten Zitat
Thomas Feichtner

Registriert seit: 30. Nov 2007
Ort: Rum
137 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Vorteil class function

  Alt 4. Jul 2008, 12:16
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?
mfg

Thomas Feichtner
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#10

Re: Vorteil class function

  Alt 4. Jul 2008, 12:20
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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:49 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