somente leitura (translation from VPE for Csharp Reference)

The readonly palavra-chave é um modificador que pode ser usado em campos. Quando uma declaração de campo incluir um readonly modificador, atribuições para sistema autônomo campos introduzidas pela declaração só podem ocorrer sistema autônomo parte da declaração ou em um construtor na mesma classe.

Exemplo

Neste exemplo, o valor do campo de year não pode ser alterado no método ChangeYear, mesmo que ele é atribuído um valor no construtor da classe:

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

Você pode atribuir um valor a um readonly campo somente nos seguintes contextos:

  • Quando a variável é inicializada na declaração, por exemplo:

    public readonly int y = 5;
    
  • Para um campo de instância, em construtores de instância da classe que contém a declaração de campo ou para um campo estático, no construtor estático da classe que contém a declaração de campo.Também são apenas contextos em que é válido passar um readonly campo sistema autônomo um check-out or ref parâmetro.

Observação:

O readonly palavra-chave é diferente da Const palavra-chave.A const campo somente pode ser inicializado na declaração de campo. A readonly campo pode ser inicializado na declaração ou em um construtor. Portanto, readonly campos podem ter valores diferentes dependendo do construtor usado. Além disso, enquanto um const campo é uma constante de time de compilar, o readonly campo pode ser usado para constantes de time de execução sistema autônomo no exemplo a seguir:

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

No exemplo anterior, se você usar uma demonstrativo como esta:

p2.y = 66; // Error

Você obtém a mensagem de erro do compilador:

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

qual é o mesmo erro que quando você tentar atribuir um valor para uma constante.

Especificação da linguagem C#

Para obter mais informações, consulte a seção a seguir no Especificação da linguagem C#:

  • 10.4.2 Campos somente leitura

Consulte também

Conceitos

Guia de Programação C#

Referência

Palavras-chave C#

Modificadores (referência C#)

Const (translation from VPE for Csharp Reference)

Campos (guia de programação translation from VPE for Csharp)

Outros recursos

Referência C#