Pour celles et ceux qui n'ont pas suivi la PDC 2008, une des nouveautés montrées par la team C# dans C#4 concerne la possibilité d'exécuter des opérations, dont les détails ne seront connus qu'à l'exécution, en utilisant le mécanisme de délégation soutenu par le DLR (Dynamic Language Runtime).

Ca paraît complexe dit comme cela :) (la phrase n'est pas de Marcel Proust) et bien en fait ça l'est:)

Un petit exemple s'impose :

dynamic d = GetDynamicObject();<br/>
d.MethodeResolueAlExecution();
//Marcel Proust Powered :)

Comme vous pouvez voir, la variable locale "d" est du type dynamic, qui est un type compris par le compilateur. Ce code compile (donc on release;) )et il aurait compilé quel que soit le nom de la méthode. Le type "dynamic" est un type très spécial (^^).

Pour le compilateur, la différence avec une variable normale est qu'il n'est pas possible d'émettre un IL (Intermediate Language ) appelant la méthode MethodeResolueAlExecution car il ne connait pas le type "d". Il émet donc un "emplacement d'appel dynamique" pour permettre de résoudre l'appel à l'exécution (via le DLR).

Mais à quoi cela peut-il servir ????

Cela va permettre d'utiliser C#, pour invoquer des méthodes écrites avec des langages dynamiques tels Python/Ruby où, chose plus intéressante, sur n'importe quel objet COM IDispatch, sans même un chargement interop (ou wrapper).

Un exemple issu de codeplex mettant en évidence (c'est pas si évident que cela en fait :) ) le DLR :

J'ai une méthode écrite en python (satan, sors de ce corps !!!)

def welcome(name): return "Hello '" + name + "' from IronPython"

La suite, un main C# qui va charger puis appeler la méthode :

static void Main(string[] args) {
Console.WriteLine("Loading helloworld.py...");
ScriptRuntime py = Python.CreateRuntime();
dynamic helloworld = py.UseFile("helloworld.py");
Console.WriteLine("helloworld.py loaded!");
for (int i = 0; i < 1000; i++) {
Console.WriteLine(helloworld.welcome("Employee #{0}"), i)
}
Console.WriteLine(); }

Pour la route, un webcast d'Anders Hejlsberg explicant la signification de l'introduction des types dynamiques dans C#4.

Je vous invite à regarder Deep Dive: Dynamic Languages in Microsoft .NET c'est extrêmement intéressant !

Alexandre Equoy