Magazine Internet

Créer une classe de manière dynamique en c#4

Publié le 17 février 2010 par Davidyannick

Une autre nouveauté de C#4 est le mot clé dynamic. Beaucoup d’exemple sont déjà disponible, cet exemple permet de créer une classe de manière dynamique.

La première chose à faire est de créé un objet ExpandoObject .  Pour ce faire nous allons créer une classe MyClass dynamique de la sorte :

   1:  dynamic MyClass = new ExpandoObject();

Maintenant nous pouvons ajouter des propriétés et des méthodes, ajoutons deux propriétés : prenom et nom :

   1:  MyClass.nom="Mon nom";
   2:  MyClass.prenom="Mon prenom";

Inutile de chercher l’IntelliSense dans ce cas car la classe est générée de manière dynamique.

Nous pouvons accéder à ces propriétés comme on le fait avec des classes normales mais sans l’IntelliSense je me répète :)

Imaginons maintenant une méthode qui va créé cette classe :

   1:  static void CreateDynamicClass()
   2:  {
   3:       dynamic MyClass=new ExpandoObject();
   4:       MyClass.nom="";
   5:       MyClass.prenom="";
   6:  }

Ajoutons une méthode à cette classe, une méthode qui permet d’afficher les nom et prenom, cette fois nous devons faire appel aux delegates donc créons une méthode PrintPersonne(string prenom,string nom)

   1:  static void PrintPersonne(string prenom,string nom)
   2:  {
   3:       Console.WriteLine("{0} {1}",prenom,nom);
   4:  }

Maintenant déclarons le delegate :

   1:  delegate void PrintPersonne(string prenom,string nom);

Maintenant dans notre classe dynamique ajoutons ceci :

   1:  MyClass.Print=new Action(()=>PrintPersonne(MyClass.prenom,MyClass.nom));

Ce qui nous donne au final :

   1:  static void CreateDynamicClass()
   2:  {
   3:         dynamic MyClass=new ExpandoObject();
   4:         MyClass.nom="test";
   5:         MyClass.prenom="testj";
   6:   
   7:         MyClass.Print = new Action(() => PrintPersonne(MyClass.prenom, MyClass.nom));
   8:   
   9:         MyClass.Print();
  10:   }

MyClass.Print() permet de tester la méthode, certes cet exposé n’a pas pour but de plonger dans les entrailles de dynamic et de la DLR mais j’espère qu’il servira à certain(s)(es) pour démystifier la chose :)

PS : il aurait été aussi possible d’utiliser des méthodes anonymes etc.

ex:

   1:  MyClass.Print=new Action(()=>{
   2:       Console.WriteLine("ca fonctionne");
   3:  }
   4:  );
J’espère que ca vous aidera à vous mettre le pied à l’étrier ;)

Retour à La Une de Logo Paperblog

A propos de l’auteur


Davidyannick 18 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Magazine