¡Bienvenid@ a La bloguera.net! Iniciar sesión | ÚNETE a la web | Ayuda
Generación Dinámica de Código II

En un post anterior comenté brevemente como se trabaja con la generación de código utilizando las librerías System.CodeDom y System.CodeDom.Compiler. En este post extenderemos un poco más los ejemplos visto y veremos cómo podemos construir otro tipo de estructuras utilizadas comúnmente en nuestros programas.

 

Declarar un atributo:

 

La declaración de atributos consta de tres parte principales, la visibilidad, el tipo de atributo y el nombre.

 

 

//Declaramos el atributo con el nombre y tipo

CodeMemberField atributo = new CodeMemberField(("String","MiAtrib");

 

//Indicamos la visibilidad

atributo.Attributes = MemberAttributes.Private;

 

 

           

//Comentarios para documentación

atributo.Comments.Add(new CodeCommentStatement("<summary>", true));

atributo.Comments.Add(new CodeCommentStatement("comentario", true));

atributo.Comments.Add(new CodeCommentStatement("</summary>", true));

 

           

La salida de este ejemplo será un fragmento de código como el siguiente:

               

      /// <summary>

      /// comentario

      /// </summary>

      public string MiAtrib;

 

 

Crear una propiedad:

 

 

Una propiedad como ya sabemos está compuesta de su visibilidad, el tipo, el nombre y opcionalmente un set y get asociados a un atributo.

 

 

CodeMemberProperty propiedad = new CodeMemberProperty();

// Indicamos el nombre de la propiedad.

propiedad.Name = "MiPropiedad";

// Indicamos el tipo de la propiedad.

propiedad.Type = new CodeTypeReference("String");

// Establecemos la visibilidad de la propiedad.

propiedad.Attributes = MemberAttributes.Public;

 

 

//Comentarios para documentación

propiedad.Comments.Add(new CodeCommentStatement("<summary>", true));

propiedad.Comments.Add(new CodeCommentStatement("comentario", true));

propiedad.Comments.Add(new CodeCommentStatement("</summary>", true));

 

 

// Creamos el return del get

CodeMethodReturnStatement cmReturn = new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), nombreAtributoAsociado));

 

//Añadimos el get

propiedad.GetStatements.Add(cmReturn);

 

// Creamos el contenido del set

CodeAssignStatement caSet = new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), nombreAtributoAsociado), new CodePropertySetValueReferenceExpression());

 

// Añadimos el set

propiedad.SetStatements.Add(caSet);

           

Nota: nombreAtributoAsociado sería el atributo que está asociado a la propiedad.

La salida de este ejemplo será un fragmento de código como el siguiente:

 

 

                                     /// <summary>

      /// comentario.

      /// </summary>

      public string Mipropiedad

      {

          get { return MiAtrib; }

          set { MiAtrib = value; }

      }

 

 

 

 

Crear una enumeración:

 

Para declarar una enumeración debemos especificar la visibilidad, tipo, nombre y los elementos de la misma.

 

//Declaramos el nodo para la enumeracion.

CodeTypeDeclaration enumerac = new CodeTypeDeclaration("MiEnum");

 

//Debemos indicar que el CodeTypeDeclaration va a ser tipo enumeración.

enumerac.IsEnum = true;

 

//Indicamos la visibilidad.

enumerac.Attributes = MemberAttributes.Public;

 

//Comentarios.

enumerac.Comments.Add(new CodeCommentStatement("<summary>", true));

enumerac.Comments.Add(new CodeCommentStatement("comentario", true));

enumerac.Comments.Add(new CodeCommentStatement("</summary>", true));

 

//Representa un campo.

CodeMemberField miembro;

 

//Vamos creando los valores de la enumeracion y los vamos añadiendo a la misma.

List<string> cadenasAtributos =new List<string>("elem1","elem2");

for (int i = 0; i < cadenasAtributos.Count; i++)

{

 

     miembro = new CodeMemberField();

     //Le damos un nombre al campo.

     miembro.Name = cadenasAtributos[ i ];

     //Añadimos el campo a la enumeración.

     enumerac.Members.Add(miembro);

}

 

 

 

La salida de este ejemplo será un fragmento de código como el siguiente:

       

 

/// <summary>

/// comentario.

/// </summary>

public enum MiEnum {

           

       elem1,

           

       elem2,

}

Posted: jueves, 12 de julio de 2007 13:11 por Pedro

Comentarios

Aún no ha hecho nadie ningún comentario. Escribe alguno y sé el primero :P

No se permiten comentarios de usuarios anónimos