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?
Das erklärt es . Zusammenfassung: const muss bei der Deklaration initialisiert werden, readonly kann im Konstruktor initialisiert werden (und damit je nach verwendetem Konstruktor einen anderen Wert haben).
EDIT: Siehe Gishus obigen Hinweis auf den feinen Unterschied
Eine Konstante wird zur Kompilierzeit definiert und kann zur Laufzeit nicht geändert werden. Konstanten werden als Feld deklariert, indem die const
Schlüsselwort und müssen bei ihrer Deklaration initialisiert werden.
public class MyClass
{
public const double PI1 = 3.14159;
}
A readonly
member ist wie eine Konstante, da es einen unveränderlichen Wert darstellt. Der Unterschied besteht darin, dass ein readonly
Member können sowohl zur Laufzeit in einem Konstruktor initialisiert werden, als auch bei der Deklaration initialisiert werden.
public class MyClass1
{
public readonly double PI2 = 3.14159;
//or
public readonly double PI3;
public MyClass2()
{
PI3 = 3.14159;
}
}
const
static
(sie sind implizit statisch)readonly
Es gibt ein kleines Problem mit readonly. Ein readonly-Feld kann innerhalb des/der Konstruktoren mehrfach gesetzt werden. Selbst wenn der Wert in zwei verschiedenen verketteten Konstruktoren gesetzt wird, ist dies noch zulässig.
public class Sample {
private readonly string ro;
public Sample() {
ro = "set";
}
public Sample(string value) : this() {
ro = value; // this works even though it was set in the no-arg ctor
}
}
Eine const ist eine Konstante zur Kompilierzeit, während readonly es ermöglicht, einen Wert zur Laufzeit zu berechnen und im Konstruktor oder Feldinitialisierer zu setzen. Eine "const"-Konstante ist also immer konstant, während eine "readonly"-Konstante nur gelesen werden kann, sobald sie zugewiesen ist.
Eric Lippert aus dem C#-Team hat mehr Informationen über verschiedene Arten der Unveränderlichkeit.
Hier ist ein weiterer Link demonstriert, dass const nicht versionssicher oder für Referenztypen relevant ist.
Zusammenfassung :
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.