«Enum» یا «Enumeration» یکی از انواع داده خاص در زبان برنامه نویسی سی شارپ است. توسعهدهندگان با کمک این نوع میتوانند هر تعداد مقدار ثابت را در دستهای جمعآوری کنند. البته این دسته باید یک نام هم داشته باشد. با استفاده از Enum در سی شارپ، خوانایی کدها بیشتر شده و امکان بروز خطا هم کاهش پیدا میکند. نوع «Enumeration» را با نام نوع شمارشی هم میشناسند. وجود انواع داده در سی شارپ باعث شده که توان آن برای انجام محاسبات گوناگون افزایش پیدا کند. enum هم یکی از همین انواع داده است. شمارنده enum فقط میتواند مقادیر خود را روبهجلو پیمایش کند ولی امکان تغییر دادن ترتیب آنها را ندارد.

در این مطلب از مجله فرادرس نوع Enum در سی شارپ را بررسی کردهایم. این نوع یکی از انواع ویژه و کاربردی زبان سی شارپ است. به عنوان توسعهدهنده لازم است که بتوانیم به شکل خوبی با انواع داده در سی شارپ کار کنیم. در نتیجه هم خوانایی کدها افزایش پیدا میکند و هم از حافظه به صورت بهینهای استفاده کردهایم. در ضمن امکان روبهرو شدن با خطاهای زمان کامپایل هم کاهش پیدا میکند.
Enum در سی شارپ چیست؟
Enum نوع شمارشی است. یعنی اینکه به صورت پیشفرض، مقادیر درون متغیر را شمرده و به هر کدام عدد مشخصی را اختصاص میدهد. این نوع، توسط کلمه کلیدی enum تعریف میشود. enum گروهی از مقادیر ثابت را با یک نام مشخص در کنار هم جمع میکند. این کار باعث میشود کدها خواناتر شده و نگهداری آنها نیز راحتتر شود.
در کادر زیر، کدی را در ارتباط با تعریف نوع Enum، پیادهسازی کردهایم.
در کد بالا، تعریف متغیر سادهای از نوع Enum را مشاهده میکنید. به صورت پیشفرض، نوع Enum بر اساس نوع «Int» ساخته شده و شماره اولین مقدار هم با صفر شروع میشود.
نوع Enum زمانی مفید است که تعداد زیادی مقدار مرتبط با هم داشته باشیم. این متغیرها باید در زمان کامپایل مشخص شده باشند. یعنی اینکه بعدا، در زمان اجرای برنامه کم یا زیاد نشوند. استفاده از Enum خوانایی کدها را بالاتر برده و نگهداری دادهها را سادهتر میکند. همچنین احتمال خطا در برنامه کمتر شده و ساختار کدها هم بهتر میشود. نوع Enum را تقریبا میتوان شبیه جعبهای دانست که تمام ابزارهای مرتبط با هم را در آن نگهداری میکنیم.
تعریف نوع Enum در سی شارپ
در کدهای زیر، مثال سادهای را درباره نوع enum پیادهسازی کردهایم.
پارامتر WeekDays در کد بالا به عنوان متغیر «شمارشی» (Enumeration) یا همان نوع Enum شناخته میشود. این متغیر شامل فهرستی از مقادیر ثابت، مانند Saturday و Sunday و غیره است. موارد ذخیره شده در این متغیر فقط عدد نیستند. بلکه روزهای هفته هستند که میتوانیم به شکل معنادار در برنامه استفاده کنیم.

پیاده سازی Enum در سی شارپ همراه با مثال
بهترین روش برای درک مفاهیم اصلی برنامه نویسی، پیادهسازی آنها است. در نتیجه برای کمک به درک بهتر Enum در سی شارپ، مثالهای مختلفی را پیادهسازی کرده و توضیح دادهایم.
در کد بالا، متغیر enum را با نام TrafficLight تعریف کردهایم. مقادیر درون این متغیر برابر با Red و Yellow و Green هستند. در خط آخر هم مقدار TrafficLight.Red به متغیر light تخصیص داده شده است.
ساخت کلاس Enum در سی شارپ
Enum-ها در سی شارپ، کلاس نیستند. اما میتوانیم از کلاسها برای نگهداری متغیرهای Enum استفاده کنیم. با این کار، میتوانیم متدهای مفیدی هم به Enum اضافه کنیم.
Enum معمولی – بدون کلاس – به اندازه کلاس Enum سریع نیست. استفاده از کلاس Enum تواناییهای کاربردی برنامه نویسی شیءگرا مانند کپسوله سازی، وراثت و غیره را در اختیار توسعهدهندگان قرار میدهد. هر چقدر امکانات بیشتری داشته باشیم، خوانایی کدها هم بیشتر شده و نگهداری آنها سادهتر میشود.
مثالی درباره کلاس Enum
در کادر زیر، روش نوشتن Enum را در داخل کلاس نشان دادهایم. به این روش «C# Class Enum» هم گفته میشود.
در کد بالا کلاس Season را تعریف کردهایم. در این کلاس متغیر Value را به صورت کپسوله شده و از نوع enum ایجاد کردیم. این متغیر enum مقادیری با نام فصلهای مختلف را نگهداری میکند. از این مقادیر میتوان در داخل کلاس استفاده کرد.
در مثال زیر، روش سادهای را درباره استفاده از متغیر enum بررسی کردهایم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر در کنسول سی شارپ نمایش داده میشود.
Saturday: 1 Wednesday: 5
روش فرادرس برای آموزش سی شارپ چیست؟
فرادرس به عنوان تولید کننده آنلاین محتوای آموزشی، روشهای مختلفی را برای کمک به یادگیری زبانهای برنامه نویسی فراهم کرده است. از مطالب موجود در مجله گرفته تا فیلمهای آموزشی و میکروآموزشهای رایگان، همگی برای آموزش مسائل کوچک و بزرگ کاربرد دارند. زبان سی شارپ هم به عنوان یکی از پرکاربردترین زبانها متقاضیان فراوان و مخصوص به خود را دارد. بنابراین فرادرس با ارائه فیلمهای آموزشی با کیفیت و جامع، یادگیری سی شارپ را برای همه افراد آسان کرده است. این دورهها علاوه بر مباحث پایهای مانند سینتکس، موضوعات پیشرفتهای مانند برنامهنویسی شیءگرا و پروژههای عملی را هم پوشش میدهند.

«سی شارپ» (C#) به عنوان زبانی ساده، امن و انعطافپذیر شناخته میشود. زبان سی شارپ در حوزههای گوناگون مانند ساخت نرمافزارهای دسکتاپ، وب اپلیکیشنها، موبایل و بازیهای کامپیوتری کاربرد دارد. با توجه به نیاز روزافزون کشور به نیرو انسانی متخصص، فرادرس تلاش کرده است تا با کیفیتترین دورهها را از لحاظ علمی و روش تدریس تولید کند. تمام فیلمهای آموزشی فرادرس از رویکردی گامبهگام و مثالمحور پیروی میکنند. برای یادگیری #C کافی است به وبسایت فرادرس سر بزنید و دوره مناسب سطح خود را انتخاب کنید.
مشخص کردن مقادیر Enum
همیشه شماره اولین مقدار ثابت در Enum از 0 شروع میشود. شمارههای بقیه ثابتها هم به ترتیب یکی یکی زیاد میشوند. البته توسعهدهندگان در زمان تعریف این نوع متغیر میتوانند مقادیر مشخص و مورد نظر خود را به ثابتهای Enum اختصاص بدهند.
در مثال زیر، متغیر شمارنده enum را با مقادیر دلخواه خودمان تعریف کردهایم. در این کد، روش بدست آوردن مقدار و شماره هر عنصر را از متغیر enum بررسی کردهایم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر در کنسول سی شارپ نمایش داده میشود.
Status: NotFound Numeric Value: 404
استفاده از Enum همراه با عبارت های Switch
میتوانیم از متغیرهای enum در عبارتهای «Switch» هم استفاده کنیم. در واقع بهجای نوشتن مقادیر ثابت در عبارتهای case از ثابتهای enum استفاده میکنیم.
در کدهای زیر، روش استفاده از متغیر enum در عبارتهای switch را نشان دادهایم.
بعد از اجرای کدهای بالا، خروجی به شکل پیغام It’s Wednesday.
در کنسول سی شارپ نمایش داده میشود.

ترکیب چند مقدار مختلف با استفاده از فلگهای Enum
با استفاده از «عملگرهای بیتی» ( Bitwise Operators) و ویژگی [Flags] میتوانیم چندین مقدار Enum مختلف را با یکدیگر ترکیب کنیم. این مسئله به طور خاص در برنامههایی مفید است که باید در آنها مجوزها یا تنظیمات خاصی را مدیریت کنیم.
در مثال زیر، روش ترکیب چندین مقدار مختلف را با استفاده از فلگهای enum، بررسی کردهایم.
بعد از کامپایل شدن و اجرای کدهای بالا، خروجی به شکل زیر در کنسول سی شارپ نمایش داده میشود.
User Permissions: Read, Write You Have Write Permission? True You Have Execute Permission? False
تبدیل رشته یا اعداد صحیح به Enum
با تغییر دادن دادههایی از هر دو نوع استرینگ و عدد صحیح میتوانیم متغیرهای Enum را بدست بیاوریم. برای تبدیل کردن متغیری با نوع «رشته» (String) به Enum از متد Enum.Parse() استفاده میکنیم. اما برای تبدیل کردن متغیرهایی از نوع «اعداد صحیح» به Enum فقط کافی است که از کلمه enum استفاده کنیم. لازم به اشاره است که نوع استرینگ در برنامه نویسی، یکی از انواع داده بسیار پرکاربرد و مفید است. به عنوان توسعهدهنده لازم است که با این نوع و روشهای استفاده از آن آشنا باشیم. بنابراین در صورت نیاز به آشنایی و آموزش استفاده از استرینگ میتوانید، مطلب مربوط به آن را در مجله فرادرس مطالعه کنید.
در کادر زیر، مثالی را برای تبدیل داده از نوع رشته و عدد صحیح به نوع enum نوشتهایم.
در مثال بالا، به هر کدام از مقادیر موجود در متغیر UniqueKey شماره مجزایی اختصاص داده شده است.
بیتوجهی به شماره مقادیر درون متغیر Enum
نسبت به شماره پیشفرض مقادیر قرار گرفته در متغیر Enum بیتوجهی نکنید. این شماره همیشه از ۰ شروع میشود. اما شاید در برنامه خاصی لازم شود که از شمارههای دیگری استفاده کنیم. نکته بعدی این است که برای هر کدام از مقدارهای درون متغیر enum به اندازه یک واحد Int حافظه تخصیص داده میشود. بیتوجهی به این موارد ممکن است به مشکل بزرگی تبدیل شود.

در کادر پایین روش غلط نوشتن کد را نمایش دادهایم.
در کد بالا، به مقدار Saturday شماره ۰ اختصاص داده میشود. در حالی که اگر بخواهیم از شماره روزهای هفته استفاده کنیم، باید شماره Saturday برابر با ۱ باشد.
برای اختصاص دادن مقدار درست به روزهای هفته، دو روش مختلف وجود دارند. هم میتوانیم به صورت دستی به مقادیر درون متغیر enum شماره اختصاص دهیم و هم میتوانیم از روش زیر، استفاده کنیم.
متغیر Days در بالا از نوع enum تعریف شده است. به این متغیر مقداری اضافی به نام NullDay افزودهایم. شماره این مقدار را هم برابر با 0 قرار دادیم. در نتیجه بقیه روزهای هفته با شماره 1 شروع میشوند. این روش با قوانین مربوط به enum همخوانی دارد. زیرا به شکل پیشفرض مقادیر درون enum با شماره 0 شروع میشوند. شماره 1 هم به صورت خودکار به روز اول هفته اختصاص داده میشود.
جمعبندی
در این مطلب از مجله فرادرس با Enum در سی شارپ، آشنا شدیم. متغیر Enum مجموعهای از ثابتها است که با یکدیگر مرتبط هستند. نام این مجموعه، همان نام متغیر Enum است. به صورت پیشفرض برای هر کدام از مقدارهای درون متغیر Enum به اندازه یک واحد داده عدد صحیح یا int حافظه اختصاص داده میشود. استفاده از Enum، خوانایی و قابلیت نگهداری کدها را بیشتر میکند. البته به جای ثابتهای عددی باید از نامهای با معنی، استفاده کنیم. برای تعریف Enum به راحتی میتوانیم از سینتکس enum { enumeration list }; استفاده کنیم.
Enum-ها متغیرهایی با نوعدهی قوی هستند. بنابراین برای تبدیل نوع متغیر Enum به عدد و برعکس باید به شکل صریح این مطلب را در کدها بنویسید. شماره مقادیر درون متغیر Enum به صورت پیشفرض از صفر شروع میشوند. مگر اینکه توسعهدهنده به صورت دستی شماره دیگری به آنها اختصاص بدهد. نمیشود از محیط بیرون به متغیرهای Enum تعریف شده در کلاس یا «Struct» دسترسی داشت. توسعهدهندگان سی شارپ برای کسب مهارت و انجام پروژههای بزرگ باید با انواع داده در سی شارپ آشنا باشند. یکی از خاصترین این نوعها هم Enum است.
source