// Argumente, die beim Auslösen des Events übergeben werden, definieren
public class MyEventArgs : EventArgs
{
// Rückgabewert des Events (Zugriff mit e.iValue)
public readonly int iValue;
public MyEventArgs(int val)
{
iValue = val;
}
}
// Klasse, die den Event auslöst
public class MyClass
{
// Eventhandler
public event EventHandler<MyEventArgs-> MyEvent;
public int a;
public int b;
public int Calc()
{
int iRetVal = a + b;
// wenn Event abgefragt werden soll
if (MyEvent != null)
{
// Event auslösen
MyEvent(this, new MyEventArgs(iRetVal);
}
return iRetVal;
}
}
Anwendungsbeispiel:
// irgendwo im Programm (Formular)
// Objekt der Klasse, die das Event auslöst, definieren
MyClass mc = new MyClass();
// Funktion, die beim Auslösen des Events anspricht, anmelden
mc.MyEvent += new EventHandler<MyEventArgs->(MyCalcEventhandler);
// etwas rechnen und implizit das Event auslösen
mc.a = 5;
mc.b = 7;
mc.Calc();
// Funktion, die beim Auslösen des Events abgearbeitet wird
private void MyCalcEventhandler(object sender, MyEventArgs e)
{
Console.WriteLine(e.iValue);
Console.WriteLine(e.iValue);
}
Manchmal kommt es vor, dass man die hinzugefügten Eventhandler auch wieder entfernen will, dazu folgendes erweitertes Anwendungsbeispiel:
// globale Referenz auf den EventHandler anlegen ("Merker")
private EventHandler<MyEventArgs-> _MyEvent = null;
...
MyClass mc = new MyClass();
// EventHandler erzeugen
_MyEvent = new EventHandler<MyEventArgs->(MyCalcEventhandler);
// EventHandler hinzufügen
mc.MyEvent += _MyEvent;
...
// EventHandler wieder entfernen
mc.MyEvent -= _MyEvent;