Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
Esse conteúdo é reimpresso por permissão da Pearson Education, Inc. das Diretrizes de Design da Estrutura: Convenções, Idiomas e Padrões para Bibliotecas .NET Reutilizáveis, 2ª Edição. 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.
Enumerações são um tipo especial de valor. Há dois tipos de enumerações: enumerações simples e enumerações de sinalizador.
Enumerações simples representam pequenos conjuntos fechados de opções. Um exemplo comum da enumeração simples é um conjunto de cores.
As enumerações de sinalizador foram projetadas para dar suporte a operações bit a bit nos valores de enumeração. Um exemplo comum da enumeração de sinalizadores é uma lista de opções.
✔️ USE uma enumeração para parâmetros, propriedades e valores retornados fortemente tipados que representam conjuntos de valores.
✔️ Favoreça o uso de uma enumeração em vez de constantes estáticas.
❌ NÃO use uma enumeração para conjuntos abertos (como a versão do sistema operacional, nomes de seus amigos etc.).
❌ NÃO forneça valores de enumeração reservados destinados a uso futuro.
Você sempre pode simplesmente adicionar valores à enumeração existente em um estágio posterior. Consulte Como adicionar valores a Enums para obter mais detalhes sobre como adicionar valores a enums. Os valores reservados apenas poluem o conjunto de valores reais e tendem a levar a erros do usuário.
❌ EVITE expor publicamente enumerações com apenas um valor.
Uma prática comum para garantir a extensibilidade futura de APIs C é adicionar parâmetros reservados às assinaturas de método. Esses parâmetros reservados podem ser expressos como enumerações com um único valor padrão. Isso não deve ser feito em APIs gerenciadas. A sobrecarga de método permite adicionar parâmetros em versões futuras.
❌ NÃO inclua valores sentinelas em enumerações.
Embora às vezes sejam úteis para desenvolvedores de estrutura, os valores sentinel são confusos para os usuários da estrutura. Eles são usados para acompanhar o estado da enumeração em vez de serem um dos valores do conjunto representado pela enumeração.
✔️ O DO fornece um valor de zero em enumerações simples.
Considere chamar o valor como "Nenhum". Se esse valor não for apropriado para essa enumeração específica, o valor padrão mais comum para a enumeração deverá ser atribuído ao valor subjacente de zero.
✔️ CONSIDERE o uso Int32 (o padrão na maioria das linguagens de programação) como o tipo subjacente de uma enumeração, a menos que qualquer um dos seguintes seja verdadeiro:
A enumeração é uma enumeração de sinalizadores e você tem mais de 32 sinalizadores ou espera ter mais no futuro.
O tipo subjacente precisa ser diferente do que Int32 para facilitar a interoperabilidade com código não gerenciado esperando enumerações de tamanho diferente.
Um tipo subjacente menor resultaria em uma economia substancial no espaço. Se você espera que o enum seja usado principalmente como um argumento no fluxo de controle, o tamanho fará pouca diferença. A redução de tamanho poderá ser significativa se:
Você espera que o enum seja usado como um campo em uma estrutura ou classe instanciada com muita frequência.
Você espera que os usuários criem grandes matrizes ou coleções das instâncias de enumeração.
Você espera que um grande número de instâncias da enumeração seja serializado.
Para uso na memória, lembre-se de que os objetos gerenciados são sempre alinhados por DWORD, portanto, você precisa efetivamente de várias enumerações ou outras estruturas pequenas em uma instância para empacotar uma enumeração menor para fazer a diferença, pois o tamanho total da instância sempre será arredondado para um DWORD.
✔️ NOMEIE enumerações de sinalizador com substantivos plurais ou frases substantivas e enumerações simples com substantivos singulares ou frases substantivas.
❌ NÃO estenda System.Enum diretamente.
System.Enum é um tipo especial usado pelo CLR para criar enumerações definidas pelo usuário. A maioria das linguagens de programação fornece um elemento de programação que fornece acesso a essa funcionalidade. Por exemplo, em C#, a enum palavra-chave é usada para definir uma enumeração.
Como projetar enumerações de sinalizador
✔️ APLIQUE System.FlagsAttribute para enumerações de sinalizador. Não aplique esse atributo a enumerações simples.
✔️ USE poderes de dois para os valores de enumeração de sinalizador para que possam ser combinados livremente usando a operação OR bit a bit.
✔️ CONSIDERE fornecer valores de enumeração especiais para combinações de sinalizadores comumente usadas.
As operações bit a bit são um conceito avançado e não devem ser necessárias para tarefas simples. ReadWrite é um exemplo desse valor especial.
❌ EVITE criar enumerações de sinalizador em que determinadas combinações de valores são inválidas.
❌ EVITE usar valores de enumeração de sinalizador iguais a zero, a menos que o valor represente "todos os sinalizadores estão limpos" e esteja com o nome apropriado, conforme prescrito pela próxima diretriz.
✔️ NOMEIE o valor zero de enumerações de sinalizador None. Para uma enumeração de sinalizador, o valor deve sempre significar "todos os sinalizadores estão limpos".
Adicionando valor a Enums
É muito comum descobrir que você precisa adicionar valores a um enum depois de já tê-lo enviado. Há um possível problema de compatibilidade do aplicativo quando o valor recém-adicionado é retornado de uma API existente, pois aplicativos mal gravados podem não manipular o novo valor corretamente.
✔️ CONSIDERE a adição de valores a enumes, apesar de um pequeno risco de compatibilidade.
Se você tiver dados reais sobre incompatibilidades de aplicativo causadas por adições a uma enumeração, considere adicionar uma nova API que retorna os valores novos e antigos e preterir a API antiga, que deve continuar retornando apenas os valores antigos. Isso garantirá que seus aplicativos existentes permaneçam compatíveis.
Partes © 2005, 2009 Microsoft Corporation. Todos os direitos reservados.
Reimpresso por permissão da Pearson Education, Inc. de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition de Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 pela Addison-Wesley Professional como parte da série Microsoft Windows Development Series.