Statische Klassen und statische Klassenmitglieder in C # erklärt

Mit dem Schlüsselwort static in der Programmiersprache C # können Sie statische Klassen und statische Elemente definieren.

Eine statische Klasse ähnelt einer Klasse, die sowohl abstrakt als auch versiegelt ist. Der Unterschied zwischen einer statischen Klasse und einer nicht statischen Klasse besteht darin, dass eine statische Klasse nicht instanziiert oder vererbt werden kann und dass alle Mitglieder der Klasse statischer Natur sind. Um eine Klasse als statisch zu deklarieren, sollten Sie sie in der Klassendeklaration mit dem Schlüsselwort static markieren. 

Es gibt kein Verhalten in einer statischen Klasse oder einem Mitglied, daher macht es keinen Sinn, die Vererbung einer statischen Klasse zuzulassen. Eine statische Klasse kann nur statische Elemente haben - Sie können keine Instanzelemente (Methoden, Variablen, Eigenschaften usw.) in einer statischen Klasse deklarieren. Sie können einen statischen Konstruktor in einer statischen Klasse haben, aber Sie können keinen Instanzkonstruktor in einer statischen Klasse haben.

Wann wird eine statische Klasse in C # verwendet?

Wann sollten Sie eine statische Klasse besuchen? In der Regel können Sie Hilfs- oder Dienstprogrammklassen als statische Klassen implementieren, da sie nicht instanziiert oder vererbt werden müssen und im Allgemeinen eine Sammlung wiederverwendbarer Methoden und Eigenschaften enthalten. Die folgende Codeliste zeigt, wie eine statische Klasse in C # aussieht.

öffentliche statische Klasse FileLogger

    {

        public static void Log (Zeichenfolgenmeldung)

        {

            // Methode zum Protokollieren von Daten in einer Textdatei

        }}

    }}

Wann werden statische Methoden in C # verwendet?

Statische Methoden sind Methoden, für die keine Instanz der Klasse aufgerufen werden muss. Sie können für die Klasse selbst aufgerufen werden. Beachten Sie, dass statische Methoden nur auf statische Klassenmitglieder zugreifen können. Sie können statische Methoden innerhalb einer statischen oder einer nicht statischen Klasse haben. Sie können auch einen statischen Konstruktor in einer statischen oder einer nicht statischen Klasse haben. Ein statischer Konstruktor wird verwendet, um die statischen Elemente einer Klasse zu initialisieren. Der statische Konstruktor einer Klasse wird beim ersten Zugriff auf ein statisches Mitglied der Klasse aufgerufen.

Warum sollten wir statische Methoden verwenden? Sie sind etwas schneller in der Ausführung als nicht statische Methoden, dh Instanzmethoden. Der Grund dafür ist, dass die Laufzeit den thisZeiger als impliziten Parameter an die nicht statischen oder Instanzmethoden übergibt . Beachten Sie, dass der Compiler bei einer nicht statischen Methode die callvirtAnweisung ausgibt , auch wenn die Methode nicht virtuell ist. Wenn Sie Ihre Methoden statisch machen, gibt der Compiler nicht virtuelle callSites aus, wodurch die zusätzliche Überprüfung, ob die Instanz null ist, entfällt. Dies kann Ihnen einige Leistungsvorteile bringen.

Wenn die von Ihnen erstellte Anwendung leistungskritisch ist, kann es daher sinnvoll sein, statische Typen und Methoden in Ihrem Code zu verwenden. Die Leistungssteigerungen können spürbar sein, wenn Ihr Code eine große Anzahl von Anrufen an solche Typen und Mitglieder tätigt.

Das folgende Codeausschnitt zeigt, wie eine statische Methode aussieht.

public static void Log (Zeichenfolgenmeldung)

        {

             Zeichenfolge filePath = @ "F: \ Log.txt";

            using (StreamWriter streamWriter = neuer StreamWriter (filePath, true))

            {

                streamWriter.WriteLine (Nachricht);

                streamWriter.Close ();

            }}

        }}

Verwendung statischer Elemente einer Klasse in C #

Die CLR unterteilt den Systemspeicher in drei verschiedene Bereiche: den Stapel, den Heap und den Hochfrequenzheap. Da auf statische Objekte direkt zugegriffen werden kann, ohne Instanzen der Klasse zu erstellen, müssen sie während der gesamten Lebensdauer der Anwendung im Speicher vorhanden sein. Sie müssen nicht Müll gesammelt werden. Daher werden statische Objekte im Hochfrequenzhaufen gespeichert. Normalerweise haben Sie einen Hochfrequenz-Heap für jede Anwendungsdomäne.

Schauen wir uns nun statische Mitglieder einer Klasse an. Auch hier ist ein statisches Objekt ein Objekt, das während der gesamten Ausführung der Anwendung im Speicher verbleibt. Die folgende Codeliste erweitert das obige Protokollierungsbeispiel und zeigt, wie eine FileLogger-Klasse mit statischen Elementen aussehen würde.

öffentliche statische Klasse FileLogger

    {

        privates statisches schreibgeschütztes Objekt lockObject = neues Objekt ();

        öffentliche statische Zeichenfolge FilePath

        {

            bekommen; einstellen;

        }}

        public static void Log (Zeichenfolgenmeldung)

        {

            lock (lockObject)

            {

                if (! string.IsNullOrEmpty (FilePath))

                using (StreamWriter streamWriter = neuer StreamWriter (FilePath, true))

                {

                    streamWriter.WriteLine (Nachricht);

                    streamWriter.Close ();

                }}

            }}

        }}

    }}

Beachten Sie die Verwendung der genannten statischen Eigenschaft FilePath. Um die Thread-Sicherheit zu gewährleisten, wurde das lockSchlüsselwort verwendet. Innerhalb der Log()Methode wurde überprüft, ob der Wert der FilePathEigenschaft nicht null und nicht leer ist.

Denken Sie daran, dass sich die Verwendung statischer Methoden möglicherweise lohnt, wenn die Anwendungsgeschwindigkeit von entscheidender Bedeutung ist. Sie können sie sowohl in statischen als auch in nicht statischen Klassen verwenden.