Compartilhar via


Criar enumerações de sinalizadores

Enumerações de sinalizadores são usadas para os campos de bits de mascaramento e fazer comparações bit a bit. Eles são o design correto a ser usado quando vários valores de enumeração podem ser especificados ao mesmo time. Por exemplo, você pode agrupar qualquer um do GenericUriParserOptions valores de enumeração para configurar um analisador de URI (Uniform recurso identificador) genérico.

Fazer aplicar sistema.FlagsAttribute para sinalizadores de enumerações.Não aplique esse atributo enumerações simples.

Use potências de dois valores de uma enumeração sinalizadores de modo que eles possam ser livremente combinados usando a operação OR bit a bit.

Observação importanteObservação importante:

Se você não usar potências de dois ou combinações de potências de 2, operações bit a bit não irão funcionar sistema autônomo esperado.

Considere fornecer valores de enumeração especial para comumente usadas combinações de sinalizadores.

Combinando valores de enumeração de sinalizadores é uma habilidade intermediária que não deveriam ser necessária para os desenvolvedores a implementação de cenários comuns. Por exemplo, a FileShare enumeração contém o ReadWrite valor para especificar que um arquivo compartilhado pode ser aberto para leitura ou gravação. Mostra sistema autônomo desenvolvedores que eles podem em em aberto um arquivo compartilhado para leitura ou gravação e elimina a necessidade de que saiba sistema autônomo especificar uma combinação dos valores de enumeração sistema autônomo um valor único.

Evite criar enumerações sinalizadores quando determinadas combinações de valores são inválidas.

Esse problema normalmente indica que o significado da enumeração não é suficientemente preciso. Considere dividir a enumeração em dois ou mais enumerações, cada um com um conjunto de valores mais preciso. Por exemplo, considere a seguinte enumeração mal definida.

<Flags()> _
Public Enum PurchaseTypes

    SalePrice
    RegularPrice
    Book
    CompactDisk

End Enum
[Flags]
public enum PurchaseTypes
{
    SalePrice,
    RegularPrice,
    Book,
    CompactDisk
}

O designer planeja Essa enumeração para ser usado com o seguinte método.

Public Overloads Function FindPriceForItem(ByVal title As String, ByVal purchase As PurchaseTypes) As Single
    Return 0
End Function
public float FindPriceForItem(string title, PurchaseTypes purchase)

Ao chamar esse método, o purchase parâmetro especifica exatamente um da SalePrice ou RegularPrice valores e exatamente um da Book ou CompactDisk valores. Os desenvolvedores não seria capazes de determinar esse requisito sem consultar a documentação ou experiências com o método. Uma abordagem melhor é separar sistema autônomo dois tipos de informação, colocando cada um em sua própria enumeração, sistema autônomo neste exemplo de código a seguir.

Public Enum ItemType

    Book
    CompactDisk

End Enum

Public Enum PriceType

    SalePrice
    RegularPrice

End Enum
public enum ItemType
{
    Book,
    CompactDisk
}

public enum PriceType
{
    SalePrice,
    RegularPrice,
}

A assinatura do método agora seria alteradas para refletir essa reformulação sistema autônomo neste exemplo de código a seguir.

Public Overloads Function FindPriceForItem(ByVal title As String, ByVal name As ItemType, ByVal price As PriceType) As Single
    Return 0
End Function
public float FindPriceForItem(string title, ItemType name, PriceType price)

Evite definir um valor de enumeração de sinalizadores como zero, a menos que o valor seja usado para indicar que todos os sinalizadores estejam desmarcados.Tal valor deve ser nomeado apropriadamente sistema autônomo descrito na próxima a diretriz.

Observe que essa diretriz é somente para sinalizadores de enumerações. Enumerações simples podem e devem usar o valor zero.

Nome do zero valor das enumerações de sinalizadores de nenhum.Para uma enumeração de sinalizadores, o valor sempre deve significar que todos os sinalizadores são limpas.

Observação importanteObservação importante:

Não use o valor zero em uma enumeração de sinalizadores para indicar qualquer Outros estado. Não é possível verificar se há um sinalizar de valor zero que está sendo definido explicitamente, ao contrário de nenhum sinalizar definido.

Partes direitos autorais 2005 Microsoft Corporation. Todos os direitos reservados.

Partes direitos autorais Addison-Wesley Corporation. Todos os direitos reservados.

Para obter mais informações sobre diretrizes de design, consulte a "diretrizes de design do estrutura: Catálogo de convenções, idiomas e padrões para bibliotecas do .NET reutilizável"Krzysztof Cwalina e Brad Abrams, publicado pela Addison-Wesley, 2005.

Consulte também

Conceitos

Design de enumeração

Adicionar valores a enumerações

Outros recursos

Diretrizes de design de tipo

Diretrizes de Design para desenvolvimento bibliotecas de classe