Avatar ·

ماذا يعني السمة [Flags] للتعدادات (enum) في C#؟

مرحبًا بالجميع! لقد بدأت للتو في تعلم C# وصادفت السمة `[Flags]` قبل تعريف التعداد. رأيت هذا الكود في الأمثلة، لكنني لا أستطيع فهم سبب الحاجة إليه وكيفية استخدامه بشكل صحيح. \n\nأفهم التعدادات العادية — فهي ببساطة تحدد ثوابت مسماة:\n\n```csharp\nenum DayOfWeek\n{\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3\n}\n```\n\nلكن عندما أرى هذا:\n\n```csharp\n[Flags]\nenum Permissions\n{\n None = 0,\n Read = 1,\n Write = 2,\n Execute = 4\n}\n```\n\nلا أفهم لماذا `[Flags]` هنا ولماذا القيم محددة كقوى للعدد 2 (1, 2, 4). ما الفرق عن التعداد العادي؟ حاولت استخدام هذا التعداد بدون السمة — الكود يبدو أنه يعمل، لكني أشعر أنني أفعل شيئًا خاطئًا. \n\nهل يمكنكم الشرح بأمثلة بسيطة: كيفية التعريف، كيفية دمج القيم، كيفية التحقق من وجود flag؟ والأهم — ماذا سيتغير إذا أزلت `[Flags]`؟\n\nشكرًا مقدمًا على المساعدة!