Code in artikelen

Aangezien de meeste artikelen code voorbeelden bevatten heb ik op blogger.com een klein probleem. blogger.com heeft namelijk geen support voor programmeertalen en heeft dus ook geen syntax highlighting. En dat is erg jammer, want dat maakt code meestal een stuk leesbaarder.

Ik ben dus momenteel op zoek naar een functie om code in kleur weer te geven. Er bestaat dus een mogelijkheid dat mijn blog verhuisd naar een andere blog website welke meer gefocussed is op programmeer talen.

zaterdag 15 september 2007

.NET Extensions: Voor- en nadelen

Nieuw in .NET 3.5 (Visual Studio 2008) zijn extensions. Simpel gezegt uitbereidingen van bestaande classes.

Laat ik beginnen met een simpel voorbeeld:
public static class Int32Extensions
{
public static Int32 DoubleValue(this Int32 value)
{
return value * 2;
}
}


Bovenstaande code verdubbeld de waarde welke de integer op dat moment heeft.

int a = 45;
int b = a.DoubleValue();
Console.WriteLine("Inhoud van b: {0}", b.ToString());

Op de console zal de de tekst 'Inhoud van b: 90' verschijnen. Maar wat is er nu precies gebeurt? Hoofdverantwoordlijke in 'this' bij het eerste argument van de functie. Zoals bekend vertegenwoordigd this een instantie van een object (class/structure). De compiler haalt daarna ee klein tovertrukje uit. De compiler veranderd namelijk regel 2 naar:

int b = Int32Extentions.DoubleValue(a);


Nu zul je je vast afvragen of extensions dan een nieuw soort overervings systeem is. Nou nee. Een extension is geen onderdeel van de class waaraan deze wordt verbonden. Daardoor kun je met een extension ook geen protected of private fields benaderen.

Waarom zul je dan extensions uberhaupt maken? Ik denk dat elke programmeur wel utility of helper classes heetf geschreven. De functies welke je normale in helper classes zou plaatsen, kunnen nu dus direct aan een object worden gekoppeld. In de meeste gevallen werd het object al als eerste argument aan de functie meegegeven en het enigste wat je hoeft te doen is het keyword 'this' ervoor zetten.

Zitten er dan ook nadelen aan extensions?Ja, zelfs een hele grote. Het gebruik van extensions kan de code erg vertroebelen. Je roept in je code een propertie of functie aan van een object welke deze eigenlijk niet kent. code zoals 45.DoubleValue(); kan daarom moeilijk te bevatten zijn.