Atributos (diretrizes de design do .NET Framework)
Nota
Este conteúdo é reimpresso com permissão da Pearson Education, Inc., a partir de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Essa edição foi publicada em 2008 e, desde então, o livro foi totalmente revisto na terceira edição. Algumas das informações nesta página podem estar desatualizadas.
System.Attribute é uma classe base usada para definir atributos personalizados.
Atributos são anotações que podem ser adicionadas a elementos de programação, como assemblies, tipos, membros e parâmetros. Eles são armazenados nos metadados do assembly e podem ser acessados em tempo de execução usando as APIs de reflexão. Por exemplo, o Framework define o ObsoleteAttribute, que pode ser aplicado a um tipo ou membro para indicar que o tipo ou membro foi preterido.
Os atributos podem ter uma ou mais propriedades que carregam dados adicionais relacionados ao atributo. Por exemplo, ObsoleteAttribute
pode trazer informações adicionais sobre a versão na qual um tipo ou um membro foi preterido e a descrição das novas APIs que substituem a API obsoleta.
Algumas propriedades de um atributo devem ser especificadas quando o atributo é aplicado. Estes são referidos como as propriedades necessárias ou argumentos necessários, porque eles são representados como parâmetros de construtor posicional. Por exemplo, a ConditionString propriedade do ConditionalAttribute é uma propriedade necessária.
As propriedades que não precisam necessariamente ser especificadas quando o atributo é aplicado são chamadas de propriedades opcionais (ou argumentos opcionais). Eles são representados por propriedades configuráveis. Os compiladores fornecem sintaxe especial para definir essas propriedades quando um atributo é aplicado. Por exemplo, a AttributeUsageAttribute.Inherited propriedade representa um argumento opcional.
✔️ DO nomeie classes de atributos personalizados com o sufixo "Atributo".
✔️ DO aplique o AttributeUsageAttribute aos atributos personalizados.
✔️ DO fornece propriedades configuráveis para argumentos opcionais.
✔️ DO fornece propriedades get-only para os argumentos necessários.
✔️ DO fornece parâmetros de construtor para inicializar propriedades correspondentes aos argumentos necessários. Cada parâmetro deve ter o mesmo nome (embora com caixa diferente) como a propriedade correspondente.
❌ EVITE fornecer parâmetros do construtor para inicializar propriedades correspondentes aos argumentos opcionais.
Em outras palavras, não tem propriedades que podem ser definidas com um construtor e um setter. Esta diretriz deixa muito explícito quais argumentos são opcionais e quais são necessários, e evita ter duas maneiras de fazer a mesma coisa.
❌ EVITE sobrecarregar construtores de atributos personalizados.
Ter apenas um construtor comunica claramente ao usuário quais argumentos são necessários e quais são opcionais.
✔️ DO sela classes de atributos personalizados, se possível. Isso torna a pesquisa do atributo mais rápida.
© Partes 2005, 2009 Microsoft Corporation. Todos os direitos reservados.
Reimpresso com permissão da Pearson Education, Inc., de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 por Addison-Wesley Professional como parte da Microsoft Windows Development Series.