علاوه بر ساختارها، #C از value type دیگری به نام شمارنده پشتیبانی میکند. ما در این مقاله، بیشتر در مورد شمارنده ها در #C صحبت میکنیم.
این مقاله، سرفصلی از دوره آموزشی زیر میباشد:
- کلاسها و سازنده ها
- ویژگیها
- constant ،Static member ها و Extension Method ها
- Anonymous Type ها و Nullabel Type ها
- ساختارها
- شمارنده ها
- وراثت
- Interface ها
- کلاسهای Abstract
- Generic ها
- Queue, Stack, Hashtable
- Generic List و Dictionary
- Delegate ها
اگر می خواهید محتویات کامل این دوره را ببینید ، می توانید بر روی لینک سطح متوسطه #C کلیک کنید.
برای دانلود سورس، بر روی لینک سورس شمارنده ها در #C کلیک کنید.
ما این مقاله را به قسمتهای زیر تقسیم مکینیم:
کار با شمارنده ها در #C
فرض کنید ما به روزهای هفته در پروژه مان نیاز داریم. ما میتوانیم یک عدد integer برای هر روز هفته (0 تا 6) در نظر بگیریم و حتی اگر این بسیار خوب هم کار کند اما به هیچ وجه خوانا نیست. اینجا جایی است که شمارنده ها برتری پیدا میکنند.
برای تعریف شمارنده میتوانیم از سینتکس زیر استفاده کنیم:
1 2 3 4 5 6 7 8 9 10 |
public enum DaysInWeek { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } |
بعد از اینکه شمارنده خود را تعریف کردیم، میتوانیم از آن دقیقا به همان شیوه ای که از نوع های دیگر استفاده میکنیم استفاده نماییم:
1 2 3 4 5 6 7 |
static void Main(string[] args) { DaysInWeek monday = DaysInWeek.Monday; Console.WriteLine(monday); // It is going to print out Monday Console.ReadKey(); } |
همانطور که میبینیم باید بنویسیم DaysInWeek.Monday و نه اینکه فقط Monday را بنویسیم. زیرا تمام نامهای لغوی درون حوزه نوع شمارنده قرار دارند.
انتخاب مقادیر کلمات شمارنده
ذاتا، یک نوع شمارنده، به هر عنصر در داخل خود، یک عدد integer تخصیص میدهد. این اعداد از 0 شروع میشوند و برای هر عنصر دیگر، این عدد 1 واحد افزایش میابد. در مثال قبلی، ما مقداری که با عنصر دقیق در شمارنده مطابقت داشت را چاپ کردیم. اما ما میتوانیم مقدار integer مربوط به هر عنصر را نیز با cast کردن آن به نوع اصولی آن چاپ کنیم:
1 2 3 4 5 6 7 8 |
static void Main(string[] args) { DaysInWeek monday = DaysInWeek.Monday; Console.WriteLine((int)monday); //prints out the 0 Console.ReadKey(); } |
اگر ترجیح دهیم، میتوانیم یک عدد integer را به عناصر شمارنده اختصاص دهیم:
1 2 3 4 5 6 7 8 9 |
public enum DaysInWeek { Monday=1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } |
اگر همچین کاری را انجام دهیم، Monday مقدار 1 و بقیه عناصر یک عدد افزایش پیدا خواهند کرد (Tuesday=2, Wednesday=3…). اما ما میتوانیم به هریک از عناصر، یک مقدار تصادفی نیز تخصیص دهیم:
1 2 3 4 5 6 7 8 9 10 |
public enum DaysInWeek { Monday=10, Tuesday=20, Wednesday=35, Thursday=48, Friday=74, Saturday=12, Sunday=154 } |
البته همیشه بهتر است اعداد integer با فاصله های مساوی را به عناصر اختصاص دهیم (1, 2, 3… or 10, 20, 30…).
انتخاب نوع اصولی در شمارنده ها
زمانیکه یک شمارنده را تعریف میکنیم، کامپایلر به طور پیشفرض اعداد integer را به تمام عناصر تخصیص میدهد. اما ما میتوانیم آن را تغییر دهیم. ما میتوانیم نوع متفاوتی را درست بعد از نام شمارنده اعمال کنیم:
1 2 3 4 5 6 7 8 9 10 |
public enum DaysInWeek: short { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } |
با این کار، ما در مصرف حافظه صرفه جویی میکنیم، زیرا نوع int حافظه بیشتری را نسبت به نوع short اشغال میکند و ما در این مثالمان، ظرفیت بیشتر از نوع داده ای short را نیاز نداریم.
نتیجه گیری
در این مقاله ما یاد گرفتیم که:
- شمارنده چیست و نحوه ایجاد آن به چه صورت است
- چطور با مقادیر کلمات در شمارنده ها کار کنیم
در مقاله بعدی، ما در مورد وراثت در #C صحبت میکنیم.