Veremos
soluções para problemas complexos, como controle de transação por requisição,
gerenciamento de erros, autorização, autenticação e cache de dados de forma
bastante simples e bem detalhada, para ajudar no aprendizado e na
extensibilidade das soluções propostas.
Antes de aventurarmos no mundo do Filtro, ou Filter, devemos conhecercomo funciona os atributos (atributes). Um atributo não é nada mais do que uma classe que possui um comportamento um pouco diferente do que estamos acostumados a utilizar.
Atributos
Um atributo funciona como uma informação a mais que damos para uma determinada classe, ou um determinado método, parâmetro, etc. Na prática o mesmo funciona como uma anotação que fazemos para os elementos, que poderão ser utilizadas em tempo de execução.
Conheça algumas características de um atributo:
· Toda classe de Atributo deve conter um atributo informando para quais elementos da linguagem o atributo pode ser usado. Essa informação é definida através do atributo AttributeUsage.
· Os atributos são classes públicas derivadas de System.Atribute e devem ter pelo menos um construtor público.
· As classes podem possuir dois tipos de parâmetros, os chamados parâmetros posicionais, aqueles que devem ser especificados toda vez que o atributo for usado e são especificados como argumentos do construtor da classe do atributo. Já os parâmetros nomeados, são parâmetros que são opcionais, se os mesmos tiverem de ser usados, o nome do parâmetro deve ser informado. Confira nas Listagens 1 e 2 como são utilizados os parâmetros posicionais e os parâmetros nomeados, respectivamente.
Os parâmetros são restritos a valores constantes dos seguintes tipos:
- Tipos Simples (bool, byte, char, short, int, long, float e double).
- String.
- System.Type.
- Enums.
- Objeto (o argumento para o parâmetro de um atributo do tipo objeto deve ser um valor constante dos tipos acima).
- Matrizes unidirecionais de qualquer um dos tipos acima referido.
Listagem 1. Parâmetros Posicionais
01 [AttributeUsage(AttributeTargets.All)]
02 public class MeuAtributoAttribute : Attribute
03 {
04 }Na Listagem 1 foi declarado um atributo chamado MeuAtributoAttribute, e está sendo utilizado um outro atributo para informar para quais elementos da linguagem podemos utilizar o atributo criado. O atributo chamado AttributeUsage é um exemplo de Parâmetro Posicional, pois o mesmo obriga que em sua utilização seja informado um parâmetro do tipo AttributeTargets.
Listagem 2. Parâmetros Nomeados
01 public class HomeController : Controller
02 {
03 [OutputCache(Duration = 10)]
04 public ActionResult Index()
05 {
06 return View();
07 }
08 }Na Listagem 2 temos um exemplo da utilização de um parâmetro nomeado. Foi declarada uma Action chamada Index, e estamos informando com a utilização do atributo OutputCache, que estamos fazendo cache das chamadas ao mesmo e que o cache terá uma duração de 10 segundos. O atributo OutputCache não obriga a utilização de nenhum parâmetro, logo, para que possamos utilizar o parâmetro Duration devemos informar seu nome.
Para entendemos melhor, um parâmetro nomeado nada mais é do que uma propriedade, ou seja, para criar um parâmetro nomeado, basta criar uma propriedade que a linguagem suporta tal utilização. Lembrando que essa característica de parâmetro nomeado não é só para atributos, mas para qualquer classe. Confira na Listagem 3.
Listagem 3. Parâmetro Nomeado
01 public class Pessoa
02 {
03 public string Nome { get; set; }
04 }
05
06 class Program
07 {
08 static void Main(string[] args)
09 {
10 var pessoa = new Pessoa { Nome = “Welson Play” }
11 }
12 }Podemos concluir com o exemplo apresentado que os parâmetros Nomeados não é uma característica dos atributos e sim da classe.
Uma conversão que é bastante utilizada pelos desenvolvedores é o sufixo Attribute para todos os atributos para que possamos diferenciá-los das classes comuns, ...
Desbloqueie toda a DevMedia
-
+2000 artigos e vídeos
-
+40 trilhas sobre Front-end, Back-end, IA e muito mais
-
+5000 exercícios práticos
-
Mentorias ao vivo individuais