C# Academy · Oppitunti

Flags-enumit ja bittiyhdistelmät

Yhdistäkää enum-arvoja Flags-attribuutin avulla.

Oppitunti 2/413 vaihetta

Flags-enumit ja bittiyhdistelmät on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.

Flags-enumit

Flags-enum edustaa vaihtoehtojen yhdistelmää. Merkitkää se [Flags]-määritteellä ja antakaa jokaiselle jäsenelle oma kakkosen potenssi.

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

Kakkosen potenssit

Kunkin lipun on varattava yksilöllinen bitti: 1, 2, 4, 8, 16. Näin arvot voidaan yhdistää ilman päällekkäisyyttä.

using System;

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

Yhdistäminen OR-operaatiolla

Yhdistäkää liput yhdeksi arvoksi bittikohtaisella OR-operaatiolla (|).

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

Tarkistaminen HasFlag-menetelmällä

HasFlag tarkistaa, sisältääkö yhdistetty arvo tietyn lipun.

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

Tarkistaminen bittikohtaisella AND-operaatiolla

Voitte tarkistaa lipun myös operaattorilla & ja vertaamalla tulosta nollaan. Tämä on nopeaa ja ilmaisee tarkoituksen selkeästi.

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

Lipun poistaminen

Poistakaa lippu tekemällä AND-operaatio komplementin kanssa: 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);
    }
}

Lipun lisääminen

Lisätkää lippu OR-operaatiolla. Jos lippu on jo mukana, mikään ei muutu.

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

Lipun vaihtaminen

XOR (^) kääntää lipun päälle tai pois yhdellä toiminnolla.

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

Miksi [Flags] on tärkeä

[Flags]-määrite muuttaa ToString-menetelmän toimintaa niin, että se tulostaa yhdistettyjen lippujen nimet yhden numeron sijaan.

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

Yhdistettyjen jäsenten määrittäminen

Voitte määrittää kätevyysjäseniä, jotka ovat yhdistelmiä, kuten 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-enumit käytännössä

Flags-enumit mallintavat käyttöoikeudet, ominaisuuksien kytkimet ja vaihtoehtojoukot tiiviisti yhdessä kokonaisluvussa.

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

Pikatesti

Testatkaa, miten hyvin ymmärrätte Flags-enumeita.

Kertaus

[Flags]-enum antaa jokaiselle jäsenelle yksilöllisen kakkosen potenssin, joten liput voidaan yhdistää operaattorilla | ja tarkistaa HasFlag-menetelmällä tai operaattorilla &. Voitte lisätä lipun operaattorilla |=, poistaa sen operaattorilla &= ~ ja vaihtaa sen tilan operaattorilla ^=.

Määrite saa ToString-menetelmän tulostamaan yhdistettyjen lippujen nimet, ja voitte määrittää kätevyysjäseniä, kuten All.

Aloita maksutta

Opi C# tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
93
Oppitunnit
346

Usein kysytyt kysymykset

Onko oppitunti ”Flags-enumit ja bittiyhdistelmät” ilmainen?

Kyllä – oppitunnin ”Flags-enumit ja bittiyhdistelmät” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Flags-enumit ja bittiyhdistelmät”?

Yhdistäkää enum-arvoja Flags-attribuutin avulla. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Flags-enumit ja bittiyhdistelmät”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?

Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Enum-tyyppien määrittely ja käyttö
  2. Flags-enumit ja bittiyhdistelmät
  3. Enum-muunnokset ja jäsentäminen
  4. Enum-arvojen iterointi
← Takaisin: C# Academy