Ir al contenido


Foto

Introducción a los Atributos en Delphi Prism


  • Por favor identifícate para responder
1 respuesta en este tema

#1 markdelphi

markdelphi

    Advanced Member

  • Moderadores
  • PipPipPip
  • 97 mensajes
  • LocationMéxico

Escrito 28 febrero 2009 - 10:52

El atributo es un concepto nuevo en la programación, y se utiliza casi en cualquier parte del .NET Framework, así­ que he decidido introducirlo en este capí­tulo. La idea es que (independientemente del lenguaje que usemos) algunos aspectos de una aplicación no pueden expresarse con simples instrucciones ejecutables. Por ejemplo, todos los lenguajes anteriores a .NET ofrecí­an su propia forma de definir propiedades en el nivel de proyecto, como el nombre de la aplicación y la versión, y en lenguajes como C++ utilizan programas para modificar el comportamiento del compilador. Antes del .NET Framework, no habí­a ninguna consistencia en la manera de asociar esta información con el código; cada lenguaje tení­a su propia forma, y diferentes tipos de información con frecuencia requerí­an técnicas distintas, aun dentro del mismo lenguaje. Lo peor es que no podí­amos extender estas técnicas para definir tipos de información para nuestros propósitos.

Los atributos de .NET resuelven todos estos problemas y ofrecen una forma dinámica y estándar para asociar información adicional con piezas especificas de código. En la práctica, los atributos nos permiten extender los metadatos asociados con un ensamblado, una clase o un método. Lenguajes diferentes utilizan una sintaxis ligeramente distinta para los atributos, pero hay un mecanismo unificado, denominado reflexión, para recuperar todos los atributos asociados con un fragmento de código. Mejor aún, los atributos en sí­ son un tipo de datos y es posible definir atributos personalizados con la simple creación de una clase nueva que se herede de System.Attribute.

Podemos considerar a los atributos como anotaciones que intercalamos en nuestro código. Es posible aplicar atributos a casi cualquier entidad de programación que soporta Delphi Prism, incluidas las clases, registros, propiedades, métodos y enumeraciones. No todos los atributos pueden aplicarse a todas las entidades, pero la sintaxis general que se emplea para insertarlos es consistente en cada lenguaje de .NET. Por ejemplo, todos los atributos de Delphi Prism requieren una sintaxis idéntica, que es diferente de la sintaxis de C# o Visual Basic .NET.

Bajo Delphi Prism un atributo se encierra ente corchetes ([ ])  y se inserta  antes del elemento al que se hace referencia. Por ejemplo, podemos aplicar System.ComponentMo- del.DescriptionAttribute a una clase como sigue:



delphi
  1. type
  2.   [System.ComponentModel.Description('Persona')]
  3.   TPersona = public class
  4.   private
  5.   public
  6. end;



Existen muchas maneras de simplificar la sintaxis de un atributo. En primer lugar, los atributos son clases del .NET; por tanto, podemos escribir un nombre más corto si agregamos el nombre de espacio a la sección uses. En segundo lugar, las directrices de .NET dictan que los nombres de todas las clases de atributo terminen con la palabra Attribute, pero casi todos los compiladores de .NET entre ellos Delphi Prism, C# y VB.NET, nos permiten quitar el sufijo Attribute del nombre. Después de seguir estas reglas nuestro ejemplo inicial se convierte en:



delphi
  1. type
  2.   [Description('Persona')]
  3.   TPersona = public class
  4.   private
  5. end;



Los atributos son clases del .NET muy peculiares. Soportan propiedades y métodos, pero no pueden hacer referencia a ellas en el código como lo harí­amos con clases comunes. En realidad, sólo podemos asignar una o más propiedades cuando creamos el atributo, y esas propiedades no cambian durante la vida de la aplicación.

En realidad, el fragmento de código anterior es una llamada al método constructor del atributo Description, que toma como argumento el valor de la propiedad Description. Una vez que se ha establecido este calor, no se modifica ni utiliza (por lo menos no lo hace la aplicación que usa el atributo). Sin embargo, una aplicación externa, como el compilador o el .NET Framework, puede utilizar las propiedades de atributos especí­ficos, con el uso de la reflexión. Debido a su naturaleza, es muy raro que las clases adicionales no necesarias tengan otro método que el constructor.

Un atributo del método constructor toma o no argumentos. También puede tomar argumentos opcionales con nombre, que permiten establecer propiedades adicionales no necesarias en el constructor y se pasan en la forma nombre:= valor.

Por ejemplo, WebMethodAttribute requiere argumentos con nombre opcionales porque expone más propiedades de la que puede establecer con su constructor:



delphi
  1. [WebMethod(true,Description:='Operacion de suma',CacheDuration:=60)]
  2. method Suma(n1 : Double;n2 : Double) : Double;



Casi todos los atributos están estrechamente relacionados con caracterí­sticas especí­ficas del motor en tiempo de ejecución del .NET. Por ello, tiene, más sentido analizar atributos especí­ficos sólo en el capí­tulo donde explico esas caracterí­sticas. 

Podemos aplicar varios atributos a la misma entidad de código separándolos con una coma:



delphi
  1. [Serializable(), Description('Persona')]
  2. TPersona = public class
  3.   private
  4.   public
  5.   [WebMethod(true,Description:='Operacion de suma',CacheDuration:=60)]
  6.   method Suma(n1 : Double;n2 : Double) : Double;
  7. end;



Profundizaremos mas sobre atributos en el capitulo “Atributos Personalizados”



  • 0

#2 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 01 marzo 2009 - 02:27

Excelente info. Muchas gracias.
  • 0




IP.Board spam blocked by CleanTalk.