16 Maa 2008 |
|
Zoals elke developer heb ik een hekel aan repeterende code. Als C# developer ben ik nog wel eens jaloers op somige taal features van Visual Basic .NET. Een voorbeeld hiervan is het vuren van een event. VB.NET heeft hiervoor het RaiseEvent statement. Dit maakt het mogelijk om in VB.NET een event in 1 regel code te vuren: RaiseEvent Changed(Me, EventArgs.Empty) Het equivalent in C# kost iets meer code: // Take a snapshop of the Changed event subscribers. var changedEvent = Changed; // Check if we have subscribers. if(changedEvent != null) { // Invoke the delegate for all subscribers. changedEvent(this, EventArgs.Empty); } De extensionOmdat het, in tegenstelling tot class methods, mogelijk is een extension method op een De volgende extension method voegt de public static class Extensions { public static void Raise<TEventArgs>(this EventHandler<TEventArgs> target, Object sender, TEventArgs e) { var targetSnapshot = target; if (targetSnapshot != null) { targetSnapshot(sender, e); } } } Vanaf nu kunnen we events afvuren op de volgende manier en hebben wij het net zo gemakkelijk als VB.NET programmeurs: Changed.Raise(this, EventArgs.Empty); ConclussieC# is nog steeds een getypeerde taal, maar geeft ons steeds meer mogelijkheden die we terugzien komen in dynamische talen. De mogelijkheid om boodschappen naar null referenties te sturen geeft ons tal van extra mogelijkheden. Denk bijvoorbeeld ook aan een fluent interface. Download het voorbeeld project hier: eventing.made.easy.zipTrackback(0)
Comments (1)
![]() Write comment
|
Bedankt voor je schitterende presentatie. Ik heb niets dan positieve geluiden gehoord.
Peter Criellaard
Microsoft
Eindelijk een presentatie waarmee ik ook iets mee kan in de praktijk!
Dennis Schuuring
Max BV
Bedankt voor de presentatie, het was voor mij 1 van de betere momenten van die dag!
Henri Koppen
Arcenus
Ik bedoel: je kan problemen krijgen met cross-thread invoking. Als je event geraised wordt op een andere thread dan waar de eventhandler uitgevoerd wordt, kan je problemen krijgen.
Dat zou je dus ook nog moeten checken en afvangen in die method.