Overblog Tous les blogs Top blogs Économie, Finance & Droit Tous les blogs Économie, Finance & Droit
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions

Publicité

System.CodeDom

[ System.CodeDom ] – exemple de génération de code
Ajouter les deux imports :
using System.CodeDom;
using System.CodeDom.Compiler;
Le but de cet exemple est de présenter avant tout quelques utilisations
 I préparation du code à générer
// 1 Namespace
            CodeNamespace _namespace = new CodeNamespace("MyNamespace");
            // ajout d'imports
            _namespace.Imports.Add(new CodeNamespaceImport("System.Text"));
            // 2 création d'une classe
            CodeTypeDeclaration _class = new CodeTypeDeclaration("Contact");
            _class.Attributes = MemberAttributes.Public;
            _class.Comments.Add(new CodeCommentStatement("mon commentaire 1"));
 
            // a - ajout de fields à la classe
            _class.Members.Add(new CodeMemberField(new CodeTypeReference(typeof(string)), "_contactName"));
           // b - ajout de properties à la classe
            CodeMemberProperty property1=new CodeMemberProperty();
            property1.Attributes = MemberAttributes.Public | MemberAttributes.Final;
            property1.Name = "ContactName";
            property1.Type = new CodeTypeReference(typeof(string));
            property1.HasGet = true;
            property1.HasSet = true;
            // get
            property1.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"_contactName")));
            // set
            property1.SetStatements.Add(new CodeAssignStatement(
                new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"_contactName"),
                new CodePropertySetValueReferenceExpression()));
 
            _class.Members.Add(property1);
            // c - ajout de methodes à la classe
            CodeMemberMethod method1 = new CodeMemberMethod();
            method1.Attributes = MemberAttributes.Public | MemberAttributes.Static;
            method1.ReturnType = new CodeTypeReference(typeof(string));
            method1.Name = "GetContactName";
            method1.Statements.Add(new CodeSnippetStatement("this._contactName="Romagny";"));
            method1.Statements.Add(new CodeMethodReturnStatement(new CodeArgumentReferenceExpression("this._contactName")));
 
II génération du code
 
            StringBuilder stringBuilder = new StringBuilder();
            StringWriter stringWriter = new StringWriter(stringBuilder); 
            CSharpCodeProvider provider = new CSharpCodeProvider();
            //
            CodeGeneratorOptions options = new CodeGeneratorOptions();
            options.BracingStyle = "C";
            options.IndentString = " ";
            provider.GenerateCodeFromNamespace(_namespace,stringWriter, options);
 
            richTextBox1.Text = stringBuilder.ToString();
 

ici je me contente d'afficher le code dans une richtextbox
voici la sortie affichée
namespace MyNamespace
{
 using System.Text;
 
 
 // mon commentaire 1
 public class Contact
 {
   
    private string _contactName;
   
    public string ContactName
    {
      get
      {
        return this._contactName;
      }
      set
      {
        this._contactName = value;
      }
    }
   
    public static string GetContactName()
    {
                this._contactName="Romagny";
                 return this._contactName;
    }
 }
}


http://msdn2.microsoft.com/fr-fr/library/system.codedom(VS.80).aspx
Publicité
Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
M
J'utilise CodeDom dans mon propre compilateur (voir http://blog.developpez.com/index.php?blog=121&title=mmcs31&more=1&c=1&tb=1&pb=1 et http://blog.developpez.com/index.php?blog=121&title=poc_de_mmcs31_alpha_1&more=1&c=1&tb=1&pb=1)
Répondre