Was ist der Unterschied zwischen const
y readonly
in C#?
Wann würden Sie das eine dem anderen vorziehen?
Was ist der Unterschied zwischen const
y readonly
in C#?
Wann würden Sie das eine dem anderen vorziehen?
wann zu verwenden const
o readonly
const
readonly
App.config
aber wenn sie einmal initialisiert ist, kann sie nicht mehr geändert werden.Mit const gekennzeichnete Variablen sind kaum mehr als stark typisierte #define-Makros, zur Kompilierzeit werden const-Variablenreferenzen durch Inline-Literalwerte ersetzt. Infolgedessen können nur bestimmte eingebaute primitive Wertetypen auf diese Weise verwendet werden. Variablen, die als schreibgeschützt gekennzeichnet sind, können in einem Konstruktor zur Laufzeit gesetzt werden, und ihre Schreibgeschütztheit wird auch zur Laufzeit erzwungen. Dies ist mit geringfügigen Leistungseinbußen verbunden, aber es bedeutet, dass Sie readonly mit jedem Typ (sogar Referenztypen) verwenden können.
Außerdem sind const-Variablen von Natur aus statisch, während readonly-Variablen auf Wunsch instanzspezifisch sein können.
Es gibt einen bemerkenswerten Unterschied zwischen const und readonly Felder in C#.Net
const ist standardmäßig statisch und muss mit einem konstanten Wert initialisiert werden, der später nicht mehr geändert werden kann. Die Änderung des Wertes ist auch in Konstruktoren nicht erlaubt. Es kann nicht mit allen Datentypen verwendet werden. Zum Beispiel: DateTime. Es kann nicht mit dem Datentyp DateTime verwendet werden.
public const DateTime dt = DateTime.Today; //throws compilation error
public const string Name = string.Empty; //throws compilation error
public readonly string Name = string.Empty; //No error, legal
readonly kann als statisch deklariert werden, muss aber nicht. Bei der Deklaration muss nicht initialisiert werden. Sein Wert kann mit dem Konstruktor zugewiesen oder geändert werden. Daher bietet es einen Vorteil, wenn es als Instanzklassenmitglied verwendet wird. Zwei verschiedene Instanziierungen können unterschiedliche Werte für das Readonly-Feld haben. Zum Beispiel.
class A
{
public readonly int Id;
public A(int i)
{
Id = i;
}
}
Dann kann ein schreibgeschütztes Feld mit augenblicksspezifischen Werten initialisiert werden, wie folgt:
A objOne = new A(5);
A objTwo = new A(10);
Hier hat die Instanz objOne den Wert des Feldes readonly 5 und objTwo den Wert 10. Was mit const nicht möglich ist.
Eine weitere Ich hab's kapiert .
Da const wirklich nur mit grundlegenden Datentypen funktioniert, können Sie sich, wenn Sie mit einer Klasse arbeiten wollen, "gezwungen" fühlen, ReadOnly zu verwenden. Doch Vorsicht, die Falle lauert! ReadOnly bedeutet, dass Sie das Objekt nicht durch ein anderes Objekt ersetzen können (Sie können es nicht auf ein anderes Objekt verweisen lassen). Aber jeder Prozess, der einen Verweis auf das Objekt hat, kann die Werte ändern innerhalb das Objekt!
Lassen Sie sich also nicht zu der Annahme verleiten, dass "ReadOnly" bedeutet, dass ein Benutzer keine Änderungen vornehmen kann. Es gibt keine einfache Syntax in C#, um zu verhindern, dass eine Instanziierung einer Klasse ihre internen Werte ändert (soweit ich weiß).
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.