Compartilhar via


Enumerações de sinalizadores de criação

Enumerações de sinalizadores são usadas para os campos de bit de mascaramento e fazer comparações bit a bit. Existe a modelagem correta a seguir quanto a atribuição de multiplos valores, ao mesmo tempo, para uma determinada enumeração. Por exemplo, você pode combinar qualquer do GenericUriParserOptions valores de enumeração para configurar um analisador de identificador de recursos uniforme (URI) genérico.

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

Use potências de dois para os valores da enumeração de sinalizadores, portanto, eles podem ser livremente combinados usando a operação OR bit a bit.

Observação importanteImportante

Se você não usar potências de dois ou combinações de potências de dois, operações bit a bit não funcionará como esperado.

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

Combinar os valores de enumeração de sinalizadores é uma habilidade intermediária que não seria necessária para implementar cenários comuns de desenvolvedores. Por exemplo, o FileShare contém a enumeração de ReadWrite valor para especificar que um arquivo compartilhado pode ser aberto para leitura ou gravação. Isso mostra que os desenvolvedores que pode abrir um arquivo compartilhado para leitura ou gravação e elimina a necessidade de aprender como especificar uma combinação dos valores de enumeração como um único valor.

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

Esse problema geralmente indica que o significado da enumeração não é suficientemente preciso. Divida a enumeração em duas ou mais enumerações, cada uma com um conjunto mais preciso de valores. Por exemplo, considere a enumeração mal definida a seguir.

<Flags()> _
Public Enum PurchaseTypes

    SalePrice
    RegularPrice
    Book
    CompactDisk

End Enum

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

O desenvolvedor deverá decidir sobre o uso dessa enumeração no 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)

Quando chamar este método, o purchase parâmetro especifica exatamente um a SalePrice ou RegularPrice valores e exatamente um a Book ou CompactDisk valores. Os desenvolvedores não seria capazes de determinar esse requisito, sem a documentação de consultoria ou experiências com o método. Uma abordagem melhor é separar os dois tipos de informações, colocando cada um em sua própria enumeração, conforme mostrado no 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 alterado para refletir essa reformulação, conforme mostrado no 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 é usado para indicar que todos os sinalizadores estejam desmarcados. Tal valor deve ser nomeado apropriadamente, conforme descrito na diretriz próxima.

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

Nomeie o valor zero de enumerações de sinalizadores nenhum. Para uma enumeração de sinalizadores, o valor deve sempre significa que todos os sinalizadores estão limpos.

Observação importanteImportante

Não use o valor zero em uma enumeração de sinalizadores para indicar qualquer outro estado.Não há nenhuma maneira de verificar se há um sinalizador de valor zero sendo definido explicitamente, em oposição aos sinalizadores de que está sendo definidas.

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

Design de enumeração

Adicionar valores a enumerações

Outros recursos

Diretrizes de Design do tipo

Diretrizes de Design para desenvolvimento bibliotecas de classe