C# events ein bisschen #er

Die Standardimplementation von Events wird hier nicht behandelt.

Das neue Generic EventHandler<T>

Bei den meisten Events handelt es sich um standardmässig Implementationen mit den Definitionnen einer delegate als EventHandler, einem Event und den EvengArgs (oder einer Ableitung davon). Hier bietet bereits C# 2.0 eine Vereinfachung durch das Generic delegate EventHandler<TEventArgs>. Der zu definierende EventHandler kann mit dieser generischen delegate ersetzt werden. Nun wird die Definition eines Events einfacher und theoretisch auf einer einzigen Zeile möglich.

Beispiel:

public class PropertyChangedEventArgs : EventArgs { }
public event EventHandler<PropertyChangedEventArgs> PropertyChanged;

Events registrieren

Früher musste man die Events mit komplettem Syntax registrieren:

this.MyLinkControl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.MyLinkControl_LinkClicked);

Hier die Kurzform:

this.MyLinkControl.EnterPress += this.MyLinkControl_EnterPress;

Die Event Accessors

Das ist ein wirklich cooles Feature. Standardmässig werden die Accessoren implizit vom Kompiler bei der Defintion erzeugt.

public event EventHandler PropertyChanged;

Möchte man nun die Accessoren selber manipulieren können, muss man den automatisch erzeugten Code vom Kompiler einfach selber schreiben.

Beispiel:

private EventHandler _propertyChanged;
public event EventHandler PropertyChanged
{
add { _propertyChanged += value; }
remove { _propertyChanged -= value; }
}

Nun ist es problemlos möglich noch Aktionen durchzuführen, bevor ein Event angehängt resp. wieder entfernt wird.