Magazine Internet

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

Publié le 22 mars 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 :

dynamic MyClass = new ExpandoObject();

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

MyClass.nom="Mon nom";
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 :

static void CreateDynamicClass()
{
dynamic MyClass=new ExpandoObject();
MyClass.nom="";
MyClass.prenom="";
}

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)

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

Maintenant déclarons le delegate :

delegate void PrintPersonne(string prenom,string nom);

Maintenant dans notre classe dynamique ajoutons ceci :

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

Ce qui nous donne au final :

static void CreateDynamicClass()
{
dynamic MyClass=new ExpandoObject();
MyClass.nom="test";
MyClass.prenom="testj";

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

MyClass.Print();
}

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:

MyClass.Print=new Action(()=>{
Console.WriteLine("ca fonctionne");
});

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