Categorias

Entendendo os Atributos no CSharp

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:

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 usa-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!

Os atributos, como muitas coisas no C#, são orgranizados 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 nossos 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!
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!

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} 
DATA:{1}
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