Erklären Sie den Unterschied zwischen const- und readonly-Schlüsselwörtern in C#

WBOY
Freigeben: 2023-09-15 16:33:02
nach vorne
1039 Leute haben es durchsucht

Erklären Sie den Unterschied zwischen const- und readonly-Schlüsselwörtern in C#

In C# werden sowohl const- als auch readonly-Schlüsselwörter verwendet, um unveränderliche Werte zu definieren, die nach der Deklaration nicht geändert werden können. Es gibt jedoch einige wichtige Unterschiede zwischen den beiden. Der Modifikator

const

const deklariert konstante Werte, die zur Kompilierungszeit bekannt sind und sich nicht ändern, d. h. sie sind unveränderlich. In C# können nur integrierte Typen als const markiert werden. Benutzerdefinierte Typen (wie Klassen, Strukturen usw.) können nicht konstant sein. Darüber hinaus können Klassenmitgliedstypen (z. B. Methoden, Eigenschaften oder Ereignisse) nicht als Konstanten markiert werden.

Sie müssen Konstanten während der Deklaration initialisieren.

class Period{
   public const int hours = 12;
   public const int minutes = 60;
}
Nach dem Login kopieren

Konstanten können mit jedem Sichtbarkeitsmodifikator markiert werden, d. h. privat, öffentlich, geschützt, geschützt intern oder privat geschützt.

Konstanten fungieren auch als statische Werte, d. h. der Wert der Konstante ist allen Instanzen der Klasse zugeordnet. Sie müssen sie nicht explizit mit dem Schlüsselwort static markieren. Sie können nicht über Instanzvariablen der Klasse auf Konstanten zugreifen, Sie müssen den Klassennamen verwenden.

Als schreibgeschützt markierte Felder können nur deklariert oder in einem Konstruktor verwendet werden. Sobald eine Instanz einer Klasse erstellt wurde, können schreibgeschützte Felder nicht mehr geändert werden.

Wenn es sich bei dem Feld um einen Werttyp handelt, wird es durch Markieren als schreibgeschützt unveränderlich. Wenn es sich bei dem schreibgeschützten Feld hingegen um einen Referenztyp handelt, können Sie die Daten des Objekts, auf das sich die Variable bezieht, immer noch ändern. Sie können den Verweis jedoch nicht so ändern, dass er auf ein neues Objekt verweist.

class Person{
   private readonly string _title;
   private readonly string _skill;
   public Person(string title, string skill){
      _title = title;
      _skill = skill;
   }
}
Nach dem Login kopieren

Schreibgeschützte Felder können in der Felddeklaration und in jedem Konstruktor mehrfach zugewiesen werden. Darüber hinaus kann es je nach verwendetem Konstruktor unterschiedliche Werte haben.

Ein wichtiger Unterschied zwischen den beiden besteht darin, dass in einer Assembly deklarierte const- oder readonly-Felder kompiliert werden, wenn sie in einer anderen Assembly verwendet werden.

< ul class="list">
  • Für konstante Werte ist es wie Suchen und Ersetzen. Der konstante Wert wird in die Zwischensprache der zweiten Assembly „eingebrannt“. Das heißt, wenn Sie die Konstante aktualisieren, hat die zweite Assembly weiterhin den ersten Wert, bis Sie sie neu kompilieren.

  • Für schreibgeschützte Werte ist es wie eine Referenz auf einen Speicherort. Der Wert ist nicht in die Zwischensprache der zweiten Assembly eingebettet. Dies bedeutet, dass bei einer Aktualisierung des Speicherorts die zweite Assembly den neuen Wert erhält, ohne dass eine Neukompilierung erforderlich ist. Das Aktualisieren eines schreibgeschützten Felds bedeutet, dass nur die erste Assembly kompiliert werden muss, keine Benutzer-Assemblys.

  • Beispiel

    Echtzeitdemonstration

    using System;
    class Program{
       static void Main(){
          Console.WriteLine(Period.HOURS);
          var person = new Person("John", "Programmer");
          person.Print();
       }
    }
    class Period{
       public const int HOURS = 12;
       public const int MINUTES = 60;
    }
    class Person{
       private readonly string _title;
       private readonly string _skill;
       public Person(string title, string skill){
          _title = title;
          _skill = skill;
       }
       public void Change(string skill){
          // Error: A readonly field cannot be assigned to
          // this._skill = skill;
       }
       public void Print(){
          Console.WriteLine($"{_title}: {_skill}");
       }
    }
    Nach dem Login kopieren

    Ausgabe

    12
    John: Programmer
    Nach dem Login kopieren

    Das obige ist der detaillierte Inhalt vonErklären Sie den Unterschied zwischen const- und readonly-Schlüsselwörtern in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Quelle:tutorialspoint.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!