Ce qui est bien lorsqu’on passe des certifications, c’est qu’on apprend énormément de choses. Lorsque j’ai passé la certification Microsoft 70-483, j’ai découvert CodeDOM. CodeDOM permet de générer du code automatiquement. Il nous évite ainsi que réécrire un code que nous utilisons souvent. Voyons ça en détail:
L’un des avantages de CodeDOM, c’est qu’il génère aussi bien du code C# que VB. Il est situé dans le namespace System.CodeDom. La classe principale est CodeCompileUnit. C’est elle qui contient tous les éléments que nous voulons créer (namespaces, classes, méthodes…).
Supposons que nous voulions créer un simple Hello World. On créera un CodeCompileUnit, un namespace, une classe et une méthode Main qui appellera Console.WriteLIne.
Ça donne :
CodeCompileUnit compileUnit = new CodeCompileUnit(); CodeNamespace myNamespace = new CodeNamespace("MyNamespace"); // on crée le namespace MyNameSpace myNamespace.Imports.Add(new CodeNamespaceImport("System")); // on importe le namespace System CodeTypeDeclaration myClass = new CodeTypeDeclaration("MyClass"); // création de la classe MyClass CodeEntryPointMethod start = new CodeEntryPointMethod(); // création du point d'entrée dans l'exécutable (Main) // CodeMethodInvokeExpression(objet cible, nom de la méthode, paramètres) = l'appelle la méthode Console.WriteLine("Hello World!") CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("Console"), "WriteLine", new CodePrimitiveExpression("Hello World!")); compileUnit.Namespaces.Add(myNamespace); myNamespace.Types.Add(myClass); myClass.Members.Add(start); start.Statements.Add(cs1);
Pour générer ce code dans un fichier, on utilise :
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); // utiliser VB pour générér du VB using (StreamWriter sw = new StreamWriter("HelloWorld.cs", false)) { IndentedTextWriter tw = new IndentedTextWriter(sw, " "); provider.GenerateCodeFromCompileUnit(compileUnit, tw, new CodeGeneratorOptions()); tw.Close(); }
Le fichier généré est :
namespace MyNamespace { using System; public class MyClass { public static void Main() { Console.WriteLine("Hello World!"); } } }
Ceci est juste un exemple de ce qu’on peut faire avec CodeDom. Mais on peut en faire beaucoup plus. On peut créer ce qu’on veut avec CodeDOM, des interfaces, des try catch, des constantes, des attributs…
Pour aller plus loin :
Laisser un commentaire