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.