문제

자동 속성 get/set 메서드에 사용자 지정 동작을 추가할 수 있는 방법이 있는지 알고 싶습니다.

내가 생각할 수 있는 명백한 사례는 모든 설정된 속성 메서드가 모든 속성을 호출하기를 원하는 것입니다. PropertyChanged 이벤트 핸들러의 일부로 System.ComponentModel.INotifyPropertyChanged 구현.이를 통해 클래스는 관찰할 수 있는 수많은 속성을 가질 수 있으며, 각 속성은 자동 속성 구문을 사용하여 정의됩니다.

기본적으로 get/set 템플릿이나 클래스 범위가 있는 get/set 후크 게시와 유사한 것이 있는지 궁금합니다.

(동일한 최종 기능을 약간 더 장황한 방법으로 쉽게 달성할 수 있다는 것을 알고 있습니다. 저는 패턴 중복을 싫어합니다.)

도움이 되었습니까?

해결책

아니요, 사용자 정의 동작을 위해서는 "전통적인" 속성 정의를 사용해야 합니다.

다른 팁

아니 당신은 할 수 없습니다 :auto 속성은 비공개 필드에 대한 명시적 접근자를 위한 바로가기입니다.예를 들어

public string Name { get; set;} 

바로 가기입니다

private string _name;
public string Name { get { return _name; } set { _name = value; } };

사용자 지정 논리를 추가하려면 명시적으로 get 및 set을 작성해야 합니다.

에 보면 포스트샤프.이는 "이 코드 패턴을 하루에 수백 번 수행하는데 어떻게 자동화할 수 있습니까?"라는 일반적인 문제에 대한 AOP 프레임워크입니다.PostSharp를 사용하면 다음과 같이 단순화할 수 있습니다(예:).

public Class1 DoSomething( Class2 first, string text, decimal number ) {
    if ( null == first ) { throw new ArgumentNullException( "first" ); }
    if ( string.IsNullOrEmpty( text ) ) { throw new ArgumentException( "Must be not null and longer than 0.", "text" ) ; }
    if ( number < 15.7m || number > 76.57m ) { throw new OutOfRangeArgumentException( "Minimum is 15.7 and maximum 76.57.", "number"); }

    return new Class1( first.GetSomething( text ), number + text.Lenght );
}

에게

    public Class1 DoSomething( [NotNull]Class2 first, [NotNullOrEmpty]string text, [InRange( 15.7, 76.57 )]decimal number ) {
        return new Class1( first.GetSomething( text ), number + text.Lenght );
}

그러나 이것이 전부는 아닙니다!:)

개발 중에 많이 반복하게 될 동작인 경우 특별한 유형의 속성에 대한 사용자 정의 코드 조각을 만들 수 있습니다.

당신은 사용을 고려할 수 있습니다 포스트샤프 세터의 인터셉터를 작성합니다.사용하는 라이브러리에 따라 LGPL과 GPL이 모두 적용됩니다.

내가 생각할 수 있는 가장 가까운 해결책은 도우미 메서드를 사용하는 것입니다.

public void SetProperty<T>(string propertyName, ref T field, T value)
 { field = value;
   NotifyPropertyChanged(propertyName);
 }

public Foo MyProperty 
 { get { return _myProperty}
   set { SetProperty("MyProperty",ref _myProperty, value);}
 } Foo _myProperty;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top