readonly – modifikátor (Referenční dokumentace jazyka C#)
readonly Klíčové slovo je modifikátor, který lze použít u polí.Při deklaraci pole obsahuje readonly , modifikátor, přiřazení pole zavedené prohlášení může dojít pouze jako součást prohlášení nebo v konstruktoru ve stejné třídě.
Příklad
V tomto příkladu je hodnota pole year nelze změnit v metodě ChangeYear, i když je přiřazena hodnota v konstruktoru třídy:
class Age
{
readonly int _year;
Age(int year)
{
_year = year;
}
void ChangeYear()
{
//_year = 1967; // Compile error if uncommented.
}
}
Můžete přiřadit hodnotu readonly pouze v kontextu následující pole:
Pokud proměnná inicializována v prohlášení, například:
public readonly int y = 5;
Pole instance v konstruktory instancí třídy, která obsahuje pole prohlášení nebo statické pole na statický konstruktor třídy, která obsahuje pole prohlášení.Jsou také pouze kontexty, které je platné pro předání readonly jako pole mimo nebo ref parametr.
[!POZNÁMKA]
readonly Se liší od klíčového slova const klíčové slovo.A const pole lze inicializovat pouze v prohlášení pole.A readonly pole mohou být inicializovány v prohlášení nebo v konstruktoru.Proto readonly pole mohou mít různé hodnoty podle toho použít konstruktor.Také při const je konstanta kompilace, pole readonly pole lze použít pro runtime konstanty, jako v následujícím příkladu:
public static readonly uint timeStamp = (uint)DateTime.Now.Ticks;
public class ReadOnlyTest
{
class SampleClass
{
public int x;
// Initialize a readonly field
public readonly int y = 25;
public readonly int z;
public SampleClass()
{
// Initialize a readonly instance field
z = 24;
}
public SampleClass(int p1, int p2, int p3)
{
x = p1;
y = p2;
z = p3;
}
}
static void Main()
{
SampleClass p1 = new SampleClass(11, 21, 32); // OK
Console.WriteLine("p1: x={0}, y={1}, z={2}", p1.x, p1.y, p1.z);
SampleClass p2 = new SampleClass();
p2.x = 55; // OK
Console.WriteLine("p2: x={0}, y={1}, z={2}", p2.x, p2.y, p2.z);
}
}
/*
Output:
p1: x=11, y=21, z=32
p2: x=55, y=25, z=24
*/
V předchozím příkladu, pokud používáte příkaz takto:
p2.y = 66; // Error
Zobrazí se chybová zpráva kompilátoru:
The left-hand side of an assignment must be an l-value
která je ke stejné chybě, kterou dostanete, když se pokusíte přiřadit hodnotu konstanty.
Specifikace jazyka C#
Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.
Viz také
Referenční dokumentace
Modifikátory (Referenční dokumentace jazyka C#)
const (Referenční dokumentace jazyka C#)
Pole (Průvodce programováním v C#)