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 type
Flags
atributidan foydalaningBit 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
}
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
}
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
}
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
Quyidagi usul yordamida asosiy rang o'zgaruvchisida rang mavjudligini tekshirishingiz mumkin. HasFlag
var isPrimaryColor = primaryColors.HasFlag(ColorWithFlag.Black);
//this returns false
Top comments (0)