0Pricing
C# Academy · Aula

Enumerações de sinalizadores e combinações bit a bit

Combine valores de enumeração com o atributo Flags.

Enumerações de sinalizadores e combinações bit a bit é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

Enumerações de sinalizadores

Uma enumeração de sinalizadores representa uma combinação de opções. Marque-a com o atributo [Flags] e atribua a cada membro uma potência de dois distinta.

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Write;
        Console.WriteLine(a);
    }
}

Potências de dois

Cada sinalizador deve ocupar um bit exclusivo: 1, 2, 4, 8, 16. Isso permite combinar valores sem sobreposição.

using System;

[Flags]
enum Perm { Read = 1, Write = 2, Delete = 4, Share = 8 }
class Program {
    static void Main() {
        Console.WriteLine((int)Perm.Share);
    }
}

Combinando com OR

Use OR bit a bit (|) para combinar sinalizadores em um único valor.

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Execute;
        Console.WriteLine((int)a);
    }
}

Verificando com HasFlag

HasFlag testa se um valor combinado contém um sinalizador específico.

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Write;
        Console.WriteLine(a.HasFlag(Access.Write));
        Console.WriteLine(a.HasFlag(Access.Execute));
    }
}

Verificando com AND bit a bit

Você também pode testar um sinalizador com & e compará-lo com zero, o que é rápido e explícito.

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Write;
        bool canWrite = (a & Access.Write) != 0;
        Console.WriteLine(canWrite);
    }
}

Removendo um sinalizador

Limpe um sinalizador usando AND do complemento: a &= ~Access.Write.

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Write;
        a &= ~Access.Write;
        Console.WriteLine(a);
    }
}

Adicionando um sinalizador

Adicione um sinalizador usando OR. Se ele já estiver presente, nada será alterado.

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read;
        a |= Access.Execute;
        Console.WriteLine(a);
    }
}

Alternando um sinalizador

XOR (^) ativa ou desativa um sinalizador em uma única etapa.

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2 }
class Program {
    static void Main() {
        Access a = Access.Read;
        a ^= Access.Write;
        Console.WriteLine(a);
        a ^= Access.Write;
        Console.WriteLine(a);
    }
}

Por que [Flags] é importante

O atributo [Flags] faz com que ToString imprima nomes combinados em vez de um único número.

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Execute;
        Console.WriteLine(a);
    }
}

Definindo membros combinados

Você pode definir membros de conveniência que sejam combinações, como All.

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4, All = Read | Write | Execute }
class Program {
    static void Main() {
        Console.WriteLine((int)Access.All);
    }
}

Sinalizadores na prática

Os sinalizadores representam permissões, alternâncias de recursos e conjuntos de opções de forma compacta em um único inteiro.

using System;

[Flags]
enum Feature { None = 0, Dark = 1, Beta = 2, Sync = 4 }
class Program {
    static void Main() {
        Feature f = Feature.Dark | Feature.Sync;
        Console.WriteLine(f.HasFlag(Feature.Beta));
    }
}

Verificação rápida

Teste sua compreensão das enumerações de sinalizadores.

Recapitulação

Uma enumeração [Flags] atribui a cada membro uma potência de dois exclusiva, portanto os sinalizadores são combinados com | e verificados com HasFlag ou &. Você adiciona com |=, remove com &= ~ e alterna com ^=.

O atributo faz com que ToString imprima nomes combinados, e você pode definir membros de conveniência, como All.

Perguntas Frequentes

A aula “Enumerações de sinalizadores e combinações bit a bit” é grátis?

Sim — o texto completo de “Enumerações de sinalizadores e combinações bit a bit” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Enumerações de sinalizadores e combinações bit a bit”?

Combine valores de enumeração com o atributo Flags. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Enumerações de sinalizadores e combinações bit a bit”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Definindo e usando enumerações
  2. Enumerações de sinalizadores e combinações bit a bit
  3. Conversão e análise de enumerações
  4. Percorrendo valores de enumerações
← Voltar para C# Academy