Unterschied zwischen Konstante und Readonly

Unterschied zwischen Konstante und Readonly

Es ist wichtig, die Konzepte der C# -Programmierung zu verstehen, bevor Sie mit der Implementierung des Codes fortfahren. Bevor wir zu den Unterschieden zwischen const und readonly springen, verstehen wir zuerst die Schlüsselwörter und wie sie in einem Programm verwendet werden. Beide sind die häufigsten Schlüsselwörter, die bei der C# -Programmierung und im Grunde genommen für denselben Zweck verwendet werden. Beide Schlüsselwörter unterscheiden sich jedoch sehr voneinander. Const ist ein reserviertes Wort, das zur Darstellung konstanter Werte verwendet wird, und gibt an, dass ein Wert nach Kompilierungszeit nicht geändert werden kann. Schauen wir uns einige der wichtigsten Unterschiede zwischen Const und Readonly an.

Was ist eine Konstant?

Const bezieht sich auf eine konstante Variable und der Wert, dessen Wert nur einmal während der Deklaration zugewiesen werden muss. Wenn das Schlüsselwort const während einer Deklaration verwendet wird, wird es zu einer konstanten Bedeutung, was bedeutet, dass der Wert konstant bleibt und nicht während des gesamten Programms geändert werden kann. Es ist eher ein reserviertes Wort, das angibt, dass ein Wert nach Kompilierungszeit nicht geändert werden darf. Eine const ist standardmäßig implizit statisch, daher kann er mit dem Klassennamen mit „ClassName" aufgerufen werden.Variablennamen". Die konstanten Werte werden auch als Literale bezeichnet. Es kann von jedem grundlegenden Datentyp wie einer Ganzzahl konstanten, einer schwimmenden Konstant oder einem String -Literal sein.

Was ist readonly?

Das Schlüsselwort Readonly ist ein Modifikator, der nur auf Feldern verwendet werden kann, jedoch nicht auf lokalen Variablen. Ein Readonly -Feld kann entweder zum Zeitpunkt der Deklaration oder innerhalb eines Konstruktors in derselben Klasse initialisiert werden, sodass die Werte je nach verwendeten Konstruktor für verschiedene Ausführungen des Programms unterschiedlich sein können. Das Keyword von Readonly gibt an, dass eine Instanzvariable eines Objekts nicht verändert ist und jeder Versuch, sie nach der Deklaration zu ändern, zu einem Kompilierungsfehler führt. Die Variable wird erst nach der Ausführung nicht modifizierbar. Variablen werden maßgeblich geschafft, um nicht mehr zu beenden, den Code nach dem Bau des Codes versehentlich zu ändern.

Unterschied zwischen Konstante und Readonly

  1. Basic

Konstantes (const) Schlüsselwort ist nichts anderes als unveränderliche Variablen, dessen Wert nur zur Kompilierungszeit initialisiert werden kann. Diese konstanten Werte werden auch als Literale bezeichnet. Es ermöglicht uns einfach zu geben, ob eine Variable verändert oder nicht. In einfachen Worten sind Konstanten implizit statisch und sollten initialisiert werden, bevor sie im Programm verwendet werden sollen. Readonly Keyword hingegen ist ein Modifikator, der auf Feldern verwendet werden kann und der Wert während der Laufzeit geändert werden kann. Es verhindert, dass Felder geändert werden und deren Werte durch Referenzvariablen festgelegt werden können.

  1. Initialisierung

Eine const ist standardmäßig statisch und die Werte, für die zum Zeitpunkt der variablen Deklaration zugewiesen werden sollte, bedeutet. Eine Konstante wird unter Verwendung des Schlüsselworts "const" deklariert. Die Initialisierung eines konstanten Feldes muss ein konstanter Ausdruck sein und kann nicht modifiziert werden. Einfach ausgedrückt, eine Const ist eine Konstante für Kompilierzeit. Ein readonly -Feld hingegen kann nur auf der Klassenebene initialisiert werden, nicht innerhalb der Methode, und das Feld kann nach der Initialisierung nicht geändert werden. Mit anderen Worten, readonly -Variablen können zum Zeitpunkt der Erklärung oder innerhalb eines Konstruktors initialisiert werden.

  1. Speicherzuweisung

Ein CONT-Wert wird direkt in den Code eingesetzt, da er als Ersatz für Kompilierzeit fungiert.  Der Compiler platziert den konstanten Wert in die Montagemetadaten, die die Konstante definiert und den Wert in den IL -Code selbst nach der Initialisierung einbettet. Daher ist für Konstanten zur Laufzeit kein Speicher erforderlich. Der Readonly -Wert ist nicht konstant und wird im Laderhaufen gespeichert. Der Speicher, für den er nicht zugewiesen werden kann, wenn sein Typ geladen ist. Die Readonly -Felder werden im dynamischen Speicher gespeichert, sodass die Werte nur zur Laufzeit erhalten werden können.

  1. Binärversioning

Obwohl beide Schlüsselwörter fast für denselben Zweck verwendet werden, haben sie unterschiedliche binäre Versionssemantik unterschiedlich. Wenn ein Ausdruck auf eine Konstante verweist, bettet der Compiler den Wert zur Kompilierungszeit ein. Wenn der Wert in einer anderen Baugruppe verwendet wird, muss die ursprüngliche Baugruppe aktualisiert werden und der Wert sollte geändert werden. Die Änderungen in der Baugruppe werden erst reflektiert, wenn sie neu kompiliert wird. Der Wert wird erst bis zur Laufzeit erhalten, wenn ein Ausdruck auf ein Feld mit Readonly verweist. Wenn der Wert in einer anderen Baugruppe geändert wird, werden die Änderungen in der Montage reflektiert, sobald er geladen ist, ohne ihn neu zu kompilieren müssen.

Const vs. Readonly: Vergleichstabelle

Zusammenfassung von const vs. Schreibgeschützt

Beide Schlüsselwörter werden für dasselbe verwendet, um ein Mitglied zu deklarieren, damit die Werte im gesamten Programm keine Änderungen sein können. Das CONT -Keyword unterscheidet sich jedoch stark vom Schlüsselwort Readonly. Const ist eine konstante Variable, deren Wert zur Kompilierungszeit initialisiert werden sollte, während ein Readonly-Feld nur auf Klassenebene initialisiert werden kann, entweder zum Zeitpunkt der Deklaration oder innerhalb des Konstruktors. Const ist eine Kompilierungszeitkonstante, während readonly-Felder schreibgeschützt sind. Konstanzvariablen können mit „Klassenname“ zugegriffen werden.Varibename ”Während readonly -Variablen mit dem„ InstalcaNAME.Variablennamen". Darüber hinaus können Const -Variablen in Methoden deklariert werden, während Readonly -Felder nicht in Methoden deklariert werden können.