Bitmez?k
Herczeg Artúr
Hogyan lehet egyes funkciók állapotát a lehet? leghatékonyabban eltárolni? Ez a kérdés elég gyakran felmerül. Ha csak ki és bekapcsolt állapotot kell tárolni, akkor a legegyszer?bb megoldás a bitmez? (bitfield). Az egyes bitek állásától függ a funkció állapota, például a 13. bit 1 állása esetén az élsimítás be van kapcsolva, 0 állása esetén ki van kapcsolva.
Hogyan érdemes megvalósítnai ezt a funkcionalitást a C# nyelvben? Mi sem egyszer?bb, csak egy enumerációra van szükség. Ebbe belepakoljuk a lehetséges változókat, melyek értékét a 2 hatványaival feleltetjük meg:
enum HomeVideo
{
Video = 1,
TV = 2,
Hifi = 4,
Projector = 8,
}
Ez azt jelenti, hogy a video az els? bitnek (00001), a TV a második bitnek (00010), a hifi a harmadik bitnek (00100), a projektor pedig a negyedik bitnek (01000) felel meg.
Miért el?nyös ez számunkra? Esetleg miért jobb, mint egy egyszer? bitfield? Azért, mert a nevekkel tudunk egyszer?en hivatkozni a bitekre, nem kell binárisan kódolgatni, konvertálgatni ide-oda. Ha például a TV-t és a projektort akarom bekapcsolni, azt a következ? kódrészlettel könnyedén megoldhatom:
… = HomeVideo.TV | HomeVideo.Projector;
Itt a függ?leges vonal a bináris logikai "vagy" m?veletet jelenti (szemben a || literál logikai "vaggyal").
Hogy mégy egyszer?bb legyen a dolgunk, rendelkezésünkre áll egy attribútum a bitmez? funkciójú enumerációk megjelölésére. A neve FlagsAttribute, utalva arra, hogy flag-eket használunk, azaz biteket billentgetünk. Az attribútum feladata, hogy a bitfield jelleg? enumerációk megjelenítésekor ne biteket vagy számokat írjon ki, hanem a neveket. Ez akkor izgalmasabb, a az el?z? példát véve nem "01010"-t akarunk látni, hanem "TV, Projector" kiírást. A használata elég egyszer?, egyszer?en meg kell jelölni az enumerációt a következ? attribútummal:
[Flags]
…
Olvashatóbb, kezelhet?bb, karbantarthatóbb kód az eredmény.
Link: Designing Flags Enumerations
Link: FlagsAttribute Class
| Online kódfordítás || PInvoke Code Access Security || C# programozás Macintosh-on || Visual Studio 2008 – Els? benyomások || .NET fájlolvasás kiterjesztése |
Kategória: .NET |
Nincs megjegyzés »




