Laden...

Global verfügbares Objekt in C#

Erstellt von thas vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.122 Views
T
thas Themenstarter:in
8 Beiträge seit 2010
vor 13 Jahren
Global verfügbares Objekt in C#

Hallo!

Ich entwickelte früher eigentlich VB und bin noch eher neu in C# und bin mir noch unsicher im Design.
Folgendes Problem:
Ich möchte ein Objekt einer Klasse (diese Klasse ist für die Datenbankkommunikation zuständug) global in meinem Projekt verfügbar haben da ich auf dieses Objekt in mehreren Klassen zugreifen möchte.
In VB war das kein Problem, denn da hab ich dieses Objekt einfach in einem Modul erstellt und es war überall verfügbar...

Nun meine Frage: Was ist der elegante und richtige Weg in C# dies umzusetzen.

P.S Hab auch die Suche benutzt und den Hinweis gefunden, dass ich die Klasse Static machen kann.... aber da gabs auch viele kritische Stimmen dazu...

Danke & lg,
Wolfi

731 Beiträge seit 2006
vor 13 Jahren

Hi Wolfi,

also das hat ja eher was mit Objektorientierung als mit C# zu tun.
Das was du möchtest wäre aber z.B. eine statische Klasse.

MfG
wax

16.806 Beiträge seit 2008
vor 13 Jahren

Das was du möchtest wäre aber z.B. eine statische Klasse.

Korrektur: gemeint war ein nested singleton

T
thas Themenstarter:in
8 Beiträge seit 2010
vor 13 Jahren

Danke für deine Antwort!

Mit einer statischen Klasse hab ichs schon umgesetzt und es funktioniert einwandfrei..
War mir nur nicht sicher ob dies eine annehmbare Lösung ist.. 😉

888 Beiträge seit 2007
vor 13 Jahren

Singleton wäre vielleicht auch noch eine brauchbare Variante.

Gelöschter Account
vor 13 Jahren

Zu einem Singleton würde ich auch am ehesten raten, wobei das auch nur mit vorgehaltener hand, da man für den Datenzugriff eigentlich keine globale Instanz benötigt, da man ja im Normalfall keine Daten permanent vorhalten muss weil diese aus der Datenbank kommen...

@Abt:
mir ist schleierhaft was Interfaces mit Threadsicherheit zu tun haben.

T
thas Themenstarter:in
8 Beiträge seit 2010
vor 13 Jahren

Danke für die Info, dann werd ich mich mal bei den Design Pattern mit dem Singelton beschäftigen 😉

lg,
Wolfi

Gelöschter Account
vor 13 Jahren
F
10.010 Beiträge seit 2004
vor 13 Jahren

Gerade bei Datenbanken ist das Singleton fehl am platz, wie es überhaupt das am meisten missbrauchte Pattern ist.

@thas:
Das war schon unter VB der falsche weg.

Repository oder UnitOfWork ist hier eher angebracht.

T
thas Themenstarter:in
8 Beiträge seit 2010
vor 13 Jahren

So hab es jetzt mit einem Singleton umgesetzt und es funktioniert wunderbar...
@FZelle
Warum soll das in VB schon der falsche Weg gewesen sein?

Danke an alle für Eure tolle Hilfe & ein schönes WE!

F
10.010 Beiträge seit 2004
vor 13 Jahren

Weil man auch unter VB nicht mit Modulen arbeiten sollte ( ausser bei interop ) weil das nur Probleme bringt und zusätzlich noch gegen die Grundlagen von OOP verstösst.

Aber VBler haben da eh ein anderes Verständnis.

U
1.578 Beiträge seit 2009
vor 13 Jahren

In einem anderen Forum hatten wir mal ne Diskusion bzgl static classes und singletons.

Wenn man darüber nach denkt kommt man darauf, das die static classes von C# auch Singletons sind.

  • Es ist immer global verfügbar
  • Es wird erstellt bei bedarf (static ctor)
  • Es zerstört sich erst beim Beenden der Applikation

Alle Eigenschaften die Singletons sowie static classes gemeinsam haben. Man kann also sagen das die Singleton durch Sprachen entstanden die kene static classes haben können.

Sinnhaftigkeit, Verwendungszweck und Praktiken bleiben jetzt mal außen vor.

Hinweis von herbivore vor 13 Jahren

Die Diskussion hatten wir hier im Forum auch schon mehrfach und ausführlich (==> Forensuche), weshalb wir sie nicht erneut führen sollten, schon gar nicht hier als offtopic.

U
1.578 Beiträge seit 2009
vor 13 Jahren

Weil man auch unter VB nicht mit Modulen arbeiten sollte ( ausser bei interop ) weil das nur Probleme bringt und zusätzlich noch gegen die Grundlagen von OOP verstösst.

Aber VBler haben da eh ein anderes Verständnis.

Nicht alle entwickeln nach OO.

Hinweis von herbivore vor 13 Jahren

Das versteht sich von selbst, allerdings ist das .NET-Framework ganz überwiegend objektorientiert designed, weshalb es für normale C#- und VB.NET-Programme schon ein guter Rat ist, möglichst objektorientiert zu arbeiten. Aber auch das sollten wir bitte hier nicht vertiefen.

16.806 Beiträge seit 2008
vor 13 Jahren

mir ist schleierhaft was Interfaces mit Threadsicherheit zu tun haben.

Vor lauter Reps verwechselt. Gemeint war ein nested singleton.

Gelöschter Account
vor 13 Jahren

ein nested Singleton ist nicht automatisch Threadsafe. Auch hier muss man sich um synchronisierung sorgen. Das was du meinst ist, das die Instanz Threadsafe und lazy erstellt wird.