Atributos (diretrizes de design do .NET Framework)

Observação

Este conteúdo é reimpresso com permissão da Pearson Education, Inc. 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 revisado na terceira edição. Algumas das informações nesta página podem estar desatualizadas.

System.Attribute é uma classe base usada para definir atributos personalizados.

Os 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, 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 poderia levar informações adicionais sobre a versão na qual um tipo ou um membro foi preterido e a descrição das novas APIs substituindo a API obsoleta.

Algumas propriedades de um atributo devem ser especificadas quando o atributo é aplicado. Elas são chamadas de propriedades obrigatórias ou argumentos obrigatórios, pois são representados como parâmetros de construtor posicional. Por exemplo, a propriedade ConditionString de ConditionalAttribute é uma propriedade obrigatória.

Propriedades que não precisam necessariamente ser especificadas quando o atributo é aplicado são chamadas de propriedades opcionais (ou argumentos opcionais). Elas são representadas por propriedades configuráveis. Os compiladores fornecem sintaxe especial para definir essas propriedades quando um atributo é aplicado. Por exemplo, a propriedade AttributeUsageAttribute.Inherited representa um argumento opcional.

✔️ ATRIBUA um nome de classes de atributo personalizadas com o sufixo "Attribute".

✔️ APLIQUE AttributeUsageAttribute a atributos personalizados.

✔️ FORNEÇA propriedades configuráveis para argumentos opcionais.

✔️ FORNEÇA propriedades somente get para argumentos necessários.

✔️ FORNÇEÇA parâmetros de construtor para inicializar propriedades correspondentes aos argumentos necessários. Cada parâmetro deve ter o mesmo nome (embora com maiúsculas e minúsculas diferentes) que a propriedade correspondente.

❌ EVITE fornecer parâmetros de construtor para inicializar propriedades correspondentes aos argumentos opcionais.

Em outras palavras, não tenha propriedades que possam ser definidas com um construtor e um setter. Essa diretriz torna muito explícito quais argumentos são opcionais e quais são obrigatórios e evita ter duas maneiras de fazer a mesma coisa.

❌ EVITE sobrecarregar construtores de atributo personalizados.

Ter apenas um construtor comunica claramente ao usuário quais argumentos são obrigatórios e quais são opcionais.

✔️ SELE classes de atributo personalizado, se possível. Isso torna a pesquisa do atributo mais rápida.

Portions © 2005, 2009 Microsoft Corporation. Todos os direitos reservados.

Reimpresso com permissão da Pearson Education, Inc. das Diretrizes de Design do Framework: convenções, linguagens e padrões para bibliotecas do .NET reutilizável, 2ª edição por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 por Addison-Wesley Professional como parte da série de desenvolvimento do Microsoft Windows.

Confira também