Techies blog » 2006 » március » 23

Az oldalról:

  • Technológiai újdonságok a nagyvilágból életem jelenségeivel kiegészítve.
  • RSS 2.0 Feliratkozás


Feliratkozás:

Bejelentkezés, regisztráció:

Bitmez?k

2006. március 23. 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

Kapcsolódó tartalom:
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 »

.NET szabványosság

2006. március 23. Herczeg Artúr

Egy nagyon fontos kérdés a .NET programozó életében: lehet-e nem CLS (Common Language Specification, közös nyelvi specifikáció) szabványnak megfelel? kódot el?állítani, például C# nyelven.

A megdöbbent? (legalábbis els?re) válasz az, hogy (tovább…)

Kapcsolódó tartalom:
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 »