Ich würde gerne so etwas tun:
%Vor% Dies würde mir erlauben, die globale Sammlung von Foo
s von überall aus zu verwalten. Allerdings wurde mir gesagt, dass statische Klassen immer zustandslos sein sollten - Sie sollten sie nicht zum Speichern globaler Daten verwenden. Globale Daten scheinen im Allgemeinen verpönt zu sein. Wenn ich eine statische Klasse nicht verwenden sollte, was ist der richtige Weg, um dieses Problem anzugehen?
Hinweis: Ich habe eine ähnliche Frage , aber die gegebene Antwort trifft in meinem Fall nicht wirklich zu.
Wer bleibt, dass statische Klassen zustandslos sein sollten? Static bedeutet angegeben.
Wissen Sie, wie statische Klassen in der CLR funktionieren:
Achten Sie auch auf Nebenläufigkeitsprobleme.
Als Randnotiz erstaunt es mich, wie oft Leute sagen "Benutze X nicht". Es wäre, als würde jemand in deinen Werkzeughäuschen gehen und auf ein halbes Dutzend Werkzeuge zeigen und sagen: "Diese Werkzeuge sind eine schlechte Übung." Es macht keinen Sinn.
Globale Daten sind sowohl mächtig als auch eine häufige Quelle von Problemen, weshalb Techniken wie Dependency Injection verwendet werden. Sie können sich das als normales Entkopplungsproblem vorstellen. Globale Daten, auf die direkt an vielen Stellen in Ihrem Programm verwiesen wird, bilden eine starke Kopplung zwischen diesen globalen Daten und all diesen Orten.
In Ihrem Beispiel haben Sie jedoch den Zugriff auf die Daten in einer Klasse isoliert, die die genauen Details des Zugriffs auf die globalen Daten steuert. Da einige globale Daten oft unvermeidlich sind, halte ich das für einen guten Ansatz.
Sie können beispielsweise vergleichen, wie app.config und web.config über das .NET-Framework verwendet werden. Sie werden über eine statische Klasse System.Configuration.ConfigurationManager
Was Sie hier suchen, ist eine Singleton-Klasse, keine statische Klasse. Statische Klassen und Methoden sollten für statusfreie Routinen angegeben werden. Eine Singleton-Klasse wird nur einmal pro Anwendungslauf instanziiert und hat die volle Funktionalität einer Klasse als solche. Jedes Mal, wenn Sie es in der Zukunft referenzieren, erhalten Sie die exakt gleiche Instanz mit exakt denselben Elementeigenschaften zurück.
Das erste Google-Ergebnis für "C # singleton" scheint eine ziemlich vernünftige Erklärung für die Implementierung zu haben. Ссылка
Es ist nicht generell schlecht. In einigen seltenen Fällen ist es notwendig, dies zu tun, als etwas anderes mit großem Aufwand zu implementieren.
Es wird jedoch empfohlen, auf die Thread-Sicherheit zu achten.
Sie sollten jeden Anruf in Ihrem Wörterbuch sperren, so dass nur ein Thread gleichzeitig darauf zugreifen kann.
%Vor%Ich benutze ständig Listen in statischen Klassen für Dinge, die sich niemals (oder extrem selten) ändern werden - praktisch zum Laden von Auswahllisten und so, ohne jedes Mal die db zu drücken. Da ich keine Änderungen erlaube, muss ich mich nicht um Sperren / Zugriffskontrolle kümmern.
Eine andere Sache, die in Betracht gezogen werden sollte, ist die Anwendung selbst und das Budget dafür. Ist wirklich etwas komplexer als eine statische Klasse?
Tags und Links c# singleton static global-variables