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
- Definindo e usando enumerações
- Enumerações de sinalizadores e combinações bit a bit
- Conversão e análise de enumerações
- Percorrendo valores de enumerações