¿Qué significa el atributo [Flags] para enumeraciones (enum) en C#?
¡Hola a todos! Acabo de empezar a aprender C# y me encontré con el atributo `[Flags]` antes de la declaración de una enumeración. Vi ese código en ejemplos, pero no puedo entender para qué sirve y cómo usarlo correctamente.
Las enumeraciones normales las entiendo — simplemente definen constantes con nombre:
```csharp
enum DayOfWeek
{
Monday = 1,
Tuesday = 2,
Wednesday = 3
}
```
Pero cuando veo esto:
```csharp
[Flags]
enum Permissions
{
None = 0,
Read = 1,
Write = 2,
Execute = 4
}
```
No entiendo por qué aquí `[Flags]` y por qué los valores se definen como potencias de dos (1, 2, 4). ¿Cuál es la diferencia con una enumeración normal? Intenté usar esa enumeración sin el atributo — el código parece funcionar, pero siento que estoy haciendo algo mal.
¿Pueden explicar con ejemplos simples: cómo declarar, cómo combinar valores, cómo verificar la presencia de un flag? Y lo principal — ¿qué cambiaría si quito `[Flags]`?
¡Gracias de antemano por la ayuda!
<<>>