انامها (Enums)
در سیشارپ، انامها (Enums) یک نوع دادهای ویژه هستند که مجموعهای از مقادیر ثابت مرتبط را با نامهای معنادار نمایش میدهند. استفاده از انامها به توسعهدهندگان کمک میکند تا کد خواناتر، ایمنتر و قابل نگهداری باشد. این ابزار در مدیریت حالات مختلف، دستهبندیها و سطوح دسترسی بسیار مهم است؛ برای مثال روزهای هفته، وضعیت سفارش، نقش کاربران یا سطوح دسترسی میتوانند به صورت Enum تعریف شوند تا از استفاده از اعداد یا رشتههای ثابت جلوگیری شود.
انامها با کلمه کلیدی enum تعریف میشوند و هر عضو میتواند به صورت پیشفرض نوع int داشته باشد، اما میتوان نوع پایهای دیگری مانند byte، short یا long نیز مشخص کرد تا بهینهسازی حافظه انجام شود. انامها را میتوان در کلاسها، ساختارها و اینترفیسها استفاده کرد و آنها را به شیوهای سازگار با اصول برنامهنویسی شیءگرا (OOP) به کار برد.
در این آموزش، شما یاد خواهید گرفت که چگونه انامها را تعریف، مقداردهی اولیه و در ساختارهای شرطی، حلقهها و دادهها استفاده کنید. همچنین، نحوه تبدیل ایمن بین انامها و اعداد صحیح و کاربردهای واقعی انامها در پروژههای سیشارپ را خواهید آموخت. درک درست انامها برای توسعهدهندگان سیشارپ به منظور ساخت اپلیکیشنهای قابل نگهداری، بهینه و با کیفیت بالا ضروری است.
مثال پایه
textusing System;
namespace EnumExample
{
class Program
{
// تعریف Enum برای روزهای هفته
enum WeekDays
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
static void Main(string[] args)
{
WeekDays today = WeekDays.Wednesday;
Console.WriteLine("امروز روز: " + today);
if (today == WeekDays.Wednesday)
{
Console.WriteLine("ما در وسط هفته هستیم!");
}
int dayNumber = (int)today;
Console.WriteLine("شماره روز در هفته: " + dayNumber);
WeekDays anotherDay = (WeekDays)5;
Console.WriteLine("روز شماره 5: " + anotherDay);
}
}
}
در این مثال، Enum با نام WeekDays تعریف شده که شامل هفت مقدار ثابت است. در متد Main، نشان داده شده است که چگونه یک متغیر Enum مقداردهی اولیه میشود، چگونه در شرطها استفاده میشود و چطور بین Enum و int تبدیل انجام میشود.
تبدیل Enum به int برای محاسبات، ذخیرهسازی دادهها یا تعامل با پایگاه داده کاربرد دارد، و تبدیل int به Enum برای بازسازی وضعیت از دادههای عددی مفید است. استفاده از Enum خوانایی و نگهداری کد را افزایش میدهد و به راحتی با طراحی شیءگرا در پروژهها ادغام میشود.
مثال کاربردی
textusing System;
namespace AdvancedEnumExample
{
enum OrderStatus : byte
{
Pending = 1,
Processing = 2,
Shipped = 3,
Delivered = 4,
Cancelled = 5
}
class Order
{
public int Id { get; set; }
public string Customer { get; set; }
public OrderStatus Status { get; set; }
public void DisplayStatus()
{
switch (Status)
{
case OrderStatus.Pending:
Console.WriteLine("سفارش در انتظار است.");
break;
case OrderStatus.Processing:
Console.WriteLine("سفارش در حال پردازش است.");
break;
case OrderStatus.Shipped:
Console.WriteLine("سفارش ارسال شد.");
break;
case OrderStatus.Delivered:
Console.WriteLine("سفارش تحویل داده شد.");
break;
case OrderStatus.Cancelled:
Console.WriteLine("سفارش لغو شد.");
break;
default:
Console.WriteLine("وضعیت سفارش نامشخص است.");
break;
}
}
}
class Program
{
static void Main(string[] args)
{
Order o1 = new Order { Id = 101, Customer = "Alice", Status = OrderStatus.Processing };
Order o2 = new Order { Id = 102, Customer = "Bob", Status = OrderStatus.Shipped };
o1.DisplayStatus();
o2.DisplayStatus();
}
}
}
این مثال پیشرفته کاربرد انامها در پروژههای واقعی را نشان میدهد. Enum با نوع byte تعریف شده تا بهینهسازی حافظه انجام شود. کلاس Order شامل Id، Customer و Status است و متد DisplayStatus با استفاده از switch بر اساس مقدار Enum، منطق تجاری را اعمال میکند.
این روش باعث افزایش خوانایی، نگهداری و امنیت دادهها میشود. استفاده از Enum در کلاس، طراحی ماژولار و شیءگرا را تقویت میکند و مدیریت منطق پیچیده و وضعیتها را آسان میکند. از بهترین شیوهها، انتخاب نوع پایه مناسب و اضافه کردن default در switch است.
بهترین شیوهها برای استفاده از انامها در سیشارپ شامل نامگذاری واضح اعضا، انتخاب نوع پایه مناسب برای بهینهسازی حافظه و اعتبارسنجی ایمن در تبدیلها است.
اشتباهات رایج شامل استفاده از اعداد یا رشتههای ثابت، switch ناقص و عدم وجود default است. برای بهینهسازی عملکرد، نوع پایه کوچک انتخاب کرده و از تبدیلهای مکرر جلوگیری کنید. برای رفع اشکال، میتوان از Immediate Window در Visual Studio و Enum.TryParse برای تبدیل ایمن استفاده کرد. Enum فقط مقادیر معتبر را میپذیرد که امنیت و سازگاری رفتار را تضمین میکند.
📊 جدول مرجع
سیشارپ Element/Concept | Description | Usage Example |
---|---|---|
enum | تعریف مجموعهای از مقادیر ثابت با نام | enum WeekDays {Sunday, Monday, Tuesday} |
Casting | تبدیل بین Enum و نوع عددی | int dayNumber = (int)WeekDays.Monday; WeekDays day = (WeekDays)1 |
Underlying Type | انتخاب نوع پایه برای بهینهسازی حافظه | enum Status : byte {Active = 1, Inactive = 0} |
Switch Statement | اعمال منطق بر اساس مقدار Enum | switch(status){ case Status.Active: ... break;} |
Class Integration | استفاده از Enum به عنوان ویژگی کلاس | class Order { public OrderStatus Status {get; set;} } |
استفاده از انامها در سیشارپ به توسعهدهندگان امکان میدهد کد خود را بهصورت ساختارمند و ایمن ارائه کنند، که باعث بهبود خوانایی، نگهداری و عملکرد میشود. در پروژههای تجاری، این ابزار برای مدیریت وضعیتها، دستهبندیها و منطق تجاری حیاتی است.
گامهای بعدی شامل یادگیری Attributes، استفاده از Generics برای انتزاع نوع و تمرین State Pattern است. نکات عملی شامل استفاده مداوم از Enum، تبدیل ایمن در یکپارچهسازی داده و رعایت بهترین شیوهها است. مستندات رسمی، کتابهای پیشرفته C# و پروژهها منابع مهمی برای پیادهسازی مؤثر انامها هستند.
🧠 دانش خود را بیازمایید
آزمون دانش شما
درک خود از این موضوع را با سوالات کاربردی بسنجید.
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود