Condividi tramite


readonly (Riferimenti per C#)

Aggiornamento: novembre 2007

La parola chiave readonly è un modificatore che è possibile utilizzare per i campi. Se la dichiarazione di un campo include un modificatore readonly, le assegnazioni ai campi introdotte dalla dichiarazione potranno esistere solo come parte della dichiarazione o in un costruttore della stessa classe.

Esempio

Nell'esempio riportato di seguito, il valore del campo year non può essere modificato nel metodo ChangeYear, anche se ad esso è assegnato un valore nel costruttore della classe:

class Age
{
    readonly int _year;
    Age(int year)
    {
        _year = year;
    }
    void ChangeYear()
    {
        //_year = 1967; // Compile error if uncommented.
    }
}

È possibile assegnare un valore a un campo readonly solo nei contesti descritti di seguito:

  • Quando si inizializza la variabile nella dichiarazione, ad esempio:

    public readonly int y = 5;
    
  • Per un campo di un'istanza, nei costruttori di istanza della classe contenente la dichiarazione di campo oppure, per un campo static, nel costruttore static della classe contenente la dichiarazione di campo. Questi sono gli unici contesti in cui è valido passare un campo readonly come parametro out o ref.

Nota:

La parola chiave readonly è diversa dalla parola chiave const. Un campo const può essere inizializzato solo nella dichiarazione del campo, Un campo readonly può essere inizializzato nella dichiarazione o in un costruttore. I campi readonly possono quindi presentare valori diversi a seconda del costruttore utilizzato. Inoltre, mentre un campo const rappresenta una costante della fase di compilazione, il campo readonly può essere utilizzato per le costanti in fase di esecuzione, come nell'esempio riportato di seguito:

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
*/

Nell'esempio precedente, se si utilizza una dichiarazione di questo tipo:

p2.y = 66; // Error

verrà visualizzato il seguente messaggio di errore del compilatore:

The left-hand side of an assignment must be an l-value

Si tratta dello stesso errore che viene restituito quando si tenta di assegnare un valore a una costante.

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere la seguente sezione inclusa in Specifiche del linguaggio C#:

  • 10.4.2 Campi readonly

Vedere anche

Concetti

Guida per programmatori C#

Riferimenti

Parole chiave di C#

Modificatori (Riferimenti per C#)

const (Riferimenti per C#)

Campi (Guida per programmatori C#)

Altre risorse

Riferimenti per C#