Estender metadados usando atributos

O Common Language Runtime permite adicionar declarações descritivas parecidas com palavras, chamadas atributos, para anotar elementos de programação como tipos, campos, métodos e propriedades. Quando você compila seu código para o runtime, ele é convertido em MSIL (Microsoft Intermediate Language) e colocado dentro de um arquivo PE (executável portátil) com metadados gerados pelo compilador. Os atributos permitem colocar informações descritivas extras em metadados que podem ser extraídos usando serviços de reflexão de runtime. O compilador cria atributos quando você declara instâncias de classes especiais que derivam de System.Attribute.

O .NET usa atributos por vários motivos e para solucionar vários problemas. Os atributos descrevem como serializar dados, especificar características que são usadas para impor segurança e limitar otimizações pelo compilador JIT (Just-In-Time) para que o código permaneça fácil de depurar. Os atributos também podem registrar o nome de um arquivo ou o autor do código, ou controlar a visibilidade de controles e membros durante o desenvolvimento de formulários.

Título Descrição
Aplicando atributos Descreve como aplicar um atributo a um elemento do código.
Escrevendo atributos personalizados Descreve como criar classes de atributos personalizados.
Recuperando informações armazenadas em atributos Descreve como recuperar atributos personalizados para o código que é carregado no contexto de execução.
Metadados e componentes autodescritivos Fornece uma visão geral dos metadados e descreve como eles são implementados em um arquivo PE (executável portátil) do .NET.
Como carregar assemblies no contexto de somente reflexão Explica como recuperar informações de atributos personalizados no contexto somente reflexão.

Referência