Domine Dicionários em C#: Guia Prático de Acesso Rápido
Guia Prático: Atributos Customizados para Auditoria
Imagine poder adicionar📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. rótulos especiais em classes ou métodos que guiem como o seu programa deve se comportar, sem precisar criar regras soltas espalhadas pelo código. É exatamente isso que os atributos customizados fazem: eles adicionam metadados que podem ser lidos e usados para decisões importantes na execução ou em ferramentas de build e análise. Aqui, vamos explorar como criar esses atributos, por que eles são tão úteis e como aplicá-los de maneira prática e organizada.
Tabela de Conteúdo🔗
- O que são atributos?
- Por que usar atributos customizados?
- Como criar
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. um atributo customizado
- Exemplo prático
📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.: Marcando classes para auditoria
- Lendo Atributos com Reflection
🔍 Reflection: Inspecione Tipos em Tempo de Execução!Descubra como a Reflection em C# revoluciona a inspeção em tempo real. Aprenda a acessar e invocar membros dinamicamente com segurança.
- Casos de Uso
🔏 Criptografia Assimétrica: Domine RSA e Troca de Chaves!Descubra como a criptografia assimétrica protege a troca de chaves e garante segurança em sistemas digitais usando RSA, C# e práticas recomendadas. Avançados
- Boas práticas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. e cuidados
- Desafio Prático
O que são atributos?🔗
Atributos (do inglês attributes) são metadados que você cola em cima de tipos, métodos, propriedades⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. ou outros elementos do seu código para descrever algo especial sobre eles. Esses metadados ficam “acusando presença” na própria definição do código, permitindo que outras partes do sistema (ou até ferramentas externas) entendam como tratar ou interpretar o elemento marcado.
Alguns exemplos de atributos comuns que você já deve ter visto são aqueles usados em frameworks de teste ([Test] ou [Fact]) ou para serialização JSON⚡ System.Text.Json 2.0: Serialização com Source Generators!Descubra como os Source Generators do .NET 8 revolucionam a serialização JSON, proporcionando performance 5x mais rápida e menor uso de memória.. Quando falamos de “customizados”, significa que você mesmo pode criar atributos para suprir necessidades específicas do seu projeto.
Por que usar atributos customizados?🔗
1. Centralização das regras: Em vez de ter trechos de código espalhados que determinam como algo deve se comportar, você deixa isso mais explícito no próprio ponto que deseja anotar.
2. Organização e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. clareza: Anotar classes e métodos
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. com atributos pode tornar o código mais legível, pois fica claro o que cada parte representa e como deve ser tratada.
3. Facilidade de expansão: Novas funcionalidades podem ser adicionadas sem ter que mexer em vários lugares no código. Basta criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e aplicar um novo atributo onde for necessário.
Como criar um atributo customizado🔗
Criar um atributo customizado é bem simples. É basicamente criar uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. que herda do tipo base Attribute e, em seguida, aplicar essa classe
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. onde for preciso.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class AuditoriaAttribute : Attribute
{
public string Responsavel { get; }
public DateTime DataCriacao { get; }
public AuditoriaAttribute(string responsavel)
{
Responsavel = responsavel;
DataCriacao = DateTime.Now;
}
}
Entendendo o código acima
- [AttributeUsage(...)]: Diz onde esse atributo pode ser aplicado (por exemplo, em classes, métodos, propriedades
⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção., etc.).
- public class AuditoriaAttribute : Attribute: Aqui você define que seu atributo se chama AuditoriaAttribute e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. herda de Attribute.
- Propriedades
⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. internas:
Responsavel
e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.
DataCriacao
guardam informações que podem ser úteis em cenários📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. de auditoria.
- Construtor
🔑 Construtores: Inicialize Objetos como um Arquiteto de OOP!Descubra como os construtores em C# estruturam objetos, garantindo inicialização segura e promovendo boas práticas de desenvolvimento orientado a objetos.: Ao aplicar o atributo, você pode passar parâmetros
🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código. que serão armazenados ou processados.
Exemplo prático: Marcando classes para auditoria🔗
Vamos supor que temos classes🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. de negócio que precisam ter suas ações rastreadas por um sistema de auditoria. Assim, podemos usar nosso AuditoriaAttribute:
[Auditoria("Carlos")]
public class ServicoPagamento
{
public void Processar()
{
// Lógica de processamento
}
}
[Auditoria("Mariana")]
public class ServicoOrdem
{
public void GerarOrdem()
{
// Lógica para gerar ordem
}
}
- Ficamos sabendo quem é o responsável pela criação ou manutenção principal.
- Podemos criar mecanismos internos para registrar eventos de auditoria com base em quem é responsável pela classe
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara..
Esse tipo de anotação pode guiar ferramentas e processos no seu software, por exemplo, gerando logs específicos sempre que um método🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. de uma classe anotada for chamado.
Lendo Atributos com Reflection🔗
Para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! extrair os metadados de atributos aplicados, podemos usar Reflection
🔍 Reflection: Inspecione Tipos em Tempo de Execução!Descubra como a Reflection em C# revoluciona a inspeção em tempo real. Aprenda a acessar e invocar membros dinamicamente com segurança.:
var atributos = typeof(ServicoPagamento)
.GetCustomAttributes(typeof(AuditoriaAttribute), false);
foreach (AuditoriaAttribute attr in atributos)
{
Console.WriteLine($"Responsável: {attr.Responsavel}, Data: {attr.DataCriacao}");
}
Casos de Uso Avançados🔗
Cenário | Implementação |
---|---|
Serialização | [JsonPropertyName("nome_alternativo")] |
ORM | [Table("Clientes")] |
Logging | [LogNivel(Nivel.Critico)] |
Testes | [TestMethod] |
Exemplo de validação customizada:
public class EmailValidoAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
return new EmailAddressAttribute().IsValid(value);
}
}
Boas práticas e cuidados🔗
1. Escolha nomes significativos: Um atributo deve ter um nome que explique a sua intenção.
2. Parâmetros🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código. claros: Se o atributo precisa de parâmetros
🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código., mantenha-os simples e diretos.
3. Evite sobrecarregar com lógica: Atributos servem para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! marcar e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. carregar informações. A lógica principal deve ficar em outro lugar.
4. Use somente onde🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. for necessário: Anotar todo o seu código com atributos que não trazem valor
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. pode gerar confusão e poluir a base de código.
Desafio Prático🔗
Crie um sistema de logging📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável. com níveis de prioridade:
1. Crie um atributo [LogPrioridade(Nivel)]
que possa ser aplicado a métodos🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência.
2. Use Reflection🔍 Reflection: Inspecione Tipos em Tempo de Execução!Descubra como a Reflection em C# revoluciona a inspeção em tempo real. Aprenda a acessar e invocar membros dinamicamente com segurança. para identificar métodos com o atributo
3. Simule um logger que registre apenas métodos🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. com prioridade >= Nivel.Warning
[LogPrioridade(Nivel.Critico)]
public void ProcessarPagamento() { ... }
Dica:
public enum Nivel { Info, Warning, Error, Critico }
Próximos Passos🔗
Agora que você domina atributos customizados, experimente:
- Criar atributos para documentação automática
📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente. (ex: gerar Swagger)
- Desenvolver validadores de domínio específicos
- Integrar com sistemas de auditoria
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- Awesome .NET: github.com/quozd/awesome-dotnet
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/