Share via


Design de enumeração

Enumerações fornecem conjuntos de valores constantes que são úteis para fortemente digitando membros e melhorar a legibilidade do código. Enumerações são simples ou sinalizadores. Enumerações simples contêm valores que não são combinados ou usados em comparações bit a bit. Enumerações de sinalizadores destinam-se a ser combinado usando operações de OR bit a bit. Combinações de valores de enumeração de sinalizadores são examinadas por meio de operações de AND bit a bit.

As diretrizes a seguir descrevem as práticas recomendadas para o design de enumeração.

Usar uma enumeração para tipar fortemente parâmetros, propriedades e retornar os valores que representam os conjuntos de valores.

Favor usando uma enumeração em vez de constantes estáticas.

O exemplo de código a seguir demonstra o design incorreto.

Public Class BadFurnishings

    Public Shared Table As Integer = 1
    Public Shared Chair As Integer = 2
    Public Shared Lamp As Integer = 3

End Class
public static class BadFurnishings
{
    public static int Table = 1;
    public static int Chair = 2;
    public static int Lamp = 3;
}

O exemplo de código a seguir demonstra a enumeração que deve ser usada no lugar das constantes estáticas.

Public Enum GoodFurnishings

    Table
    Chair
    Lamp

End Enum
public enum GoodFurnishings
{
    Table,
    Chair,
    Lamp
}

Não use uma enumeração de conjuntos abertos como, por exemplo, a versão do sistema operacional.

Adicionar valores para uma enumeração que já foi remetida podem quebrar o código existente. Há vezes quando isso é aceitável, mas você não deve criar uma enumeração onde isso é provável que seja o caso.

Não defina valores de enumeração reservados são destinados ao uso futuro.

Em algumas situações, você pode decidir que a adição de valores da enumeração despachada vale o risco de quebrar possivelmente o código existente. Você também pode definir uma nova enumeração e membros que funcionam com seus valores.

Evite expor publicamente a enumerações com apenas um valor.

Não inclua sentinel valores nas enumerações.

Os valores de Sentinel são usados para identificar os limites de valores na enumeração. Normalmente, um valor de Sentinela é usado em verificações de intervalo e não é um valor de dados válidos. O exemplo de código a seguir define uma enumeração com um valor de Sentinela.

Public Enum Furniture

    Desk
    Chair
    Lamp
    Rug
    LastValue

End Enum

public enum Furniture
{
    Desk,
    Chair,
    Lamp,
    Rug,
    LastValue   // The sentinel value.
}

Fornece um valor zero em enumerações simples.

Se possível, esse valor de nome None. Se None é não apropriado, atribua o valor zero ao valor mais comumente usado (o padrão).

Considere o uso de Int32 (o tipo de dados padrão na maioria das linguagens de programação) como o tipo de dados subjacente de uma enumeração, a menos que alguma das seguintes opções for verdadeira:

  • A enumeração é uma enumeração de sinalizadores e tiver mais de 32 sinalizadores ou espera ter mais no futuro.

  • O tipo subjacente deve ser diferente Int32 mais fácil interoperabilidade com código não gerenciado, esperando enumerações de tamanho diferente.

  • Um tipo subjacente menores resultaria em uma economia substancial no espaço. Se você espera uma enumeração para ser usado principalmente como um argumento para o fluxo de controle, o tamanho fazem pouca diferença. A economia de tamanho pode ser significativa se:

    • Você espera que a enumeração para ser usado como um campo em uma classe ou estrutura instanciada com muita freqüência.

    • Você espera que os usuários criem matrizes grandes ou coleções de instâncias de enumeração.

    • Você espera que um grande número de instâncias de enumeração para ser serializado.

Nome os sinalizadores de enumerações com substantivos no plural ou frases de substantivo. Enumerações simples devem ser nomeadas com substantivos singulares ou frases de substantivo.

Não estenda System. Enum diretamente.

Alguns compiladores não permitem estender Enum , a menos que você fazê-lo indiretamente usando a palavra-chave específicas do idioma para a geração de enumerações.

Portions Copyright 2005 Microsoft Corporation. Todos os direitos reservados.

Portions Copyright Addison-Wesley Corporation. Todos os direitos reservados.

Para obter mais informações sobre as diretrizes de design, consulte a "diretrizes de Design do Framework: Convenções, idiomas e padrões de reutilizável.Bibliotecas de rede" catálogo por Krzysztof Cwalina e Brad Abrams, publicado pela Addison-Wesley, 2005.

Consulte também

Conceitos

Enumerações de sinalizadores de criação

Adicionar valores a enumerações

Outros recursos

Diretrizes de Design do tipo

Diretrizes de Design para desenvolvimento bibliotecas de classe