Extension methods bestaan al een tijdje in C#. Microsoft zet ze intensief in, in hun verschillende platformen en in LINQ. Ik moet toegeven dat ik een beetje een haat-liefde verhouding heb met deze manier van werken. Aan de ene kant geeft het een heel uitbreidbare manier van werken, aan de andere kant zijn ze echt een hel als je intensief gebruik maakt van automatische testen. En persoonlijk vind ik dan de testbaarheid van mijn applicatie belangrijker dan eenvoudige uitbreidbaarheid door extensions. Maar die afweging mag elk team voor zichzelf maken.
Property extensions
Naast methodes kunnen voortaan ook properties, indexers en static members met een extension worden toegevoegd. Hoe ziet dat er dan bijvoorbeeld uit:

Stel bijvoorbeeld dat je een User object hebt vanuit een externe library waarbij je op een uniforme manier de volledige naam wilt weergeven (het voorbeeld is alleen om je een idee te geven, want ik weet dat dit een behoorlijk onvolledig voorbeeld is). Een property extension voegt een extra property aan de user toe die in code gebruikt kan worden:
Je kunt nu vanuit code gebruik maken van de property Fullname.
Static extensions
Op soortgelijke manier kun je statische extensions toevoegen aan een object:
Deze methode zou je dan als volgt kunnen gebruiken in je code:
Indexer extensions
Ik heb mijn hoofd hierover gebroken, maar kon met de beste wil van de wereld geen use-case bedenken om een extension op een indexer te zetten. Maar als iemand er een heeft dan hoor ik het graag in de commentaren op dit artikel 😊.
Om rekening mee te houden
Naast dat het intensief gebruik van extensions je code lastiger te testen maakt, kun je ook geen bestaande onderdelen overschrijven met een extension (gelukkig maar).
Samengevat
De nieuwe mogelijkheden voor extensions kunnen voordelen bieden, vooral als je bestaande libraries wilt uitbreiden zonder allerlei facades te moeten maken. Met heel weinig code kun je objecten uitbreiden. Tegelijk is enige terughoudendheid geboden, want het is nu af en toe al een issue om code met extension methods te testen. Dat wordt er niet beter op als je intensief van deze nieuwe functionaliteit gebruik maakt.

