Event und Eventhandler

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen

Da die Frage nach Events auch schon im Forum aufgetaucht ist, denke ich, hier im Wiki ist es richtig aufgehoben.

<code=csharp>

1:  namespace Lernen {
2:      
3:      public delegate void Zeiger();  //Deklaration Delegate
4:      
5:      public class MyClass1 {
6:          public event Zeiger Ereignis; //Deklaration Event
7:          private int zahl;
8:          public int Zahl {
9:              get { return zahl; }

10: set { 11: if (value != 0) { 12: zahl = value; 13: } 14: else { 15: Ereignis(); 16: } 17: } 18: } 19: } 20: 21: 22: class MainClass { 23: 24: public static void Main(string[] args) { 25: MyClass1 obj = new MyClass1(); 26: obj.Ereignis += new Zeiger(Handler); //Event wird an Eventhandler gebunden 27: obj.Zahl = 0; 28: 29: } 30: 31: public static void Handler() { 32: Console.WriteLine("Ungültiger Wert"); 33: } 34: 35: 36: } 37: }</code=csharp>


Das einfache Beispiel zeigt uns, wie ein Delegate definiert wird (Zeile 3)und ein Event vom Typ eines Delegaten deklariert wird (Zeile 6).
Durch die Zuweisung eines nicht erlaubten Betrags (Zeile 27) an die Eigenschaft (Zeile 8), wird durch die if-Anweisung das Event ausgelöst. Der Eventhandler kann aber jede parameterlose Methode sein, die vom Rückgabetyp her void ist. Wir müssen also das Event an eine Methode 'binden' (es ist nicht vorgeschrieben, dass ein Ereignis nur einen Eventhandler bedient). Das geschieht in Zeile 26 mittels '+=' Operator. Nach der Zuweisung eines falschen Wertes wird nun das Ereignis ausgelöst, welches vom Eventhandler in Zeile 31 aufgenommen wird. Das Resultat ist die Ausführung des Codes der Methode (in unserem Fall der Eventhandler) Handler. Es wird an der Konsole "Ungültiger Wert" ausgegeben.

--Jango 21:46, 12. Jan 2008 (CET)