// remaining implementation removed from listing }
특성 초기화는 읽기 전용 속성에 가장 유용하다.
아래 처럼 직접 정의도 가능하다.
1 2 3 4 5 6 7 8 9 10
publicclassPerson { publicstring FirstName { get { return firstName; } set { firstName = value; } } privatestring firstName; // remaining implementation removed from listing }
속성 구현이 단일식인 경우 getter또는 setter에 식 본문 맴버로 사용할수 있다.
1 2 3 4 5 6 7 8 9 10
publicclassPerson { publicstring FirstName { get => firstName; set => firstName = value; } privatestring firstName; // remaining implementation removed from listing }
유효성 검사
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
publicclassPerson { publicstring FirstName { get => firstName; set { if (string.IsNullOrWhiteSpace(value)) thrownew ArgumentException("First name must not be blank"); firstName = value; } } privatestring firstName; // remaining implementation removed from listing }
아래는 좀더 간소화 버전
1 2 3 4 5 6 7 8 9 10
publicclassPerson { publicstring FirstName { get => firstName; set => firstName = (!string.IsNullOrWhiteSpace(value)) ? value : thrownew ArgumentException("First name must not be blank"); } privatestring firstName; // remaining implementation removed from listing }
publicclassPerson : INotifyPropertyChanged { publicstring FirstName { get => firstName; set { if (string.IsNullOrWhiteSpace(value)) thrownew ArgumentException("First name must not be blank"); if (value != firstName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(FirstName))); } firstName = value; } } privatestring firstName;
publicevent PropertyChangedEventHandler PropertyChanged; // remaining implementation removed from listing }