안녕하세요.
Visual Studio 오류목록 메시지
에 자주 뜨는 서식 수정에 대한 질문 드립니다.
저는 Visual Studio에서 제안해주는 코드방식을 유심히 보고 배우며 유용하게 이용중입니다.
그런데 getter 서식에 대한 고민이 있습니다.
제가 일반적으로 사용하는 프로퍼티 구조에서 이 서식 수정 제안을 받아들이면 모양이 좀 이상해지는 것 같은데요.
제가 아직 익숙해지지 않아서 그런걸까요? 여러분은 어떻게 생각하시나요.
public int Blue
{
get { return _blue; }
set { _blue = value; OnPropertyChanged(); }
}
// Get Set의 부조화..??
public int Green
{
get => _green;
set { _blue = value; OnPropertyChanged(); }
}
그리고 기존 set 서식을 대체할만한(get => 서식에 어울리는) 스타일이 있는지도 궁금합니다.
읽어주셔서 감사합니다.
2개의 좋아요
private int _value;
public int Value => _value; // 읽기 전용 프로퍼티
private int _value;
public int Value { get => _value; set => _value = value; } // 읽기 / 쓰기 프로퍼티
그러나 @jamesnet214 님이 원하시는 두개의 코드는 블럭 으로 감싸야 하기 때문에,
private int _value;
public int Value
{
get => _value;
set => { _value = value; OnPropertyChanged(); }
}
이렇게 해야만 합니다.
C# 은 버젼 몇 부터 지원했는지는 지금 생각이 안나는데, 메소드 또한,
int GetValue() => _value;
이런 식으로 쓸 수 있는데요, 함수형 언어의 구문에 영향을 받은것으로 보입니다.
C# 10에는 다음과 같이 별개의 필드를 선언하지 않아도,
public Value { get => field; set => field = value; }
이렇게 자동 생성되는 필드를 이용할 수 도 있게 됩니다.
글이 길어졌는데, 두개 이상의 코드일 경우 블럭으로 감싸줘야 하므로,
public int Green
{
get => _green;
set { _blue = value; OnPropertyChanged(); }
}
이렇게 쓰는게 가장 최신(?)의 코딩 스타일이 되겠군요.
4개의 좋아요
전 아래와 같이 사용하는데, 이는 BindableBase를 참고한 것 입니다.
BindableBase를 사용할 수 있으면 편하게 SetProperty()
를 쓰고 그렇지 못한 경우에는 아래처럼 사용해요.
public class Some : INotifyPropertyChanged
{
private int _green;
public int Green
{
get => _green;
set => UpdateProperty(ref _green, value);
}
protected void UpdateProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (storage == null)
throw new ArgumentNullException(nameof(storage));
if (storage.Equals(value))
return;
storage = value;
OnPropertyChanged(propertyName);
}
#region PropertyChange Event
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
6개의 좋아요
@level120 좋은 방법 알려주셔서 감사합니다!!
저도 적용해볼 예정인데 사용해보고 후기도 남겨보겠습니다!
2개의 좋아요
오…데브익스프레스 mvvm 프레임워크에서 BindableBase가 이걸 기반으로 한건가 보군요!! 문법이 똑같네요 ㅎㅎ
1개의 좋아요