Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Globale Variable - Definition (https://www.delphipraxis.net/160469-globale-variable-definition.html)

haentschman 14. Mai 2011 19:43

Globale Variable - Definition
 
Hallo alle...

ich bin verwirrt... Entweder zu spät oder überarbeitet. :oops:

Ich habe eine Klasse welche über den gesamten Lebenszyklus der Anwendung existiert (Properties). Die einzige Instanz der Klasse soll von allen Formularen "erreichbar" sein. Da sowieso ein DataModule existiert dachte ich rein damit nach folgendem Muster.
Delphi-Quellcode:
.
.
type
  TDataModuleCommon = class(TDataModule)
    .
    .
    procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  DataModuleCommon: TDataModuleCommon;
  dBK: TdBK;
implementation

{$R *.dfm}

procedure TDataModuleCommon.DataModuleCreate(Sender: TObject);
begin
  dBK:= TdBK.Create;
end;

procedure TDataModuleCommon.DataModuleDestroy(Sender: TObject);
begin
  dBK.Free;
end;
die Frage: Zählt rein Definitionstechnisch die Instanz von dBK als globale Variable ?

Für Anregungen dankbar... :hi:

nuclearping 14. Mai 2011 19:52

AW: Globale Variable - Definition
 
Ja, das sollte so funktionieren. Alternativ würde ich aber die Instanz von dBK im initialization / finalization Part der Unit verarbeiten.

s.h.a.r.k 14. Mai 2011 19:52

AW: Globale Variable - Definition
 
Warum wirfst du die Variable dBK nicht in die Klasse TDataModuleCommon rein?

haentschman 14. Mai 2011 19:57

AW: Globale Variable - Definition
 
Hatte ich zuerst. Da mußte aber noch jedesmal beim Aufruf DataModuleCommon davor.

Beispiel: DataModuleCommon.dBK.Properties.Database.Host war mir irgendwie zu lang jedesmal. Mit obigem Muster fällt dann im Aufruf DataModuleCommon weg. Nur ist das dann mit einer globalen Variable vergleichbar ?

Danke...

s.h.a.r.k 14. Mai 2011 19:59

AW: Globale Variable - Definition
 
Ich mache es bisher immer so, dass ich Variablen in entsprechende Objekte kapsle. Bin ich dann mal zu faul es immer auszuschreiben baue ich mir eine "Shortcut"-Funktion, die mir eben das Objekt liefert :stupid: Ist vor allem dann hilfreich wenn ich Singleton-Pattern einsetze.

himitsu 14. Mai 2011 20:03

AW: Globale Variable - Definition
 
Delphi-Quellcode:
type
  TDataModuleCommon = class(TDataModule)
    .
    .
    procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    FdBK: TdBK;
  public
    { Public-Deklarationen }
    property dBK: TdBK;
  end;

var
  DataModuleCommon: TDataModuleCommon;


// DataModuleCommon.dBK
Wenn die DB auch schon existieren soll, dann müßte/könnte man dieses als class var und class property deklarieren und in initialzation der Unit erstellen.

haentschman 14. Mai 2011 20:12

AW: Globale Variable - Definition
 
Danke an alle...
@himi: das ist der normale Weg. Da hab ich immer noch DataModuleCommon davor. Ich bin halt schreibfaul und die Kettenaufrufe mag ich nicht. Mit Generics läßt sich das doch etwas verbessern... muß ich mal lesen.

himitsu 14. Mai 2011 20:21

AW: Globale Variable - Definition
 
Ich wüßte jetzt nicht was hier jetzt die Generics helfen sollen,
aber die Generics funktionieren auch nur in Klassen.

omata 14. Mai 2011 20:49

AW: Globale Variable - Definition
 
Wie wäre es mit einer eigenen Unit?

Delphi-Quellcode:
unit dBKU;

interface

type
  TdBK = class
   :
   :
  end;


function dBK: TdBK;

implementation

var
  gdBK: TdBK;

function dBK: TdBK;
begin
  Result:=gdBK;
end;

initialization
  gdBK:= TdBK.Create;

finalization
  gdBK.Free;

end.
So ist keine projekt-globale-Variable vorhanden.

himitsu 14. Mai 2011 21:23

AW: Globale Variable - Definition
 
Delphi-Quellcode:
function dBK: TdBK;
begin
  if not Assigned(gdBK) then
    gdBK := TdBK.Create;
  Result := gdBK;
end;

initialization

finalization
  gdBK.Free;

end.
So sieht es doch auch nett aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 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