dinsdag, november 15, 2005

Attributes de verborgen kracht van C#

Iedereen die programmeert in C# heeft ze vast wel gezien: attributes. Stukjes metadate bij methods om bepaalde functionaliteit aan te geven. Of om bepaalde zaken mogelijk te maken bijvoorbeeld [dllImport("kernel32.dll")] [browsable(true)] en nog meer dat soort zaken.

Via NUnit kwam ik erachter dat je ook zelf attributes kunt maken en gebruiken in je code. Zo gebruikt NUnit [TestCase] en [Test] om aan te geven dat een bepaalde class testen bevat. En welke methodes dan deze testen zijn. Maar door een gebrek aan tijd heb ik nooit meer naar gekeken. Tot nu. Bij het doorlezen van de features van C# 2.0 kwam ik deze link tegen:
http://msdn2.microsoft.com/en-us/library/z0w1kczw(en-US,VS.80).aspx

Wat blijkt, eigenlijk is het heel erg simpel. Je kunt je eigen types aanmaken en plaatsen in je code. Daarna kun je via Reflectie de attributen van een class of een method uitlezen. Wat dus erg handig is voor late-binding van code. Zo kun je makkelijk een framework maken en zorgen dat het met toekomstige DLL's kan werken zonder dat je een bepaalde interface afdwingt een erg flexibel en krachtige oplossing is. Nee zo dom zijn ze nog niet bij Microsoft ;)

Overigens vind ik de generics implementatie van C# 2.0 ook erg krachtig. Doordat je af kunt dwingen dat een Object die je gebruikt van een bepaalde base class moet zijn heb je toch de beschikking over de methods van die baseclass. Nu kun je natuurlijk zeggen dat je daar geen generics voor nodig hebt. Inderdaad door een class te maken die de baseclass gebruikt dwing je dat ook af en heb je ook beschikking over de methods van de baseclass. Echter verlies je dan weer het grote voordeel van Generics: het niet meer hoeven casten van objecten naar het juiste type (en daarmee @ runtime moet controleren of de cast valid is) Met generics kan dat allemaal @ Compiletime waarmee je fouten eerder zult zien :)

Geen opmerkingen: