DEV Community

Jaloliddin
Jaloliddin

Posted on

C# da Flagsdan foydalanish

enum - bu o’zgarmaslarni ifodalovchi maxsus “sinf” (qiymati o’zgarmaydigan yoki bir so’z bilan aytganda read-only o’zgaruvchilar). enum ni yaratish uchun enum kalit so’zidan foydalanamiz (interfeys yoki sinf o’rniga) va enum elementlari vergul bilan ajratib yoziladi:

  • Enum typeFlags atributidan foydalaning

  • Bit qiymatlaridan enum ko'rinishi sifatida foydalaning,
    chunki u bitli operatorlardan foydalanishga imkon beradi

  • "|" operator yordamida o'zgaruvchiga raqam qo'shing.

  • Sanoq qiymatidagi bir yoki bir nechta bit maydonlari o'rnatilganligini aniqlash uchun ushbu usuldan foydalaning. HasFlags()

enum quyidagicha ko'rinadi:

enum ColorTypicalEnum: int
{
   None = 0,
   Black = 1,
   Red = 2,
   Green = 4,
   Blue = 8
}
Enter fullscreen mode Exit fullscreen mode

Flags enum turini bit maydoni sifatida ko'rib chiqish mumkinligini ko'rsatadigan atributdir. Ushbu bit maydonlari endi bayroqlar to'plamiga guruhlangan.
Bu yerda siz enum maydonlarida intni bit sifatida ko'rishingiz mumkin. Bu oddiy type.enumga qaraganda enum bilan ishlashni osonlashtiradi.

[Flag]
enum ColorWithFlag: int
{
   None = 0,
   Black = 1,
   Red = 2,
   Green = 4,
   Blue = 8,
   ... //after some really, really long color listing
   ThisColorIsSoRare = 268435456
}
Enter fullscreen mode Exit fullscreen mode

Shunday qilib, biz chapga siljish operatoridan foydalanamiz shu usul orqali 2 darajalariga ega bo'lamiz: ThisColorIsSoRare = 268435456

[Flag]
enum ColorWithFlag: int
{
   None = 0,
   Black = 1,
   Red = 1 << 1, //2
   Green = 1 << 2, //4
   Blue = 1 << 3, //8
   ...
   ThisColorIsSoRare = 1 << 60, //268435456
   AllColors = int32.MaxValue
}
Enter fullscreen mode Exit fullscreen mode

Endi Flagsdan foydalanishning eng qiziqarli qismiga o'tamiz. Atribut bitli operatsiyalarga ruxsat berganligi sababli, siz quyidagi kabi ajoyib narsalarni osongina qilishingiz mumkin: Flags

// group all the primary colors (i.e. red, blue, and green) into one variable
var primaryColors = ColorWithFlag.Red | ColorWithFlag.Green | 
                    ColorWithFlag.Blue

//this sums the integer representation of the color in the `primaryColors` variable, so if you do

var primaryColorsIntegerValue = (int)primaryColors;
//you would get 14
Enter fullscreen mode Exit fullscreen mode

Quyidagi usul yordamida asosiy rang o'zgaruvchisida rang mavjudligini tekshirishingiz mumkin. HasFlag

var isPrimaryColor = primaryColors.HasFlag(ColorWithFlag.Black);
//this returns false
Enter fullscreen mode Exit fullscreen mode

Enum

Qo'shimcha ma'lumotar Flags haqida

Top comments (0)