C# Dynamics

La dernière mise à jour majeure du Framework .NET a ajouté un concept ajoutant une couche permettant à C# d’agir comme un langage dynamique. Un langage dynamique permet d’être interprété qu’au moment de son exécution.

Dans les langages dits dynamiques, on retrouve des noms connus comme :

Un language dynamique fait contraste avec un language fortement typé où le code est exécuté au moment de la compilation de celui-ci.

Introduction du type dynamic dans .NET 4.0

Le type dynamic a été introduit à 4.0 afin de court circuiter  la validation statique des types. Cet ajout permet de d’écrire du code qui sera résolu une fois seulement qu’il sera exécuté.

Ce nouveau mot clé peut être utilisé à plusieurs sauces. Dans certains cas, son utilisation va sembler assez transparente. Par exemple, les types dynamics sont utilisés assez régulièrement avec ASP.NET MVC avec la mécanique du ViewBag.

Un bel exemple de la différence entre les deux concepts est le code suivant :

Le code exécuté en javascript va donner le résultat « 20 » car il s’agit de la multiplication de 10 et de 2. Le même code en C# ne passera pas l’étape de la compilation car il n’est pas possible de multiplier un nombre à une chaîne.

ExpandoObject

Une instance de la classe ExpandoObject vous permet d’avoir accès à un objet totalement dynamique dans lequel vous pouvez y enregistrer l’information que vous y désirez dans des propriétés. Ces propriétés peuvent être aussi être parcourues à l’aide d’une requête.

L’ExpandoObject expose un dictionnaire ayant la signature IDictionary<String, Object>) afin que vous puissiez y retrouver vos propriétés dans une boucle par exemple. Vous pouvez le faire de cette façon :

Ce code va écrire à la console le texte suivant :

Ceci est un titre
Paradis
Pascal

DynamicObject

Considérant l’implémentation vraiment naive d’un objet servant de dictionnaire d’URL :

Ce qui est important de savoir avec ce dictionnaire c’est qu’il hérite de la classe DynamicObject. DynamicObject permet à  une classe exposant des propriétés ou des fonctionnalités comme un dictionnaire ou une liste d’exposer ses propriétés de façon dynamique.

Dans le cas de cet exemple, il n’est pas question sa savoir quel algorithme de tri dictionnaire d’URL utilise pour trier ses élément mais plus de savoir qu’il est possible d’accéder dynamiquement à ses propriétés.

Pour avoir un minimum de fonctionnalités avec votre classe héritant de DynamicObject, il vous faut réimplémenter les fonctions TryGetMember et TrySetMember. Ces deux réimplémentations vont vous permettre d’avoir les fonctionnalités  vous permettant d’accéder et de paramétrer des propriétés dynamiques.

Voici un exemple excessivement simpliste vaguement tiré de MSDN

Advertisements

2 avis sur « C# Dynamics »

  1. […] du projet GitHub permettent d’emblée de constater que Massive est conçu autour des dynamics ajoutés dans .NET […]

  2. […] la venue de la classe ExpandoObject dans .NET4, il est possible d’ajouter dynamiquement des propriétés à un objet. […]

Laisser un commentaire

Entrer les renseignements ci-dessous ou cliquer sur une icône pour ouvrir une session :

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l’aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment ce contenu :