Flags-enumit ja bittiyhdistelmät
Yhdistäkää enum-arvoja Flags-attribuutin avulla.
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.
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
- Enum-tyyppien määrittely ja käyttö
- Flags-enumit ja bittiyhdistelmät
- Enum-muunnokset ja jäsentäminen
- Enum-arvojen iterointi