Argumenter der er til at overse

by Jesper juli 05, 2008 09:45

Jeg lavede for noget tid siden, min egen generiske model af en EventArgs klasse. Siden .NET 2.0, har vi kunne erklære en række generiske delegates af typen: EventHandler<T>, og på den måde er vi sluppet for at skulle udfører det trivielle arbejde det er at erklære disse delegates. Men hvad nu med EventArgs? Hvorfor er der ikke en generisk klasse? Jeg ved ikke hvor tit jeg lige har behov for at sende lidt argumenter med, når jeg rejser en event - det er tit.

[code=csharp]namespace System { public class EventArgs; : EventArgs { public EventArgs(T value) { this.Value = value; } public T Value { get; set; } } } [/code]

På den måde, kan jeg nemt sende data med, når mine objekter rejser events:

[code=csharp] public event EventHandler> HelloWorldRaised; // Og rejse den if (HelloWorldRaised != null) HelloWorldRaised(this, new EventArgs(i)); [/code]

Det sparer mig for en masse triviel kodning, men jeg undre mig bare hvorfor MS ikke har lavet denne klasse, når de nu har lavet et hav af andre generiske shortcuts. Er den nævnte fremgangsmåde forkert? Bør man i stedet sørge for at klasser der har behov for den slags kommunikation til omverdenen, har status i stedet? Altså udstiller en public property med værdien af interesse.

Umiddelbart, kan jeg se at man så kommer til at bruge energi på at caste sender objektet, hvor den beskrevne metode, er lidt renere efter min mening.

[code=csharp]//Med generisk EventArgs static void HelloWorldRaisedDelegate(object sender, EventArgs e) { DoTheThingWith(e.Value); } // Uden static void HelloWorldRaisedDelegate(object sender, EventArgs e) { MyClass raiser = sender as MyClass; if ( raiser!=null) DoTheThingWith(raise.Value); } [/code]

Er der noget jeg overser, hvis jeg nu skal have det fine armbånd på?

Tags:

Kommentarerne er lukkede

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen | Modified by Mooglegiant

About

Mit navn er Jesper Jensen, og jeg arbejder til dagligt som web-udvikler hos DGI, hvor mit speciale er klientside applikationer. Før det var jeg nogle år i robotbranchen, hvor jeg arbejdede med 3D simulering og system koordinering. Jeg elsker webudvikling, og specielt JavaScript har min interesse. Jeg har blogget om mine oplevelser med udvikling siden 2004

Calendar

<<  juli 2010  >>
mationtofr
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

View posts in large calendar

RecentComments

Comment RSS