Il y a beaucoup de cas où vous êtes déjà utiliser le typage dynamique et la liaison dynamique aujourd'hui . Tu ne t'en rends pas compte, parce que tout est caché derrière des ficelles. System.Object
car jusqu'à C# 4, le support nécessaire n'existait pas.
Un exemple est l'interopérabilité COM : COM est en fait un système d'objets semi-dynamiques. Lorsque vous faites de l'interopérabilité COM, beaucoup de méthodes retournent en fait un objet dynamique, mais parce que C# ne les supportait pas, elles étaient retournées en tant que System.Object
et vous deviez les lancer vous-même, en attrapant peut-être des exceptions en chemin.
Un autre exemple est l'interaction avec des données dynamiquement typées (ou même non typées), telles que JSON, CSV, HTML, XML sans schéma, services web sans schéma, bases de données sans schéma (qui sont, après tout, la nouvelle mode). Aujourd'hui, on utilise des chaînes de caractères pour ces éléments. Une API XML ressemblerait à
var doc = new XmlDocument("/path/to/file.xml");
var baz = doc.GetElement("foo").GetElement("qux");
et ainsi de suite. Mais qu'en est-il :
dynamic doc = new XmlDocument("/path/to/file.xml");
var baz = doc.foo.qux;
N'est-ce pas joli ?
Un troisième exemple est la réflexion. Aujourd'hui, l'invocation d'une méthode via la réflexion se fait en passant une chaîne de caractères à la commande InvokeMember
(ou quel que soit le nom de cette chose). Ne serait-il pas plus agréable de, vous savez, juste invoquer cette foutue chose ?
Ensuite, il y a génération de données dynamiques (en gros, le contraire du deuxième exemple). Voici un exemple de génération d'un XML dynamique :
dynamic doc = new XmlBuilder();
doc.articles(id=42, type="List", () => {
article(() => {
number(42);
title("blahblubb");});});
Ce n'est pas aussi beau que l'équivalent de Ruby, mais c'est ce que j'ai pu trouver de mieux dans un délai aussi court :-)
Et enfin, mais certainement pas le moindre, l'intégration avec un langage dynamiquement typé. Qu'il s'agisse de JavaScript dans une application Silverlight, d'un moteur de règles personnalisé intégré à votre application commerciale ou d'une instance DLR que vous hébergez dans votre programme de CAO/IDE/éditeur de texte.