674 Stimmen

Wann man statische Klassen in C# verwenden sollte

Das ist es, was MSDN hat zu sagen unter Wann sollten statische Klassen verwendet werden? :

static class CompanyInfo
{
    public static string GetCompanyName() { return "CompanyName"; }
    public static string GetCompanyAddress() { return "CompanyAddress"; }
    //...
}

Verwenden Sie eine statische Klasse als eine Einheit von Organisationseinheit für Methoden, die die nicht mit bestimmten Objekten verbunden sind. Außerdem kann eine statische Klasse Ihre Implementierung einfacher und schneller machen weil Sie kein Objekt erstellen müssen Objekt erstellen müssen, um seine Methoden aufzurufen. Es ist nützlich, die Methoden innerhalb der Klasse sinnvoll zu organisieren, wie zum Beispiel die Methoden der Klasse Math im Namespace System.

Mir scheint, dass dieses Beispiel nicht sehr viele mögliche Einsatzszenarien für statische Klassen abdeckt. In der Vergangenheit habe ich statische Klassen für stateless Suites verwandter Funktionen verwendet, aber das war's auch schon. Unter welchen Umständen sollte eine Klasse also als statisch deklariert werden (und unter welchen nicht)?

13voto

Rob Punkte 1963

Ich neige dazu, statische Klassen für Fabriken zu verwenden. Dies ist zum Beispiel die Logging-Klasse in einem meiner Projekte:

public static class Log
{
   private static readonly ILoggerFactory _loggerFactory =
      IoC.Resolve<ILoggerFactory>();

   public static ILogger For<T>(T instance)
   {
      return For(typeof(T));
   }

   public static ILogger For(Type type)
   {
      return _loggerFactory.GetLoggerFor(type);
   }
}

Sie haben vielleicht schon bemerkt, dass IoC mit einem statischen Accessor aufgerufen wird. Die meisten Wenn Sie statische Methoden in einer Klasse aufrufen können, ist das für mich das Einzige, was Sie tun können, also kennzeichne ich die Klasse als statisch, um die Übersichtlichkeit zu erhöhen.

12voto

bentayloruk Punkte 3950

Ich habe begonnen, statische Klassen zu verwenden, wenn ich Funktionen statt Klassen als Wiederverwendungseinheit verwenden möchte. Früher war ich ein Verfechter des Bösen der statischen Klassen. Doch das Lernen F# hat mich dazu gebracht, sie in einem neuen Licht zu sehen.

Was will ich damit sagen? Nun, sagen wir, wenn wir ein paar super DRY Code, habe ich am Ende einen Haufen von Ein-Methoden-Klassen. Ich kann diese Methoden einfach in eine statische Klasse ziehen und sie dann über einen Delegaten in Abhängigkeiten einbinden. Das passt auch gut zu meinem Dependency Injection (DI) Behälter der Wahl Autofac.

Natürlich ist eine direkte Abhängigkeit von einer statischen Methode immer noch in der Regel böse (es gibt einige nicht-böse Verwendungen).

9voto

Trap Punkte 11603

Ich verwende statische Klassen als Mittel, um "zusätzliche Funktionen" zu definieren, die ein Objekt eines bestimmten Typs in einem bestimmten Kontext nutzen kann. In der Regel handelt es sich dabei um Hilfsklassen.

Abgesehen davon denke ich, dass "Verwenden Sie eine statische Klasse als Organisationseinheit für Methoden, die nicht mit bestimmten Objekten verbunden sind" die beabsichtigte Verwendung recht gut beschreibt.

7voto

ThunderGr Punkte 2199

Dies ist eine weitere alte, aber sehr heiße Frage, seit OOP in Kraft getreten ist. Es gibt natürlich viele Gründe, eine statische Klasse zu verwenden (oder nicht), und die meisten davon wurden in den zahlreichen Antworten behandelt.

Ich füge nur meine 2 Cents hinzu und sage, dass ich eine Klasse statisch mache, wenn diese Klasse etwas ist, das im System einzigartig ist und es wirklich keinen Sinn machen würde, irgendwelche Instanzen davon im Programm zu haben. Allerdings reserviere ich diese Verwendung für große Klassen. Ich deklariere niemals so kleine Klassen wie im MSDN-Beispiel als "statisch" und schon gar nicht Klassen, die Mitglieder anderer Klassen sein werden.

Ich möchte auch darauf hinweisen, dass statische Methoden und statisch Klassen sind zwei unterschiedliche Dinge, die zu berücksichtigen sind. Die wichtigsten Nachteile, die in der akzeptierten Antwort genannt werden, sind für statische Methoden . statisch Klassen bieten dieselbe Flexibilität wie normale Klassen (in Bezug auf Eigenschaften und Parameter), und alle in ihnen verwendeten Methoden sollten für den Zweck des Bestehens der Klasse relevant sein.

Ein gutes Beispiel für eine statische Klasse ist meiner Meinung nach eine Klasse "FileProcessing", die alle Methoden und Eigenschaften enthält, die für die verschiedenen Objekte des Programms zur Durchführung komplexer FileProcessing-Operationen relevant sind. Es hat kaum einen Sinn, mehr als eine Instanz dieser Klasse zu haben, und da sie statisch ist, ist sie für alle Objekte in Ihrem Programm leicht verfügbar.

3voto

jonnii Punkte 27657

Ich verwende statische Klassen nur für Hilfsmethoden, aber mit dem Aufkommen von C# 3.0 würde ich lieber Erweiterungsmethoden für diese verwenden.

Ich verwende die Methoden statischer Klassen nur selten, und zwar aus denselben Gründen, aus denen ich auch das Singleton-Entwurfsmuster" selten verwende.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X