Laden...

Globale static klasse

Erstellt von Puppetmaster vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.290 Views
Puppetmaster Themenstarter:in
225 Beiträge seit 2006
vor 15 Jahren
Globale static klasse

aloha,

ich habe ein programm, dass auf plugins basiert.
da die plugins und der host die gleichen daten benötigen wollte ich eine klasse mit statischen membern machen, die diese daten hält. die klasse heißt "Global".
statisch damit ich überall in meinem projekt über Global.xxx auf die daten zugreifen kann.

leider erstellt sich jedes plugin/host eine eigene instanz der Global klasse.

wie bekomme ich es hin, dass die klasse Global wirklich nur einmal instanziert wird und alle andern klassen auf diese eine instanz zugreifen?

eine nicht statische lösung mittels übergabe wäre ziemlich bescheiden zu programmieren.

a hui hau
puppet

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

4.207 Beiträge seit 2003
vor 15 Jahren

Singleton

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Puppetmaster Themenstarter:in
225 Beiträge seit 2006
vor 15 Jahren

aloha,

ich liebe diese one word answers ^^

dann begeb ich mich mal auf googles spuren und meld mich dann wieder.

a hui hau
puppet

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

4.207 Beiträge seit 2003
vor 15 Jahren

Hallo,

ich hätte auch schreiben können, dass Du bitte bei Google oder in der Forensuche nach dem Begriff "Singleton" suchen sollst, aber da kamst Du ja schon selbst drauf, insofern dachte ich mir, dass dieser einzelne Begriff schon reichen würde 😉.

Viele Grüße,

Golo

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo zusammen,

wobei ich mir gerade nicht vorstellen kann, dass Singleton das Problem löst, wenn wirklich das Problem ist, dass in jedem Plugin eine neue "Instanz" der Klasse erstellt wird. Ich denke mal, dass heißt, dass es in jedem Plugin einen eigenen Satz von statischen Variablen gibt. Damit hätte bei Singleton jedes Plugin seinen eigene statische Variable Instance und dadurch sein eigenes Singleton. Wenn ihr versteht, was ich meine

herbivore

Puppetmaster Themenstarter:in
225 Beiträge seit 2006
vor 15 Jahren

aloha,

@Golo Roden
das mit den one word answers war keine ironie. kurz und effektiv. so wie antworten sein sollten.

leider hat herbivore recht. scheinbar hat wirklich jedes plugin seinen eigenen satz statischer variablen. singleton funktioniert jedenfalls nicht.

gibts weitere ideen?

a hui hau
puppet

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

1.200 Beiträge seit 2007
vor 15 Jahren

Ich frag mich, wofür ihr überhaupt sowas statisches braucht.

Wie wäre es beim attachen vom Plugin einfach ein PluginInfo Objekt zu übergeben, welches einen HashTable mit den nötigen Daten enthält? Dies kann ja von der Hauptapplikation irgendwo registriert und verfügbar gemacht werden. Diese Klasse im Hauptprogramm kann ja dann ein Singleton oder statisch sein.

Zusätzlich könnte so ein PluginInfo Objekt den Einsprungspunkt für das Plugin enthalten und diverse Modifikationen am Hauptprogramm vornehmen.

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!

Puppetmaster Themenstarter:in
225 Beiträge seit 2006
vor 15 Jahren

aloha,

auf so was in der art wird es leider hinauslaufen, befürchte ich.
das problem ist, dass die globalen daten etwas umfangreicher und komplizierter sind, als dass man sie einfach in einen hashtable schreiben könnte.
wenn überhaupt würde ich einfach die "Global" klasse übergeben.
bloß leider wäre sie damit nicht mehr statisch und ich müsste einen großteil im projekt umschreiben. nicht nur, dass das einige stunden arbeit in anspruch nehmen würde, es würde (wahrscheinlich) die performance geringfügig verschlechtern und den code verkomplizieren.

sachen, die ich gerne vermeiden würde, wenn es geht.

a hui hau
puppet

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Puppetmaster,

übergib das "globale" Objekt beim Attachen des Plugins. Das sind zwei Zeilen Code pro Plugin. Warum du da einen Großteil um schreiben muss, ist mir nicht klar. Dafür gibt es keinen Grund und ich glaube das auch nicht.

herbivore

3.511 Beiträge seit 2005
vor 15 Jahren

Gib deinen Plugins ein Interface auf deine Klasse "Globals" mit. Du brauchst dann in deiner Hauptanwendung die Klasse "Globals" nur einmal erzeugen (wäre dann auch kein Singleton) und beim Laden der Plugins gibts du nur das Interface weiter (z.B. IGlobals).

Ich verstehe auch nicht, was a) daran die Performance beeinträchtigen sollte und vorallem b) was den Code dadurch verkomplizieren soll. Gerade dieses Verfahren vereinfacht den Code IMHO.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)