0Pricing
C# Academy · Lezione

Enum Flags e combinazioni bitwise

Combini i valori di un enum con l'attributo Flags.

Enum Flags e combinazioni bitwise è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.

Enum flags

Un enum flags rappresenta una combinazione di opzioni. Lo contrassegni con l'attributo [Flags] e assegni a ogni membro una distinta potenza di due.

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

Potenze di due

Ogni flag deve occupare un bit distinto: 1, 2, 4, 8, 16. In questo modo i valori possono essere combinati senza sovrapporsi.

using System;

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

Combinare con OR

Usi l'OR bit a bit (|) per combinare i flag in un unico valore.

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

Verificare con HasFlag

HasFlag verifica se un valore combinato contiene un flag specifico.

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

Verificare con AND bit a bit

È anche possibile verificare un flag con & e confrontare il risultato con zero: è un approccio rapido ed esplicito.

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

Rimuovere un flag

Azzeri un flag eseguendo l'AND con il 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);
    }
}

Aggiungere un flag

Aggiunga un flag usando l'OR. Se è già presente, non cambia nulla.

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

Invertire un flag

XOR (^) attiva o disattiva un flag in un solo passaggio.

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

Perché è importante [Flags]

L'attributo [Flags] modifica ToString, che stampa i nomi combinati invece di un singolo numero.

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

Definire membri combinati

È possibile definire membri di praticità che rappresentano combinazioni, come 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);
    }
}

Gli enum flags nella pratica

I flag rappresentano in modo compatto autorizzazioni, opzioni di funzionalità e insiemi di opzioni all'interno di un singolo intero.

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 rapida

Verifichi la propria comprensione degli enum flags.

Riepilogo

Un enum [Flags] assegna a ogni membro una potenza di due distinta, così i flag possono essere combinati con | e verificati con HasFlag o &. È possibile aggiungerli con |=, rimuoverli con &= ~ e invertirli con ^=.

L'attributo fa sì che ToString stampi i nomi combinati; inoltre, è possibile definire membri di praticità come All.

Domande Frequenti

La lezione «Enum Flags e combinazioni bitwise» è gratuita?

Sì — il testo completo di «Enum Flags e combinazioni bitwise» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.

Cosa imparerò in «Enum Flags e combinazioni bitwise»?

Combini i valori di un enum con l'attributo Flags. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Enum Flags e combinazioni bitwise»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Definizione e utilizzo degli enum
  2. Enum Flags e combinazioni bitwise
  3. Conversione e analisi degli enum
  4. Iterazione sui valori degli enum
← Torna a C# Academy