در زبان برنامه نویسی سی شارپ شمارنده ها داده نوعی از نوع value type هستند. یک شمارنده برای تعریف لیستی از ثابت های نامدار استفاده میشود. شمارنده ها می توانند به صورت مستقیم با استفاده از کلمه رزرو شده enum داخل یک فضای نام ، کلاس و یا ساختار تعریف شوند. شمارنده ها برای انتخاب نام برای یک ثابت عددی استفاده میشوند.
شمارند ها (enum)
به کمک شمارنده ها عدد های ثابت صحیح می توانند توسط یک نام مورد ارجاع قرار گیرند. در نمونه مثال زیر تعریف یک شمارنده نشان داده شده است :
enum WeekDays
{ Monday = 0, Tuesday =1, Wednesday = 2, Thursday = 3, Friday = 4, Saturday =5, Sunday = 6
}
Console.WriteLine(WeekDays.Friday);
Console.WriteLine((int)WeekDays.Friday);
خروجی نمونه مثال بالا به شکل زیر است :
Friday 4
به صورت پیش فرض اولین عضو از یک شمارنده دارای مقداری برابر با ۰ است و مقادیر بعدی اعضا به ترتیب با افزایش یکی به این مقدار پیش فرض به دست می آیند. برای مثال در شمارنده نمونه مثال زیر Monday
دارای مقدار ۰ ، Tuesday
دارای مقدار ۱ و Wednesday
دارای مقدار ۲ است و به همین ترتیب تا آخر یکی به مقادیر افزوده می شود.
enum WeekDays
{ Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
Console.WriteLine((int)WeekDays.Monday);
Console.WriteLine((int)WeekDays.Friday);
خروجی نمونه مثال بالا به شکل زیر است :
0 4
برای تبدیل یک داده نوع شمارنده به یک نوع صحیح استفاده از تبدیل صریج ضروری است برای مثال در نمونه مثال زیر برای بدست آوردن مقدار یکی از اعضای شمارنده از تبدیل صریح استفاده شده است :
int dayNum = (int)WeekDays.Friday;
Console.WriteLine(dayNum);
خروجی :
4
نکته : در زبان برنامه نویسی سی شارپ عمل تبدیل یک نوع به نوعی دیگر casting نام دارد. تبدیل می تواند به صورت صریح توسط برنامه نویس و یا به صورت ضمنی توسط کامپایلر انجام پذیرد.
تغییر در مقدار اولین عضو یک شمارنده باعث خواهد شد که مقادیر بعدی به صورت خودکار بر اساس مقدار عضو اولیه و با افزایش یکی به آن به ترتیب مقدار دهی مجدد شوند.
برای مثال تغییر مقدار Monday
به عدد ۱۰ باعث تغییر مقدار Tuesday
به ۱۲ و Wednesday
به ۱۳ و به همین ترتیب تا آخر خواهد شد.
enum WeekDays
{ Monday = 10, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
Console.WriteLine((int)WeekDays.Monday);
Console.WriteLine((int)WeekDays.Friday);
خروجی :
10 14
شمارنده ها می توانند دارای مقادیری با داده نوع های byte
، sbyte
، short
، ushort
، int
، uint
، long
و ulong
باشند. از داده نوع رشته ای string
نمی توان در شمارنده ها استفاده کرد.شمارنده ها با مربوط کردن نام های معنی دار به اعداد باعث میشود خوانایی کد نوشته شده بهبود یابد. آنها همچنین نگهداری و توسعه برنامه را ساده تر می کنند.
متدهای کلاس Enum
Enum یک کلاس abstract بوده که شامل متد های استاتیکی است که برای کار با شمارنده ها استفاده می شوند :
متد Format
: مقدار مشخص شده یک شمارنده را به یک رشته تبدیل میکند
متد GetName
: نام یک ثابت عددی مشخص شده در شمارنده را برمیگرداند
متد GetNames
: آرایه ای رشته ای از تمام ثابت های عددی یک شمارنده را برمیگرداند
متد GetValues
: آرایه ای از همه مقادیر ثابت های یک شمارنده را برمیگرداند
به خاطر داشته باشید که :
- یک شمارنده مجموعه ای از ثابت های نامدار است
- مقدار یک شمارنده به صورت پیشفرض از ۰ آغاز میشود. شمارنده ها می توانند دارای مقداری با هرداده نوع عددی معتبر باشند
- شمارنده ها برای داده نوع رشته ای در سی شارپ پشتیبانی نمی شود
- شمارنده ها برای خوانایی بیشتر و نگهداری آسان تر برنامه استفاده میشود