2009-05-23 5 views
0

기본적으로 나는 다음과 같이하고 싶다.확장 메서드로 정식 OnPropertyChanged 메서드를 작성하는 방법이 있습니까?

public static void OnPropertyChanged(this INotifyPropertyChanged changedObject, string propertyName) 
{ 
    var handler = changedObject.PropertyChanged; 
    if (handler != null) 
    { 
     var e = new PropertyChangedEventArgs(propertyName); 
     handler(changedObject, e); 
    } 
} 
public static void OnPropertyChanged(this INotifyPropertyChanged changedObject, string propertyName) 
{ 
    var handler = changedObject.PropertyChanged; 
    if (handler != null) 
    { 
     var e = new PropertyChangedEventArgs(propertyName); 
     handler(changedObject, e); 
    } 
} 

"System.ComponentModel.INotifyPropertyChanged.PropertyChanged는 + = 또는 - ="의 왼쪽에서만 사용할 수있다.

하지만 호출 코드가 꽤 멋지게 보이지 않습니다.

this.OnPropertyChanged("Name"); 

큰 문제는 아니지만, 인스턴스 메서드처럼 호출 할 수 있으면 좋을 것입니다.

+0

[이 블로그 게시물] (http://www.gamlor.info/wordpress/?p=832) 및 첨부 파일을 확인하십시오. –

답변

1

또한 지침에 위배됩니다. 일반적으로 * 메소드는 구현 인스턴스 내부에있는 것을 기반으로합니다. 일반적으로 이러한 메서드는 가상이므로 파생 클래스에서 재정의 할 수 있습니다. 따라서 외부에서 On * 방법을 사용하는 것은 의미가 없습니다. 두려운 Null 테스트를하지 않고 이벤트를 발생 시키려면 실제로 RaiseEvent() 확장 메소드를 사용해야합니다. 나는 이것들을 많이 썼는데, 모두 과부하가있어서 RaiseEvent (...)를 가질 수 있고 메서드에 이벤트의 이름을 포함 할 필요가 없습니다. 이것은 일반적인 EventHandler 유형을 사용하는 경우에 특히 쉽기 때문에 더 많은 이벤트에 대해 동일한 확장 메소드를 사용할 수 있습니다.

+0

그래,별로 큰 문제는 아니지만 1 라이너 일지라도 똑같은 경우 모든 클래스에 해당 메소드를 작성해야한다는 것은 그리 죽지 않는 것처럼 보입니다. – Davy8

관련 문제