Avatar ·

O que significa o atributo [Flags] para enumerações (enum) em C#?

Olá a todos! Acabei de começar a estudar C# e me deparei com o atributo `[Flags]` antes da declaração de uma enumeração. Vi esse código em exemplos, mas não consigo entender para que ele serve e como usá-lo corretamente. \n\nAs enumerações comuns eu entendo — elas apenas definem constantes nomeadas:\n\n```csharp\nenum DayOfWeek\n{\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3\n}\n```\n\nMas quando vejo algo assim:\n\n```csharp\n[Flags]\nenum Permissions\n{\n None = 0,\n Read = 1,\n Write = 2,\n Execute = 4\n}\n```\n\nNão entendo por que o `[Flags]` está aqui e por que os valores são definidos como potências de dois (1, 2, 4). Qual é a diferença de uma enumeração comum? Tentei usar essa enumeração sem o atributo — o código parece funcionar, mas sinto que estou fazendo algo errado. \n\nVocês podem explicar com exemplos simples: como declarar, como combinar valores, como verificar a presença de uma flag? E o principal — o que muda se eu remover o `[Flags]`?\n\nAgradeço desde já pela ajuda!\n<<>>\n

O que é [Flags] e para que serve