Was ist eine statische Klasse?

7

Was nützt eine statische Klasse? Ich meine, was sind Vorteile der Verwendung von statischen Klasse und wie CLR statische Klassen behandelt?

    
Embedd_Khurja 23.02.2009, 08:01
quelle

9 Antworten

27

Eine statische Klasse bedeutet einfach, dass Sie keine -Instanz erwarten oder benötigen. Dies ist nützlich für die Dienstprogrammlogik, bei der der Code nicht objektspezifisch ist. Zum Beispiel können Erweiterungsmethoden nur in einer statischen Klasse geschrieben werden.

Vor C # 2.0, Sie könnten einfach eine reguläre Klasse mit einem privaten Konstruktor haben; aber static macht es formal, dass Sie nie eine Instanz haben können (es gibt no Konstruktor * und alle Mitglieder müssen statisch sein).

(* = siehe Kommentarkette; Sie können optional einen Typinitialisierer haben (statischer Konstruktor aka .cctor ), aber Sie können keinen Instanzkonstruktor haben (aka .ctor )).

    
Marc Gravell 23.02.2009, 08:05
quelle
5

Das Kompilierungs- und Metadatenmodell für .net erfordert, dass alle Funktionen innerhalb einer Klasse definiert sind. Dies macht das Leben für die Reflexions-Apis etwas einfacher und einfacher, da die Konzepte der besitzenden Klasse und ihre Sichtbarkeit gut definiert sind. Es macht auch das il-Modell einfacher.

da dies freie Funktionen ausschließt (die keiner Klasse zugeordnet sind), wird die Wahl getroffen, wo Funktionen platziert werden sollen, die keinen assoziierten Zustand haben (und somit für eine Instanz benötigt werden). Wenn sie keinen mit ihnen assoziierten Zustand brauchen und keine klare Instanz-basierte Klasse haben, der sie zugeordnet werden können und innerhalb der sie definiert werden müssen, muss für ihre Definition ein Idiom vorhanden sein.

Früher war es am besten, die Methoden innerhalb einer Klasse zu definieren, deren Konstruktor privat war und keine der Funktionen innerhalb der Klasse hatte, um sie zu konstruieren.

Dies ist ein wenig unordentlich (da es nicht kristallklar macht, warum es ohne Kommentare gemacht wurde) und die Reflektions-API kann immer noch den Konstruktor finden und aufrufen.

Somit wurden statische Klassen erlaubt, was die Absicht der Klasse, die eines Ortes für die Definition von statischen Methoden, den Benutzern und dem Typsystem klar macht. Statische Klassen haben überhaupt keinen Konstruktor.

    
ShuggyCoUk 23.02.2009 08:15
quelle
2

Alle Mitglieder einer statischen Klasse müssen statische Mitglieder sein. Wenn Sie also vergessen, 'static' hinzuzufügen, wird Ihr Code nicht kompiliert. Dadurch wird Ihr Code besser lesbar als jeder, der das sieht class is static wird verstehen, dass es nur statische Member enthält.

Die beste Verwendung für eine statische Klasse ist für Utility-Funktionen, Sie können sie auch verwenden, um die globalen Methoden und Daten in Ihrer Anwendung zu behalten. Ich verwende statische statische Klassen sehr oft in fast jedem Projekt.

    
Waleed Eissa 23.02.2009 08:09
quelle
2

Statische Klassen werden häufig verwendet, um verwandte globale Services zu gruppieren, auf die Sie ursprünglich nicht mit einer Objektinstanz zugreifen möchten. Ein Beispiel ist die Klasse Math in der .NET-BCL, die Sie direkt verwenden, z. B. Math.Sqrt (10.0)

    
robi-y 23.02.2009 08:18
quelle
2

Eine statische Klasse ist ein Sprach-Hack, um prozedurale Programme in C # zu schreiben.

    
Chris Peterson 26.02.2009 07:14
quelle
1

Statische Klassen sind versiegelt. Dies kann eine nützliche Option sein, um static für Utility-Klassen zu verwenden.

    
Canavar 23.02.2009 08:09
quelle
0

Referenz: Ссылка

1.Ursprünglich können Sie die Instanz für statische Klassen nicht erstellen

  1. Wenn die Klasse als static deklariert ist, sollte die Membervariable für diese Klasse
  2. statisch sein

3.Sealed [kann nicht vererbt werden]

4.Kann nicht den Instance-Konstruktor

enthalten

5. Speicherverwaltung

Beispiel: Mathematische Berechnungen (mathematische Werte) ändern sich nicht [STANDARDBERECHNUNG FÜR DEFINIERTE WERTE]

    
Vicky 12.12.2014 06:55
quelle
0

Ich habe eine klare Vorstellung von diesen Aussagen.

Um mehr über die statische Klasse zu erfahren. Zuerst müssen wir zuerst zwischen static und instance unterscheiden.

Jedes Mal, wenn Sie eine neue Instanz einer Klasse erstellen, erhalten Sie eine neue Kopie der Instanzdaten, mit denen Sie spielen möchten. Die Instanzmethoden der Klasse arbeiten mit den Instanzdaten. Die Instanzdaten sind vollständig unabhängig von den Instanzdaten in allen anderen Klassen und sogar Instanzen derselben Klasse. Wenn Sie einen Wert in einer Instanz ändern, hat dies keine Auswirkungen auf denselben Wert in anderen Instanzen. Der Großteil der Programmdaten sind Instanzdaten.

Statische Daten entsprechen globalen Daten. Jeder im Programm sieht die gleichen Daten. Wenn jemand die Daten ändert, werden alle anderen die Änderung ebenfalls sehen. Statische Daten sind nützlich, um Informationen über ein Programm auszutauschen, z. B. Datenbankverbindungszeichenfolgen oder Protokolldateien. Es gibt nur eine Kopie von statischen Daten im Speicher. (Es gibt Ausnahmen wie bei mehreren App-Domains).

Wenn Sie eine Instanz einer Klasse erstellen, weisen Sie effektiv Speicherplatz zu, um eine eigene Kopie der von der Klasse definierten Instanzdaten zu speichern. Wenn Sie 5 Instanzen einer Klasse erstellen, erhalten Sie 5 separate Speicherorte, wobei jeder Speicherort über eine eigene Kopie der Instanzdaten verfügt. Jeder Speicherblock ist unabhängig von den anderen.

Wenn eine Klasse keine Instanzdaten hat, macht es keinen Sinn, Instanzen davon zu erstellen. Dies ist harmlos, aber auch Zeitverschwendung. Hier kommen statische Klassen ins Spiel. Eine statische Klasse ist eine Möglichkeit, eine Klasse als Instanz ohne Daten zu identifizieren . Indem Sie die Klasse als statisch markieren, teilen Sie dem Compiler mit, dass alle Daten in der Klasse auf der ganzen Linie geteilt werden. Als Ergebnis erzwingt der Compiler bestimmte Regeln, um die Dinge zu verdeutlichen. Eine statische Klasse kann nur statische Elemente enthalten. Eine statische Klasse kann nicht instanziiert werden. Eine statische Klasse muss versiegelt werden. Der Compiler erzwingt dies für die Bequemlichkeit der Entwickler.

Eine statische Klasse ist versiegelt. Dies liegt daran, dass statische Klassen keine pro Instanz Daten haben können.

Statische Methoden sind auf der Typ-Ebene definiert, nicht auf der Instanz-Ebene. Aus diesem Grund funktioniert das Überschreiben nicht mit statischen Methoden / Eigenschaften / Ereignissen ...

Der statische Konstruktor wird einmal aufgerufen, und die statische Klasse bleibt für die Lebensdauer der Anwendungsdomäne, in der sich Ihr Programm befindet, im Speicher.

    
Nayas Subramanian 10.06.2017 16:12
quelle
-3

In einer Klasse deklarieren wir eine Funktion als statisch, nur wenn diese Funktion keinem Objekt zugeordnet ist. Wir sollten den "this" -Operator nicht in dieser statischen Funktion verwenden, weil "this" -Operator auf ein Objekt verweist, das die Funktion aufruft. ZB: Betrachten Sie eine Klasse mit dem Namen Mitarbeiter hat nur wenige Variablen wie Name, Alter, Abteilung, in dieser Mitarbeiterklasse werde ich eine Funktion namens getSimilarNames () hinzufügen, die zeigt, wie viele Mitarbeiter ähnliche Namen haben. Diese Funktion muss keinem Mitarbeiter zugeordnet werden. Also deklariere ich diese Funktion als Static. Wenn eine Klasse nur statische Funktionen enthält, deklarieren wir, dass die Klasse eine statische Klasse ist. Die statische Funktion verbessert die Leistung.

    
Ganesh NR 19.02.2012 16:17
quelle

Tags und Links