Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

9 septembre 2007 7 09 /09 /septembre /2007 11:45
[ 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

Partager cet article

Repost 0
Published by Romagny13 - dans C 1.0- 2.0- 3.0
commenter cet article

commentaires

Matthieu MEZIL 10/09/2007 15:05

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)