woensdag 7 juli 2010

nog meer dynamics

4.0 is overgoten met dynamische oplossingen, is dat het einde van het gebruik van het dure reflection?

In de vorige post schreef ik over het dynamic keyword en het gebruik van optional parameters om late binding te kunnen werken met bijvoorbeeld office.

In sommige applicaties gebruiken we reflection om runtime de objecten te kunnen uitlezen en gebruiken. In 4.0 is het gebruik van DLR aanwezig en zijn er classes gemaakt in de System.Dynamic namespace waarmee je runtime eigenschappen en methoden kunt toevoegen.
Je hebt twee classes die je daarvoor kunt gebruiken; ExpandoObject en DynamicObject.
Het ExpandoObject is sealed en kun je gebruiken door daar je eigen properties aan te maken, bijvoorbeeld

dynamic persoon = new ExpandoObject();
persoon.Achternaam = "Vos";

het DynamicObject is niet sealed en kun je gebruiken om je eigen dynamische oplossing te schrijven. Je kunt hier de methoden TrySetMember en TryGetMember
overriden zodat je je eigen werking kunt beinvloeden.

meer hierover kun je terugvinden op:
http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx

http://blogs.msdn.com/b/csharpfaq/archive/2009/10/01/dynamic-in-c-4-0-introducing-the-expandoobject.aspx
http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx