다음을 통해 공유


readonly(C# 참조)

업데이트: 2007년 11월

readonly 키워드는 필드에 사용할 수 있는 한정자입니다. 필드 선언에 readonly 한정자가 포함되어 있으면 선언의 일부로 대입하거나 동일한 클래스의 생성자에서 대입하는 경우에만 선언을 통해 정의한 필드에 값을 대입할 수 있습니다.

예제

이 예제에서 year 필드는 클래스 생성자에서 값이 할당된 경우라도 ChangeYear 메서드로 값을 변경할 수 없습니다.

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

다음 경우에만 readonly 필드에 값을 대입할 수 있습니다.

  • 다음과 같이 변수가 선언에서 초기화된 경우 값을 대입할 수 있습니다.

    public readonly int y = 5;
    
  • 인스턴스 필드의 경우 필드 선언이 포함된 클래스의 인스턴스 생성자에서 값을 대입할 수 있으며, 정적 필드의 경우에는 필드 선언이 포함된 클래스의 정적 생성자에서 값을 대입할 수 있습니다. 위의 두 경우는 readonly 필드를 out 또는 ref 매개 변수로 전달할 수 있는 유일한 경우이기도 합니다.

참고:

readonly 키워드는 const 키워드와 다릅니다. const 필드는 필드를 선언할 때만 초기화될 수 있습니다. readonly 필드는 필드를 선언할 때 또는 생성자에서 초기화될 수 있습니다. 따라서 readonly 필드의 값은 사용된 생성자에 따라 다릅니다. 또한 const 필드는 컴파일 타임 상수인 반면 readonly 필드는 다음 예제에서와 같이 런타임 상수로도 사용할 수 있습니다.

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

앞의 예제에서 다음과 같은 문을 사용하면

p2.y = 66; // Error

다음과 같은 컴파일러 오류 메시지가 발생합니다.

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

이 오류는 상수에 값을 대입할 때 발생하는 오류와 동일합니다.

C# 언어 사양

자세한 내용은 C# 언어 사양에서 다음 단원을 참조하십시오.

  • 10.4.2 읽기 전용 필드

참고 항목

개념

C# 프로그래밍 가이드

참조

C# 키워드

한정자(C# 참조)

const(C# 참조)

필드(C# 프로그래밍 가이드)

기타 리소스

C# 참조