Verwendung von const, readonly und static in C #

Die Schlüsselwörter const, readonly und static werden beim Programmieren in C # häufig verwendet. Diese Schlüsselwörter weisen zwar wichtige Unterschiede auf, sie weisen jedoch auch Ähnlichkeiten auf, die es manchmal schwierig machen, zu wissen, wann welche verwendet werden sollen. Dieser Artikel beschreibt die konstanten, statischen und schreibgeschützten Schlüsselwörter in C #, wie sie verglichen werden und wie wir sie in unseren C # -Anwendungen verwenden sollten.

Um mit den in diesem Artikel bereitgestellten Codebeispielen arbeiten zu können, muss Visual Studio 2019 auf Ihrem System installiert sein. Wenn Sie noch keine Kopie haben, können Sie Visual Studio 2019 hier herunterladen. 

Erstellen Sie ein Konsolenanwendungsprojekt in Visual Studio 2019

Zunächst erstellen wir ein .NET Core-Konsolenanwendungsprojekt in Visual Studio. Angenommen, Visual Studio 2019 ist auf Ihrem System installiert, führen Sie die folgenden Schritte aus, um ein neues .NET Core-Konsolenanwendungsprojekt in Visual Studio zu erstellen.

  1. Starten Sie die Visual Studio-IDE.
  2. Klicken Sie auf "Neues Projekt erstellen".
  3. Wählen Sie im Fenster "Neues Projekt erstellen" aus der Liste der angezeigten Vorlagen "Konsolen-App (.NET Core)" aus.
  4. Weiter klicken.
  5. Geben Sie im nächsten Fenster "Konfigurieren Sie Ihr neues Projekt" den Namen und den Speicherort für das neue Projekt an.
  6. Klicken Sie auf Erstellen.

Dadurch wird ein neues .NET Core-Konsolenanwendungsprojekt in Visual Studio 2019 erstellt. In diesem Projekt wird die Verwendung der Schlüsselwörter const, readonly und static in C # in den folgenden Abschnitten dieses Artikels veranschaulicht.

Verwenden Sie das Schlüsselwort const in C #

Das Schlüsselwort const (read: constant) in C # wird verwendet, um eine konstante Variable zu definieren, dh eine Variable, deren Wert sich während der Lebensdauer des Programms nicht ändert. Daher ist es unbedingt erforderlich, dass Sie einer konstanten Variablen zum Zeitpunkt ihrer Deklaration einen Wert zuweisen.

Dieser Wert einer konstanten Variablen wird auch als "Kompilierungszeit" -Wert bezeichnet. Mit dem Schlüsselwort const deklarierte Variablen werden auch als Konstanten zur Kompilierungszeit bezeichnet. Es ist zu beachten, dass eine konstante Variable unveränderlich ist, dh der einer konstanten Variablen zugewiesene Wert kann später nicht mehr geändert werden.

Das folgende Codeausschnitt zeigt, wie Sie eine Konstante zur Kompilierungszeit mit dem Schlüsselwort const in C # definieren können.

const string connectionString = "Geben Sie hier Ihre Datenbankverbindungszeichenfolge an.";

Beachten Sie, dass Sie einer konstanten Variablen zum Zeitpunkt der Definition einen Wert zuweisen müssen. Beachten Sie auch, dass Sie das Schlüsselwort const nicht zum Erstellen eines konstanten Objekts verwenden können. Das Schlüsselwort const kann nur auf die primitiven Datentypen (z. B. Ints, Floats, Zeichen und Boolesche Werte) und Zeichenfolgen angewendet werden. Lassen Sie uns die Verwendung von const anhand eines Beispiels verstehen.

Betrachten Sie die folgende Klasse mit dem Namen Author. Wir werden der Author-Klasse nur einige Eigenschaften geben, um es einfach zu machen.

öffentliche Klasse Autor

    {

        public int Id {get; einstellen; }}

        öffentliche Zeichenfolge Vorname {get; einstellen; }}

        öffentlicher String Nachname {get; einstellen; }}

        öffentliche Zeichenfolge Adresse {get; einstellen; }}

    }}

Wenn Sie nun versuchen, ein konstantes Objekt der Author-Klasse mit dem Schlüsselwort const zu erstellen, wird der in Abbildung 1 unten gezeigte Kompilierungsfehler angezeigt.

Dieser Fehler gibt an, dass die rechte Seite des Zuweisungsoperators einen konstanten Wert haben sollte, um den Ausdruck zu erfüllen. Da die Anweisung new Author()keine Konstante ist, ist die Zuordnung ungültig und daher der Fehler.

Verwenden Sie das schreibgeschützte Schlüsselwort in C #

Das Schlüsselwort readonly kann verwendet werden, um eine Variable oder ein Objekt als schreibgeschützt zu definieren. Dies bedeutet, dass der Variablen oder dem Objekt nur im Klassenbereich oder in einem Konstruktor ein Wert zugewiesen werden kann. Sie können den Wert nicht ändern oder einen Wert einer schreibgeschützten Variablen oder einem schreibgeschützten Objekt in einer anderen Methode als dem Konstruktor neu zuweisen.

Lassen Sie uns dies anhand eines Beispiels verstehen. Betrachten Sie die folgende Klasse mit dem Namen DbManager.

öffentliche Klasse DbManager

    {

        public readonly string connectionString =

        "Geben Sie hier Ihre Datenbankverbindungszeichenfolge an.";

        öffentlicher DbManager ()

        {

            connectionString = "Hier können Sie einen Wert neu zuweisen.";

        }}

        public void ReAssign ()

        {

            connectionString = "Dies ist nicht erlaubt";

        }}

    }}

Der obige Code wird nicht kompiliert und es wird der in Abbildung 2 gezeigte Fehler angezeigt.

Verwenden Sie das statische Schlüsselwort in C #

Das statische Schlüsselwort in C # kann für eine Variable, eine Methode oder ein Objekt verwendet werden. Beachten Sie, dass ein statisches Mitglied einer Klasse eher zum Typ des Objekts als zur Instanz des Typs gehört. Mit anderen Worten, auf statische Elemente wird mit dem Namen der Klasse und nicht mit dem Namen einer Instanz zugegriffen. 

Betrachten Sie die folgende Klasse mit dem Namen Utility, die eine statische Methode enthält.

öffentliches Dienstprogramm

    {

        public static void SomeMethod ()

        {

            // Schreibe deinen Code hier

        }}

    }}

Sie können die Methode nicht SomeMethod()mit einer Instanz der Utility-Klasse aufrufen . Sie sollten diese Methode vielmehr mit der folgenden Syntax aufrufen.

Utility.SomeMethod ();

Die gleiche Regel gilt für eine statische Variable oder ein statisches Objekt. Sie können nur mit der unten gezeigten Syntax auf ein statisches Mitglied einer Klasse verweisen.

Klassenname . Mitglied;

Oder

Klassenname . Mitglied();

Ein Konstruktor einer Klasse kann statisch sein. Ein statischer Konstruktor einer Klasse wird verwendet, um die statischen Mitglieder der Klasse zu initialisieren. Ein statischer Konstruktor einer Klasse kann jedoch keine Parameter akzeptieren.

Eine Regel für const, readonly und static

Hier ist die Faustregel, die Sie befolgen können, wenn Sie mit den Schlüsselwörtern const, readonly und static arbeiten. Verwenden Sie das Schlüsselwort const, wenn sich der in einer Variablen enthaltene Wert während der Lebensdauer der Anwendung niemals ändert. Verwenden Sie das Schlüsselwort readonly, wenn Sie nicht sicher sind, ob sich der Wert einer Variablen eines Objekts ändern muss, Sie jedoch verhindern möchten, dass andere Klassen den Wert ändern. Verwenden Sie das statische Schlüsselwort, wenn das Mitglied einer Klasse zum Typ und nicht zur Instanz des Typs gehören soll.

So machen Sie mehr in C #:

  • Verwendung von Datenanmerkungen in C #
  • So arbeiten Sie mit GUIDs in C # 8
  • Wann wird eine abstrakte Klasse im Vergleich zur Schnittstelle in C # verwendet?
  • So arbeiten Sie mit AutoMapper in C #
  • Verwendung von Lambda-Ausdrücken in C #
  • So arbeiten Sie mit Action-, Func- und Predicate-Delegaten in C #
  • So arbeiten Sie mit Delegierten in C #
  • So implementieren Sie einen einfachen Logger in C #
  • So arbeiten Sie mit Attributen in C #
  • So arbeiten Sie mit log4net in C #
  • So implementieren Sie das Repository-Entwurfsmuster in C #
  • Wie man mit Reflexion in C # arbeitet
  • So arbeiten Sie mit dem Dateisystemwatcher in C #
  • So führen Sie eine verzögerte Initialisierung in C # durch
  • So arbeiten Sie mit MSMQ in C #
  • So arbeiten Sie mit Erweiterungsmethoden in C #
  • Wie wir Lambda-Ausdrücke in C #
  • Wann wird das flüchtige Schlüsselwort in C # verwendet?
  • Verwendung des Schlüsselwortsield in C #
  • So implementieren Sie Polymorphismus in C #
  • So erstellen Sie Ihren eigenen Taskplaner in C #
  • So arbeiten Sie mit RabbitMQ in C #
  • So arbeiten Sie mit einem Tupel in C #
  • Erkundung virtueller und abstrakter Methoden in C #
  • Verwendung des Dapper ORM in C #
  • Verwendung des Entwurfsmusters im Fliegengewicht in C #