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 Peixoto



Um 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,
field,interface,method,module,parameter,property,
return value ou struct

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

Baixe o código de exemplo.

Francke Peixoto

Francke Peixoto