AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Singleton in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Singleton in Delphi

Ein Thema von Stevie · begonnen am 21. Sep 2010 · letzter Beitrag vom 21. Sep 2010
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Stevie
Stevie
Registriert seit: 12. Aug 2003
Ein kleines Nebenprodukt was beim Experimentieren in Delphi 2010 entstanden ist.
Ich weiß, Singletons sind böse...

Trotzdem hier mal eine ab Delphi 2010 funktionierene (evtl auch Delphi 2009 oder eher) Unit, die aus einer normalen Klasse ein Singleton macht, wovon weder ein zweites mal eine Instanz erzeugt noch die bestehende Instanz freigegeben werden kann. Hab es bisher im kleinen Stil getestet und dachte, evtl interessiert sich hier der eine oder andere für son krankes Zeug

Die Benutzung ist denkbar einfach, nachfolgend kurz, was so alles funktioniert:
Delphi-Quellcode:
uses
  Singleton;

type
  TFoo = class
  private
    FText: string;
  public
    property Text: string read FText write FText;
  end;

type
  TFooSingleton = Singleton<TFoo>;

var
  FooSingleton: Singleton<TFoo>;
  Foo: TFoo;
begin
  Foo := FooSingleton;
  TFooSingleton.Instance.Text := 'Hello Foo';
  ShowMessage(Foo.Text);
end;
Die Instanz der Klasse wird beim Starten des Programms (ich vermute in Initialization Reihenfolge der Units, genau hab ich es noch nicht getestet) erstellt und beim Beenden (Finalization der Unit Singleton.pas) wieder freigegeben. Der VMT Hack wird vorher schon (Vermutung: finalization der Unit wo der jeweilige Singleton benutzt wird) entfernt.
Angehängte Dateien
Dateityp: pas Singleton.pas (3,7 KB, 108x aufgerufen)
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
 
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#21
  Alt 21. Sep 2010, 17:12
War 'ne GUI-Anwendung, aber ohne Formulare.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

 
Delphi 10.1 Berlin Enterprise
 
#22
  Alt 21. Sep 2010, 17:50
War ja klar, dass es mal wieder nen Bug in Delphi ist (der übrigens scheinbar in XE nicht gefixt ist!)

Also nicht in die dpr sondern in ne eigene Unit und schon läufts

P.S.: Witzig, dass der Fehler scheinbar ausgerechnet mit nem TSingleton<T> aufgefallen ist.
Stefan

Geändert von Stevie (21. Sep 2010 um 17:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#23
  Alt 21. Sep 2010, 17:56
Ist das'n Bug in Verbindung mit den Generics?
Auf den DT wurde ja groß behauptet gesagt, daß man in XE alle Generics-Bugs behoben hat (aber die 3 neuen Bugmeldungen hatte man wohl noch nicht entdeckt).
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

 
Delphi 10.1 Berlin Enterprise
 
#24
  Alt 21. Sep 2010, 18:11
Ist das'n Bug in Verbindung mit den Generics?
Vermutlich, Alex Ciobanu hat dazu mal was geblogt.

P.S.: Da seh ich auch gerade, dass das Feature mit class contructor/destructor nen Delphi 2010 Feature ist.
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#25
  Alt 21. Sep 2010, 19:04
P.S.: Da seh ich auch gerade, dass das Feature mit class contructor/destructor nen Delphi 2010 Feature ist.
Das hätt ich dir auch so sagen können.
(rate mal, warum ich 2 Versionen gepostet hatte )
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#26
  Alt 21. Sep 2010, 19:22
Zitat:
If TDistinctType<String> is used in multiple units, each unit’s version has it own FMarker, which means it needs to be initialized for each unit.
Das würde doch auch bedeuten, daß jede Unit ihr eigenes Singleton hätte.

Ich glaub hier sollte man dieses nochmals prüfen/ändern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 15:54 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