C #에 대한 일반적인 지침은 항상 공개 필드를 통해 속성을 사용하는 것입니다. 필드를 노출하면 구현 세부 사항을 많이 노출하게됩니다. 속성을 사용하면 해당 세부 정보를 캡슐화하여 코드를 사용하지 못하도록 숨기고 구현 변경 내용은 인터페이스 변경 내용과 분리됩니다.
그러나 readonly
키워드를 다룰 때이 규칙에 유효한 예외가 있는지 궁금합니다 . 이 키워드를 퍼블릭 필드에 적용하면 불변성이라는 추가적인 보장을 할 수 있습니다. 이것은 구현 세부 사항 일뿐 아니라 불변성은 소비자가 관심을 가질만한 부분입니다. readonly
필드를 사용 하면 공개 계약의 일부가되며 공개 인터페이스를 수정하지 않고도 향후 변경이나 상속으로 인해 깨지지 않는 것입니다. 그것은 부동산이 제공 할 수없는 것입니다.
그렇다면 불변성을 보장하는 것이 합당한 이유 readonly
중 어떤 경우에는 속성보다 필드 를 선택해야 합니까?
(명백하게, 나는 클래스의 디자인의 일부로 의미가 있고 계약에 불변성을 포함하려는 의도가있을 때만 현재 필드가 불변이기 때문에 항상 이 선택 을해야한다고 말하지는 않습니다 . 나는 회원이 있어야 할 때 interface
또는 게으른 로딩을 원할 때와 같이 그렇지 않은 특정 경우보다는 이것이 정당화 될 수 있는지에 초점을 맞춘 답변에 주로 관심이 있습니다 .)