Desenvolvimento - ASP. NET
Entendendo os Atributos ASP.NET/C#
Este artigo tem como objetivo explicar como funciona os Atributos e como criar um atributo personalizado.
por Francke PeixotoUm atributo é um objeto que representa os dados que você deseja associar a um elemento no seu programa. O elemento que você anexa um atributo é conhecido como alvo [target]
Um exemplo prático seria [NoIDispatch]
Este atributo é associado a uma Interface ou a uma classe.
Os Alvos dos atributos
Se você pesquisar no CLR, encontrará inúmeros atributos, Alguns deles são aplicados em assemblies,outros nas classes ou interfaces e alguns, como o [WebMethod], são aplicados nos membros das classes.
Alguns attributos que iremos encontrar estão declarados no AttributeTargets e estão detalhados na tabela abaixo:
NOME DO MEMBRO |
USO |
|
All |
Aplicado a qualquer um dos seguintes
elementos: assembly,classe,contructor,delegate,enum,event, |
|
Assembly |
Aplicado ao próprio assembly |
|
Class |
Aplicado a uma classe |
|
Constructor |
Aplicado a um dado construtor |
|
Delegate |
Aplicado a um delegado |
|
Enum |
Aplicado a uma série |
|
Event |
Aplicado a um evento |
|
Field |
Aplicado a um campo |
|
Interface |
Aplicado a uma interface |
|
Method |
Aplicado a um método |
|
Module |
Aplicado a um único módulo |
|
Parameter |
Aplicado a um parâmetro de um método |
|
Property |
Aplicado a uma propriedade (seja get ou set) |
|
ReturnValue |
Aplicado a um valor de retorno |
|
Struct |
Aplicado a uma struct |
|
O atributo mais conhecido ao programar em C# é o [Serializable]. Com ele, você garante que sua classe pode ser serializada para o disco ou para a web.
Podemos criar nossos próprios atributos e usá-los em qualquer momento. Suponha, por exemplo, que sua empresa de desenvolvimento queira monitorar os comentários de códigos de todas as classes, já pensou? Então vamos construir um com atributos! J
Os atributos, como muitas coisas no C#, são organizados em classes, Para criar um atributo personalizado, derive sua nova classe de atributo personalizada a partir de System.Attribute.
public
class ComentariosAttribute : System.Attribute
Você precisa
dizer ao complilador que tipo de elementos será usado em seu atributo. Você o especifica
usando o AtrributeUsage.
[AttributeUsage(
AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]
O atribute AttributeUsag é um atributo aplicado a atributos.
O nome do nosso atributo personalizado será ComentariosAttribute. Por convenção, acrescentamos a palavra Attribute ao nome do seu atributo.
O compilador suporta essa convenção, permitindo que você o chame com o nome menor : Comentarios
Construindo nosso Atributo [Class: ComentariosAttribute.cs]
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
[AttributeUsage( AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]
public class ComentariosAttribute : System.Attribute
{
//dados privados do membro
private string autor;
private string data;
private string comentario;
// propriedades para parâmetros conhecidos
public string Autor
{
get { return autor; }
set { autor = value; }
}
public string Data
{
get { return data; }
set { data = value; }
}
public string Comentario
{
get { return comentario; }
set { comentario = value; }
}
public ComentariosAttribute()
{
}
}
Em sua aplicação [WebForm ou WindowsForm] adicione nosso atributo.
Em nosso caso será uma página ASP.NET.
[Comentarios(Autor="ZÉ",Data="01/01/07",
Comentario="teste LINHA DE CODIGO")]
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e)
{
}
}
Pronto, já estamos com nosso Atributo no ar! J
Mas ainda não podemos ver se realmente está funcionando, para isso usaremos o System.Reflection,deixarei para explicar o que é e como funciona o reflection no próximo artigo! Aguadem! J
Iremos reescrever nossa pagina aspx como a seguir:
[Comentarios(Autor="ZÉ",Data="01/01/07",
Comentario="teste LINHA DE CODIGO")]
[Comentarios(Autor="MARIA",Data="12/11/07",
Comentario="mais um teste para o LINHA DE CODIGO")]
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
System.Reflection.MemberInfo info = typeof(_Default);
object[] atts = info.GetCustomAttributes(typeof(ComentariosAttribute), false);
foreach (object att in atts)
{
ComentariosAttribute attCA = (ComentariosAttribute)att;
Response.Write(string.Format("AUTOR:{0} <BR /> DATA:{1} <BR />COMENTARIO:{2}",
attCA.Autor,
attCA.Data,
attCA.Comentario));
}
}
No browser:
Bom, acho que agora deu para se ter uma idéia de como os Atributos funcionam, então fica para o próximo artigo System.Reflection, até a próxima!
[]’s