Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Visual C# 2011 Grundkurs

Event-Argumente

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Vermeiden Sie, in Events einen Delegate zu benutzen, der auf eine Methode mit Parametern zeigt! Weshalb – und wie man es besser lösen kann – erfahren Sie in diesem Video.
05:27

Transkript

Wenn wir in unserem C#-Code ein Event auslösen und dieses Event benutzt ein Delegat, der die Parameter erwartet, dann kann man das natürlich so machen, dass man in diesem Delegaten eine Parameterliste definiert. Aber das ist in gewissen Situationen eine sehr schlechte Lösung, die sich im Projektverlauf als sehr ungünstig erweisen kann. Wie man das bisher macht, mit sogenannten Parameterobjekten, schauen wir uns jetzt einmal an. Ich habe dazu schon ein Programm vorbereitet. Wir haben eine Klasse Button. In dieser Klasse ist ein Click-Event definiert. Dieses Click-Event ist vom Typ Click-Handler. Hier wird dieses Event ausgelöst und dieser Click-Handler zeigt auf eine Methode, die keinen Rückgabewert hat Und einen integer-Parameter erwartet. In unserer Program- und unserer main-Methode erstellen wir ein Objekt von diesem Button, abonnieren dieses Event und zeigen mit dem Delegaten, den wir an dieses Event hängen, auf "MyClickMethod", was diesen Parameter einfach nur in der Konsole ausgibt und hier unten klicken wir das Ganze dann an. Wir führen das einmal aus und das funktioniert natürlich. Schlecht ist allerdings daran - wenn wir diesen Button z.B. in einem Projekt nutzen und mehrere andere haben diesen Button in ihrem Code eingebunden und ihre Methoden drangehangen und wir kommen jetzt irgendwann einmal im Projektverlauf auf die Idee, "Ich brauche jetzt nicht nur einen Parameter, wenn ich dieses Event auslöse sondern ich brauche noch einen zweiten Parameter"ist das hier überhaupt kein Problem. Wir machen das so, wir sind der Entwickler von dem Button und damit ist die Sache für uns erledigt. Alle anderen Entwickler, die unseren Button benutzt haben, können ihren Code nicht mehr kompilieren, weil an dieser Stelle, "MyClickMethod", die der Entwickler einmal definiert hat, nur einen Parameter übergeben bekommt. Das ist sehr schlecht und wenn man so eine Änderung später einmal im Projekt hat, ist das ein riesengroßer Aufwand, alle diese Methoden anzupassen, die an dieses Event gehangen werden. Deswegen arbeitet man mit sogenannten Parameterobjekten. Diese Parameterobjekte sind normale Klassen, die dann ihrerseits wieder Daten enthalten. So eine Klasse legen wir uns einmal an. Rechtsklick, "Hinzufügen", eine Klasse und dann nennen wir die einmal "ClickEventArgs", bestätigen das und schauen uns die Quelltextdatei einmal an. Eine normale Klasse und dort definieren wir einmal zwei Properties. Diese Klasse hat einen Parameter, mit dem int, der heißt "param1", hat einen Getter und einen Setter und ist eine automatisch implementierte Eigenschaft. Wenn wir jetzt unser Szenario, wir drehen das Ganze einmal wieder auf den Ursprungszustand zurück, bevor wir unsere Änderungen gemacht haben. Wenn wir hier an dieser Stelle keinen ClickHandler einmal direkt am Anfang entwickelt haben, der ein Int-Parameter übergeben bekommt, sondern der ein Objekt vom Typ ClickEventArgs übergeben bekommt, dann können wir oben in unserer Klasse hingehen und zunächst einmal diese ClickEventArgs, davon ein Objekt erstellen. args = new ClickEventArgs - und in diesem Args setzen wir jetzt unseren param1 auf 5, was wir hier vorher fest codiert haben und anstelle dessen haben wir jetzt das Parameterobjekt, in dem dieser Parameter gespeichert ist. Dann muss natürlich diese Methode auch angepasst werden, aber die wäre von vornherein so geändert worden. Wir hätten hier also unsere ClickEventArgs, ich nenne diese auch einmal Args und hier geben wir dann "args.param1 aus. D.h. also, das wäre jetzt nach der besseren Variante unser Ursprungszustand gewesen. Wir hätten nicht mit normalen Integer-Parametern gearbeitet. Jetzt noch einmal dasselbe Szenario. Wir merken irgendwann einmal, bei unserem Event müssen wir noch einen zweiten Parameter mitgeben. Wir gehen einfach in unsere ClickEventArgs und definieren hier einfach noch einen zweiten Parameter und sind fertig. Dann können wir in unsere Button.cs hingehen und können in der ClickEvent, wo das Event ausgelöst, in param2 einen Wert reinschreiben - und damit haben wir jetzt unsere Bedürfnisse abgedeckt. Die Entwickler, die unser Event abonniert haben und schon diverse Methoden dafür geschrieben haben, interessiert das überhaupt nicht. Die haben zwar hier die Möglichkeit auf param2 zuzugreifen, müssen es aber nicht. D.h. ich kann so an den übergebenen Parametern ständig Änderungen durchführen und neue Parameter hinzufügen, ohne dass die Methoden, die von außen an dieses Event gehangen sind, in irgendeiner Weise beeinflusst werden. Das macht wirklich sehr viel Sinn und man sollte generell, wenn man mit Delegaten arbeitet, die in Events benutzt werden, die eine Parameterliste haben, immer auf solche Parameterobjekte zurückgreifen. Normalerweise, damit man diese EventArgs später auch noch mit anderen, im Framework definierten Events benutzen kann, sollte man diese eigenen EventArgs immer von der Basisklasse EventArgs ableiten. Man kann z.B. im Framework den Delegaten EventHandler benutzen, das ist ein sehr verbreiteter EventHandler und dort kann man eben auch solche Argumente übergeben. Allerdings müssen die von EventArgs abgeleitet sein, deswegen empfiehlt es sich immer, eigene EventArgs von der Basisklasse EventArgs abzuleiten. Wir haben uns einmal in diesem Video angeschaut, warum es keine wirklich gute Wahl ist, Delegaten in Events zu verwenden, die eine Parameterliste haben. Besser ist es, dass man solche separaten Parameterobjekte erstellt. Diese Parameterobjekte enthalten dann die normalen Parameter - und wenn man dann irgendwann im späteren Projektverlauf zusätzliche Parameter hinzufügt, müssen diese von außen an dieses Event gehangene Methoden überhaupt nicht mehr angepasst werden und niemand hat zusätzliche Arbeit dadurch. Und jeder, der möchte, kann an dieser Stelle dann die neuen Parameter benutzen - und wer sie nicht benutzen möchte, lässt es einfach sein.

Visual C# 2011 Grundkurs

Steigen Sie in die C#-Programmierung ein und lernen Sie sowohl die Grundlagen der Sprache C# als auch die Entwicklungsumgebung Visual Studio 2010 und .NET-Framework kennen.

7 Std. 28 min (81 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Visual Studio Visual Studio 2010
Exklusiv für Abo-Kunden
Erscheinungsdatum:27.06.2011

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!