Silverlight Snippet: Kompakte Event Handler mit Anonymen Methoden

Oftmals möchte man als Reaktion auf Events, z.B. das Klicken auf einen Button, nur sehr wenige oder sogar nur eine Anweisung ausführen.

In diesem Fall wirkt das übliche Verfahren, auf Events zu reagieren, ziemlich überfrachtet:

button.Click += new RoutedEventHandler(button_Click);

void button_Click(object sender, RoutedEventArgs e)
{
       button.Content = "Clicked!";
}

Wir brauchen hier mehrere Zeilen Code und eine neue Methode in der Klasse, nur um den Content des Buttons beim Klicken umzusetzen. Das sollte auch mit weniger Code möglich sein.

Und tatsächlich gibt es in C# ziemlich praktische Konstruktionen, um gerade solche Fälle enorm abzukürzen: Lambda Ausdrücke und Anonyme Methoden.

Damit kann man den obigen Code auf nur eine Zeile reduzieren:

button.Click += (sender, e) => button.Content = "Clicked!";

Ein Lambda Ausdruck hat in der Regel folgende Form:

(Eingabe Parameter) => Ausdruck

Das bedeutet im Grunde, der Ausdruck (Eingabe Parameter) „wechselt zu“ dem Anweisungsblock rechts. Wir verwenden den Lambda Ausdruck hier, um eine anonyme (namenlose) Methode als Event-Handler zu definieren.

In unserem Fall sind die Eingabe Parameter die Parameter, die in der Event-Handler Methode für das Click-Event erwartet werden: Der erste (sender) vom Typ Object, der zweite (e) vom Typ RoutedEventArgs. Die Typen muss man in diesem Fall nicht explizit angeben – sie werden vom Compiler korrekt aufgelöst.

Nach dem => Operator folgt schließlich die eigentliche Implementierung der Methode. Also das, was sonst im Methodenrumpf stehen würde.

Falls die anonyme Methode aus mehr als einer Anweisung bestehen soll, muss man die Anweisungen in geschweiften Klammern schreiben:

button.Click += (sender, e) =>
{
          button.Width = 32;
          button.Content = "Klein!";
};

Je nach größe des Projektes kann man so eine Menge eigentlich überflüssigen Code einsparen.

Kommentare

Eine Nachricht zu “Silverlight Snippet: Kompakte Event Handler mit Anonymen Methoden”

  1. free websites on 16. Februar 2011 16:59

    Can I just say what a reduction to find somebody who actually knows what theyre talking about on the internet. You definitely know how to deliver a problem to mild and make it important. More people need to learn this and perceive this aspect of the story. I cant believe youre not more well-liked since you positively have the gift.