Thema: Delphi Globale Variablen!

Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#10

Re: Globale Variablen!

  Alt 6. Jul 2005, 20:18
Hmm, was ist effektiv der Unterschied zwischen SirTs Lösung und einer globalen Vatriablen?...

Um dich nicht mit Interfaces zuzuschütten empfehle ich dir erstmal ein Singleton welches aus einer absrtakten öffentlichen Klasse und einer versteckten Klasse besteht, die die seine Member implementiert.
Um zu verhindern, dass die Instanz zerstört wird, wird eine Exception im Destructor ausgelöst.

Delphi-Quellcode:
interface

type
   TSingletonMoneyDings = class
   private
      function getMoney: Currency; virtual; abstract;
      procedure setMoney(const aValue: Currency); virtual; abstract;
   public
      property Money: Currency read getMoney write setMoney;
      class function Instance: TSingletonMoneyDings;
   end;


implementation
uses
   SysUtils;

type
   TRichtigesMoneyDings = class(TSingletonMoneyDings)
   private
      fMoney: Currency;
      fAllowDestruction: Boolean;
      function getMoney: Currency; override;
      procedure setMoney(const aValue: Currency); override;
   public
      destructor Destroy; override;
   end;

   InvalidSingletonDestructionException = class(Exception)
   public
      constructor Create;
   end;

var
   staticMoneyDings : TRichtigesMoneyDings;

{ TSingletonMoneyDings }

class function TSingletonMoneyDings.Instance: TSingletonMoneyDings;
begin
   Result := staticMoneyDings;
end;

{ TRichtigesMoneyDings }

destructor TRichtigesMoneyDings.Destroy;
begin
   if fAllowDestruction then
      inherited
   else
      raise InvalidSingletonDestructionException.Create();
end;

function TRichtigesMoneyDings.getMoney: Currency;
begin
   Result := fMoney;
end;

procedure TRichtigesMoneyDings.setMoney(const aValue: Currency);
begin
   fMoney := aValue;
end;

{ InvalidSingletonDestructionException }

constructor InvalidSingletonDestructionException.Create;
begin
   inherited CreateFmt('%s can not be destroyed at this time.', [TMoneyDings.ClassName]);
end;

initialization
   staticMoneyDings := TRichtigesMoneyDings.Create();
   staticMoneyDings.fAllowDestruction := False;
finalization
   staticMoneyDings.fAllowDestruction := True;
   staticMoneyDings.Free();
end.


Benutzen kannst du sie von überall aus über Instanz:
TSingletonMoneyDings.Instance.Money := 1
  Mit Zitat antworten Zitat