CS0273

internal class Player
{
    public int PosX { get; private set; }
    public int PosY { get; private set; }
    private Board Board { get; private set; }
}

이 코드들 중 다음 부분에서 문제가 발생한다.

private Board Board { get; private set; }

 

 

이것을 에러가 발생하지 않도록 바꾸려면 다음과 같이 만든다:

private Board Board { get; set; }

setter는 전체 프로퍼티의 접근성(accessibility)이므로 이미 private이다. 

 

기본적으로 프로퍼티의 `get;` 또는 `set;`의 접근 제한자를 지정하려면 다른 경우보다 더 제한적(restrictive)이어야 한다고 한다. 내가 이해한 바로는 아래와 같이 프로퍼티의 접근 제한자는 get, `set`에 접근 제한자보다 범위가 더 넓어야 한다는 것이다. 그래서 아래와 같은 케이스는 에러 발생이 일어나지 않는다.

internal Board Board { get; private set; }
public Board Board { get; private set; }

그래서 위 뜻은 프로퍼티 또는 인덱서 자체에 설정된 접근성보다 accessor-modifier(get, set)의 접근 제한자가 더 엄격하게(빡세게) 설정되어야 한다는 뜻이다.

 

참고로 reading, writing 모두 private이라면 그냥 필드로 사용하는 것이 나을 수도 있다. 프로퍼티의 이점은 대부분 현재 클래스 외부에 노출된 경우에만 나타난다.

 

 

 

참고자료

https://stackoverflow.com/questions/22226718/accessor-must-be-more-restrictive-than-the-property-or-indexer

https://learn.microsoft.com/ko-kr/dotnet/csharp/misc/cs0273

 

 

 

'C#' 카테고리의 다른 글

[C#] 제너릭 메소드  (0) 2024.10.06
[C#] 데이터 타입  (0) 2023.01.05
[C#] 변수  (0) 2023.01.04
[C#] Boxing과 Unboxing에 대하여  (0) 2021.08.08
[Unity, C#] 중첩 클래스(Nested Class)  (0) 2021.05.02