1

이 오류는 클래스 객체에서 값을 검색하려고 할 때 나타납니다. get-only 속성에 readonly 키워드를 구현 한 후 표시됩니다. 지금까지 이해할 수있는 것은 "읽기 전용"을 구현하면 클래스 속성이 get 메서드로만 제한된다는 것입니다. 나는 키워드를 구현하는 방법에 대해 너무 확신하지 못한다.

여기에 현재 코드가 있습니다.

 class Counter
{
    private int _count;
    private string _name;

    public Counter(string name)
    {
        _name = name;
        _count = 0;
    }
    public void Increment()
    {
        _count++;
    }
    public void Reset()
    {
        _count = 0;
    }
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
        }
    }
    public readonly int Value
    {
        get
        {
            return _count;
        }
    }
}


  • readonly여기에 필요하거나 허용되지 않습니다. getter 만 제공 했으므로 속성이 읽기 전용임을 나타낼 수 있습니다. - Jeroen Mostert
  • getter 만있는 속성은 이미 읽기 전용입니다. 그만큼readonly한정자는 필드에만 적용됩니다. - CodeCaster

1 답변


5

읽기 전용 속성의 경우 다음 내용이면 충분합니다.

public int Value { get { return _count; }}

그만큼readonly키워드는 생성자에서만 설정할 수있는 읽기 전용 필드를 만드는 것입니다.

:

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

Btw, 당신이 쓸 수있는 짧은 컷 :

public int Value { get; private set;}

이제 public getter가있는 속성과 private setter가 있으므로이 클래스의 인스턴스 내에서만 (그리고 악의 반영을 통해) 설정할 수 있습니다.


  • "악의적 인 반사를 통해" 그것은 또한readonly-들. - HimBromBeere
  • @HimBromBeere : 좋은 지적. 이러한 액세스 한정자는 응용 프로그램을 작성하는 동안 개발자를 안내하기위한 것입니다. 어떠한 방식 으로든 보안이나 보호 기능을 제공하지는 않습니다. - Stefan

연결된 질문


관련된 질문

최근 질문