در دنیای برنامه‌نویسی، به ویژه در زبان C# که یکی از محبوب‌ترین زبان‌های شیءگرا است، ساختارهای داده‌ای مختلفی وجود دارد که کار توسعه‌دهندگان را آسان‌تر می‌کنند. یکی از این ساختارها، Enum (مخفف Enumeration) است.

Enum یک نوع داده‌ای خاص در C# است که برای تعریف مجموعه‌ای از ثابت‌های نام‌گذاری‌شده به کار می‌رود. این ثابت‌ها معمولاً مقادیر عددی (به طور پیش‌فرض از نوع int) هستند، اما می‌توانند با انواع دیگر مانند byte، short، long و غیره نیز تعریف شوند. Enum ها برای نمایش گزینه‌های محدود و ثابت، مانند روزهای هفته، وضعیت‌های یک سفارش یا رنگ‌ها، بسیار مناسب هستند.

مزایای استفاده از Enum :

  • خوانایی کد: به جای استفاده از اعداد جادویی (magic numbers) مانند 1 برای "یکشنبه"، از نام‌های معنادار استفاده می‌کنید.

  • ایمنی نوع: کامپایلر خطاهای احتمالی را در زمان کامپایل تشخیص می‌دهد.

  • سهولت نگهداری: تغییر در مقادیر Enum در یک مکان، بر کل کد تأثیر می‌گذارد.

نحوه تعریف یک Enum ساده

برای تعریف یک Enum، از کلمه کلیدی enum استفاده می‌کنیم. syntax پایه‌ای آن به صورت زیر است:

 

public enum DayOfWeek
{
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
}

در این مثال، Sunday به طور پیش‌فرض مقدار 0، Monday مقدار 1 و همین‌طور ادامه می‌یابد. می‌توانید مقادیر را explicit تعریف کنید:

public enum Status
{
    Pending = 0,
    Processing = 1,
    Completed = 2,
    Failed = -1
}

توجه: Enum ها می‌توانند در namespace، class یا حتی struct تعریف شوند، اما معمولاً public هستند تا در سراسر برنامه قابل دسترسی باشند.

استفاده از Enum در کد

پس از تعریف، می‌توانید از Enum مانند هر نوع داده دیگری استفاده کنید:

class Program
{
    static void Main(string[] args)
    {
        DayOfWeek today = DayOfWeek.Wednesday;
        Console.WriteLine($"Today is {today}");  // خروجی: Today is Wednesday

        int dayNumber = (int)today;  // تبدیل به int
        Console.WriteLine($"Day number: {dayNumber}");  // خروجی: Day number: 3
    }
}

 

پرچم ها (Flags) در Enum

یکی از کاربردهای پیشرفته Enum، استفاده از آن به عنوان بیت‌فیلد با attribute [Flags] است. این ویژگی اجازه می‌دهد چندین مقدار را با عملگر بیت‌به‌بیت ترکیب کنید. مثلاً برای مجوزها:

[Flags]
public enum Permissions
{
    None = 0,
    Read = 1,
    Write = 2,
    Execute = 4,
    Delete = 8
}

استفاده:

Permissions userPerms = Permissions.Read | Permissions.Write;  // ترکیب با OR
Console.WriteLine(userPerms);  // خروجی: Read, Write

if ((userPerms & Permissions.Write) == Permissions.Write)  // چک با AND
{
    Console.WriteLine("User can write");
}

این روش برای ذخیره‌سازی چندین گزینه در یک متغیر عددی مفید است، مانند تنظیمات کاربر.

ویژگی‌های پیشرفته Enum در C# مدرن

در نسخه‌های جدید C# (مانند C# 7 و بالاتر)، Enum ها با ویژگی‌هایی مانند generic constraints بهبود یافته‌اند. همچنین، می‌توانید از Enum.GetValues برای گرفتن تمام مقادیر استفاده کنید:

foreach (DayOfWeek day in Enum.GetValues(typeof(DayOfWeek)))
{
    Console.WriteLine(day);
}

نتیجه‌گیری

Enum ها یکی از ابزارهای قدرتمند C# برای نوشتن کد تمیز و قابل نگهداری هستند. با استفاده از آن‌ها، می‌توانید از خطاهای رایج جلوگیری کنید و کد خود را حرفه‌ای‌تر کنید. اگر تازه‌کار هستید، با مثال‌های ساده شروع کنید و سپس به Flags بروید. برای اطلاعات بیشتر، به مستندات رسمی Microsoft مراجعه کنید.