2010-02-09 6 views
8

Ich habe Zweifel an statischen Klassen und statischen Methoden. Von MSDN habe ich verstanden, dass "Statische Klassen und Klassenmitglieder verwendet werden, um Daten und Funktionen zu erstellen, auf die zugegriffen werden kann, ohne eine Instanz der Klasse zu erstellen."Warum werden statische Klassen verwendet?

Wenn wir also keine Klasse einer Instanz zuordnen wollen, machen wir sie als statisch. Ist das der einzige Vorteil? Kann mir jemand sagen, in welchem ​​Echtzeitszenario wir uns für die statische Klasse entscheiden?

Einige Zeit in Klassen (nicht statisch) finde ich statische Methoden. Welchen Vorteil/Leistungsvorteil bieten statische Methoden in der Praxis?

+0

Interessante ähnliche Fragen: http://stackoverflow.com/questions/169378/c-method-can-be-made-static-but-should-it http://stackoverflow.com/questions/731763/sollte-c-methoden-das-kann-statisch-statisch sein http://stackoverflow.com/questions/241339/when-to-use-static-classes-in-c – Jla

Antwort

19

Für Nutzungsklassen sind sie großartig. Wie Sie erwähnt haben, sind sie dem globalen Staat ähnlich. Für Klassen, die keinen Status haben, sollte die Klasse für Leistungsvorteile statisch sein.

Auf der anderen Seite sind statische Klassen schwer zu testen (wenn sie Zustand enthalten). Polymorphismus und andere OO-Konzepte sind ebenfalls verloren.

Verwenden Sie mit Bedacht.

+0

Sie sollten beachten, Der von mir erwähnte Leistungsgewinn ist trivial. – Finglas

+0

+ für den Verlust der Vererbung! –

+0

C# hat Methode versteckt über das neue Schlüsselwort, das, während es nicht das gleiche ist habe ich eine Verwendung für es in meiner C# Arbeit gefunden.Auch wenn es schmutzig ist und ein TDDer ist, vermeide ich Statik, es sei denn, sie fällt in das Segment der Utility-Klasse. – Finglas

6

Das Anwenden des statischen Schlüsselworts auf eine Klasse ist eine C# -Sprachkonvention, es bedeutet nichts Besonderes für die CLR. Es stellt lediglich sicher, dass alle Mitglieder ebenfalls statisch sind und dass Sie nicht versehentlich eine Instanz der Klasse mit dem Schlüsselwort new erstellen können.

Die Vorteile von statischen Methoden sind in this thread.

+0

+1, nette Antwort – nawfal

2

IMO statische Klassen sind prozeduralen Programmierung in der Verkleidung diskutiert. Nicht unbedingt eine schlechte Sache, aber es ist nicht sehr OOPly. Achten Sie auf die functional decomposition antipattern.

1

Statische Klassen eignen sich hervorragend zum Definieren statischer Methoden. Dies ist der klassische "Utility Class" -Ansatz. Seien Sie jedoch äußerst vorsichtig beim Speichern von Zuständen (d. H. Definieren von Feldern) in einer statischen Klasse. In unserer Multi-Thread-Welt kann dies zu unvorhersehbarem Programmverhalten führen, wenn Sie den Zugriff auf statische Felder nicht synchronisieren.

0

Statische Eigenschaften, die hauptsächlich verwendet werden, um Context des laufenden Codes einzuführen. Und Sie können Bestätigung dafür in jedem Stück von .NET-Stack finden.
ASP.NET - HttpContext.Current
Threading - Thread.currentThread
WinForms - WindowsFormsSynchronizationContext.Current
WPF - Dispatcher
etc
statische Klasse ist für mich nur Container für Utility-Methoden.

0

Statische Klassen globalisieren eine bestimmte Variable, die die Handhabung während des Codes erleichtert. Daher bevorzugen wir auf der Basisebene die Verwendung von statischen Klassen.