2009-05-23 2 views
0

im Grunde möchte ich so etwas wie dies zu tun:Gibt es eine Möglichkeit, die kanonische OnPropertyChanged-Methode als eine Erweiterungsmethode zu schreiben?

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

, die gibt „kann System.ComponentModel.INotifyPropertyChanged.PropertyChanged nur auf der linken Seite von + = oder verwendet werden - =“

I ich meine, indem sie diese um es funktionieren kann:

public static void RaisePropertyChanged(this PropertyChangedEventHandler handler, object sender, string propertyName) 
{ 
    if (handler != null) 
    { 
     var e = new PropertyChangedEventArgs(propertyName); 
     handler(sender, e); 
    } 
} 

aber der Angerufene Code nicht ganz so schön aussehen:

PropertyChanged.RaisePropertyChanged(this, "Name"); 

vs dies:

this.OnPropertyChanged("Name"); 

Keine große Sache, aber es wäre schön, der Lage sein, es zu nennen, als ob es eine Instanzmethode war.

+0

Schauen Sie sich [diesen Blogpost] (http://www.gamlor.info/wordpress/?p=832) und die daran angehängten Dateien an. –

Antwort

1

Es ist auch gegen die Richtlinien: On * Methoden im Allgemeinen sind dazu gedacht, Dinge auf etwas zu tun, die innerhalb der implementierenden Instanz. Im Allgemeinen sind diese Methoden virtuell, sodass Sie sie in abgeleiteten Klassen überschreiben können. Eine On * -Methode extern zu haben macht daher keinen Sinn. Wenn Sie ein Ereignis auslösen möchten, ohne den gefürchteten Null-Test zu haben, sollten Sie in der Tat eine RaiseEvent() - Erweiterungsmethode verwenden. Ich habe viele davon geschrieben, alle mit Überladungen, so dass Sie einfach RaiseEvent (...) haben können und Sie müssen den Namen des Ereignisses nicht in die Methode aufnehmen. Dies ist besonders einfach in Fällen, in denen Sie beispielsweise den normalen EventHandler-Typ verwenden, sodass Sie für mehrere Ereignisse dieselbe Erweiterungsmethode verwenden können.

+0

Ja, es ist nicht wirklich eine große Sache, aber es schien nicht DRY zu sein, diese Methode in jeder Klasse zu schreiben, wenn es genau dasselbe ist, auch wenn es ein 1-Liner ist. – Davy8

Verwandte Themen