Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
readonly Słowo kluczowe jest modyfikator, który można użyć pól.Gdy deklaracja pole zawiera readonly , modyfikator przypisań do pól, wprowadzone przez deklarację mogą występować wyłącznie jako część zgłoszenia lub w konstruktorze w tej samej klasie.
Przykład
W tym przykładzie wartość pola year nie można zmienić w metodzie ChangeYear, nawet jeśli przypisywana jest wartość w konstruktorze klasy:
class Age
{
readonly int _year;
Age(int year)
{
_year = year;
}
void ChangeYear()
{
//_year = 1967; // Compile error if uncommented.
}
}
Można przypisać wartości do readonly pola tylko w następujących kwestiach:
Jeśli zmienna jest zainicjowana w deklaracji, na przykład:
public readonly int y = 5;
Dla pola wystąpienia w konstruktorów wystąpienia klasy zawierający deklarację pola, lub dla pola statycznego, w konstruktorze statycznym klasy, która zawiera deklaracji pola.Te są również tylko kontekstach, w których jest ważne, aby przekazać readonly pola jako z lub ref parametru.
[!UWAGA]
readonly Słowa kluczowego różni się od const słowa kluczowego.A const pola mogą być inicjowane tylko w deklaracji tego pola.A readonly pola mogą być inicjowane w deklaracji lub w konstruktorze.W związku z tym readonly pola mogą mieć różne wartości w zależności od konstruktora używane.Ponadto, podczas gdy const pole jest stałą czasu kompilacji, readonly pole może być używane dla stałych runtime, jak w poniższym przykładzie:
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
*/
W poprzednim przykładzie, jeśli używana jest instrukcja, jak to:
p2.y = 66; // Error
zostanie wyświetlony komunikat o błędzie kompilatora:
The left-hand side of an assignment must be an l-value
który jest ten sam błąd, które pojawia się podczas próby przypisania wartości stałej.
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.
Zobacz też
Informacje
Pola (Przewodnik programowania w języku C#)
Koncepcje
Przewodnik programowania w języku C#