0Pricing
C# Academy · Lección

Enums de flags y combinaciones bit a bit

Combine valores de enums con el atributo Flags.

Enums de flags y combinaciones bit a bit es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.

Enumeraciones de flags

Una enumeración de flags representa una combinación de opciones. Márquela con el atributo [Flags] y asigne a cada miembro una potencia de dos 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);
    }
}

Potencias de dos

Cada flag debe ocupar un bit único: 1, 2, 4, 8, 16. Así, los valores pueden combinarse sin solaparse.

using System;

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

Combinación con OR

Use OR bit a bit (|) para combinar flags en un solo 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);
    }
}

Comprobación con HasFlag

HasFlag comprueba si un valor combinado contiene un flag 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));
    }
}

Comprobación con AND bit a bit

También puede comprobar un flag con & y compararlo con cero, una opción rápida y explícita.

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);
    }
}

Eliminación de un flag

Quite un flag aplicando AND a su 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);
    }
}

Adición de un flag

Añada un flag aplicándole OR. Si ya está presente, no cambia nada.

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);
    }
}

Alternancia de un flag

XOR (^) activa o desactiva un flag en un solo paso.

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 qué es importante [Flags]

El atributo [Flags] cambia ToString para que muestre los nombres combinados en lugar de un solo 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);
    }
}

Definición de miembros combinados

Puede definir miembros prácticos que sean combinaciones, 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);
    }
}

Flags en la práctica

Los flags permiten representar permisos, activadores de funcionalidades y conjuntos de opciones de forma compacta en un solo entero.

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));
    }
}

Comprobación rápida

Compruebe cuánto entiende sobre las enumeraciones de flags.

Resumen

Una enumeración con [Flags] asigna a cada miembro una potencia de dos única, por lo que los flags se combinan con | y se comprueban con HasFlag o &. Puede añadirlos con |=, quitarlos con &= ~ y alternarlos con ^=.

El atributo hace que ToString muestre los nombres combinados y permite definir miembros prácticos como All.

Preguntas frecuentes

¿La lección «Enums de flags y combinaciones bit a bit» es gratis?

Sí — el texto completo de «Enums de flags y combinaciones bit a bit» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Enums de flags y combinaciones bit a bit»?

Combine valores de enums con el atributo Flags. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Enums de flags y combinaciones bit a bit»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Definición y uso de enums
  2. Enums de flags y combinaciones bit a bit
  3. Conversiones y análisis de enums
  4. Iteración de valores de enums
← Volver a C# Academy