نواع شمارشي enum در C#
انواع شمارشي در C#
درك
و فهم يك نوع شمارشي يا يك
enum
ساخت
يك نوع شمارشيجديد
چگونگي
استفاده از انواع شمارشي
آشنايي
با متدهاي مختلف موجود در
System.Enum
enmu فرم
خاصي از انواع مقداري (Value Type) است كه از System.Enum مشتق شده و امكان پيمايش
درون مجموعهاي مشخص را با استفاد از اعدادصحصيح براي ما فراهم مينمايد. با استفاده از
enum ميتوان
مجموعهاي از مقاديرثابت را تعريف
نمود كه اين مقادير ثابت با استفاده از يك عدد صحيح قابل دسترسيهستند.
استفاده
از enum در برنامهها باعث بالا
رفتن خوانايي برنامهميشود، چراكه
با استفاده از آنها ميتوان با مجموعهاي از اعداد صحيح ترتيبي (Sequential) ،
با عناويني تعريف شده، كار كرد. براي مثال، در اعلان يك
enum، مامجموعهاي از نامهاي مورد نظر را تعريف مينماييم و در برنامه ميتوانيم
از ايننامها بصورت
ترتيبي استفاده نماييم.
Enum به
هر يك از عناصر موجود در اين مجموعهعددي
را تخصيص ميدهد كه شروع اين عدد ميتواند توسط برنامهنويس نيز معين گردد. سپس با استفاده از نام عناصر موجود در enum و يا با استفاده از
اعدادي كه به هر يكاز اين عناصر
تخصيص داده شده، ميتوان
enum را
پيمايش نمود و به عناصر آن دسترسيداشت.
همانطور
كه گفته شد، enum يك نوع مقداري
(Value Type) است، از اينروارثبري در مورد
آن معنايي ندارد. مساوي قرار دادن دو
enum نيز،
مقادير يكي را درديگري كپي ميكند.
همانطور كه در اين درس، و در منابع ديگر، خواهيد يافت، دسترسي بهانواع شمارشي در
C# با
استفاده از دو كلمه enum و Enum امكان پذير است. در C# نوعشمارشي
enum از
نوع BCL خود يعني
Enum ارثبري
ميكند ! با استفاده از
enum يك
نوعشمارشي جديد توليد ميشود و با استفاده از Enum،
ميتوان به پيادهسازي متدهاياستاتيك انواع
شمارشي پرداخت.
ايجاد
يك نوع شمارشي
.Net Framework BCL حاويenum ها و مثالهاي متعددي از استفادة آنها ميباشد. براي مثال هرگاه كه
از MessageBox بر روي فرمي استفاده ميشود،
ميتوان از MessageBoxIcon كه يك نوعشمارشي است استفاده نمود.
علاوه
بر انواع شمارشي تعريف شده و موجود در
.Net Framework، زمانهايي نيز وجود
دارند كه ميخواهيم مجموعهاي از عناصر را تعريف كردهو از آنها استفاده نماييم. براي دسترسي به عناصري از نوع صحيح،
استفاده از enum باعث خوانا شدن برنامه
ميگردد.
نحوه
اعلان يك enum در حالت كلي بصورت زير
است :
كد: |
enum |
در
مثال 1-17 كه در زير ملاحظه ميكنيد، نحوهاعلان و استفاده از
enum مشخص
شده است.
مثال
1-17 : نحوه اعلان يك enum
كد: |
using
System; |
در
مثال 1-17 نمونهاي از اعلان يك
enum رامشاهده مينماييد. همانطور كه ديده ميشود،
اعلان يك نوع شمارشي با استفاده از كلمهكليدي enum صورت گرفته و
سپس به دنبال آن نام اين مجموعه مشخص ميشود. درونكروشههاي باز و بسته {
} نيز،
عناصر نوع شمارشي اعلان ميگردند.
نوعشمارشي توليد شده در اين مثال از نوع Volume است و در متد Main() از آن براي اعلان myVolume استفاده شده است. از
آنجائيكه enum يك نوع مقداري است، ميتوانيم
بطورمستقيم آنرا مقداردهي نماييم. پس از آنكه
متغير myVolume مقداردهي شد، ميتوانهمانند ساير انواع مقداري، مانند int،
از آن استفاده نمود. در حلقه
switch، متغير
myVolume با عناصر
enum مقايسه
ميشوند.
در
هربار استفاده از عناصرenum توليد شده، از
نام enum توليد شده، در اينجا Volume،
در ابتداي نام عنصر استفادهمينماييم (Volume.Medium)،
زيرا در صورتيكه در يك برنامه چندين
enum وجود
داشتهباشند كه داراي عناصري با نامهاي يكسان
باشند، در صورت عدم استفاده از نام
enum مورد
نظر قبل از عنصر، ابهام بوجود آمده و دچار مشكل ميشويم.
بطور
پيشفرض، به اولين عنصر تعريف شده در enum مقدار صفر تخصيص داده ميشود
كه اين مقدارتنها بعنوان
انديسي جهت دسترسي به اين عنصر در نظر گرفته ميشود. ساير عناصر enum نيز بطور صعودي مقدار ميگيرند
و به هر عنصر يك واحد افزوده ميشود. در مثال 1-17،عنصر Low داراي انديس صفر
بوده و ساير عناصر به ترتيب مقدار 1 و 2 خواهند داشت.
در C#،
براي موارد خاص ميتوان مقادير پيش فرض در نظر گرفته شده براي عناصر enum را تغيير داد. به مثال
زير توجه كنيد.
كد: |
enum
Months |
همنطور
كه مشاهده ميشود، در اعلان اول، ازمقدار
پيش فرض استفاده شده، كه در اين حالت
jan = 0، feb = 1،
mar
= 2 و apr = 3 خواهند بود. اما در
اعلان دوم، برنامهنويس بنا به نياز خود، تشخيص داده تا به هريك از عناصر
enum مقداري
دلخواه را نسبت دهد.
هر
چند به تمامي عناصر enum مقداري نسبت
داده ميشود ولي از اين مقدار نميتوان بطور مسقيم در تخصيص دهي مقداربه متغيري ديگر استفاده نمود. به مثال زير
توجه نماييد :
int x = Months.jan;// اين دستور نادرست است
int x = (int) Months.jan ; //صحيح
براي
استفاده ازمقدار تخصيص
داده شده به عناصر enum، بايد از
Casting استفاده نماييم. بدين معنا كهبايد نوع متغييري را كه ميخواهيم مقدار را به ان نسبت دهيم، بايد
مشخص شود. درمثال فوق (int) Months.jan معين ميكند كه مقدار
تخصيص داده شده به jan به متغييرينسبت داده ميشود كه از نوع int است و يا به عبارت صحيح تر، مقدار تخصيص
داده شدهبه عنصر enum،
در فرمت int به متغيير مورد نظر تخصيص داده ميشود.
در
ادامهمبحث، توجه شما را به مثالی دیگر درباره enum جلب می نمایم. توجه
نمایید که نکاتجدیدی نیز در
این مثال گنجانده شده اند.
مثال
2-17 : ساخت enum پایه وتخصیص دهی اعضای آن
كد: |
using
System; |
با توجه به مثال
2-17 با نحوه تغییرنوع پایه یک enum آشنا می شوید. همانطور
که ملاحظه می نمایید، نوع پایه این
enum به byte تغییر یافته است. این
امر بیان میدارئ که تنها مقادیری از نوع
byte قابل
تخصیصبه عناصر
enum هستند.
همانطور
که قبلا نیز اشاره شد، مقدار پیش فرض برایاولین عضو
enum یعنی Low برابر با صفر است. چون در این مثال مقدار Low را برابر بایک قرار داده ایم، از اینرو مقادیر دو عضو دیگر آن نیز بصورت Middle=2 و
High=3 تغییر خواهند یافت.
نکات
پیشرفته درباره enum
در
زبان C# هر نمونهاز enum فضایی معادل با
4 بایت از حافظه را اشغال می نمایند. این مطلب با استفادهاز کلمه کلیدی
sizeof قابل بررسی لسا. از اینرو از
enum میتوان
به عنوان یک ساختمانداده مناسب و
کارا یاد کرد.
نکته
بسیار مهم و جالب در مورد
enum در
زبان برنامهنویسی C# انست که، برای هر کلاس
enum موجود
در کد برنامه، مقادیر رشته ای تخصیصداده
شده به عناصر enum در یک اسمبلی و بصورت Metadata ذخیره می گردند، از
اینرودسترسی به این مقادیر رشته ای در کد میسر می
شود. همچنین می توان از متدهای مختلفمرتبط
با enum نیز استفاده نمود. به
مثال ساده زیر توجه نمایید :
كد: |
enum
Language |
مطالب مشابه :
ویژوال بیسیک در یک نگاه
پاسکال،ویژوال بیسیک،دلفی، سی، شارپ، Pascal ،vb6،delphi،C#،C برنامه نویسی سوکت در سی شارپ با
فیلتر کردن DataGridView با LinQ
آموزش برنامه نویسی VB6 , Delphi. Pascal , CPP , C برنامه نویسی سوکت در سی شارپ با استفاده از TCP/IP .
آشنايي با Namespace در زبان C#
آموزش برنامه نویسی VB6 , Delphi. Pascal , CPP , C برنامه نویسی سوکت در سی شارپ با استفاده از TCP/IP .
رخدادها و delegate ها در C#
آموزش برنامه نویسی VB6 , Delphi. Pascal , CPP , C برنامه نویسی سوکت در سی شارپ با استفاده از TCP/IP .
اجرای دستورات Linq از بیس string
آموزش برنامه نویسی VB6 , Delphi. Pascal , CPP , C برنامه نویسی سوکت در سی شارپ با استفاده از TCP/IP .
چاپ متن توسط شی پرينتر vb6
آموزش برنامه نویسی چاپ متن توسط شی پرينتر vb6 برنامه نویسی سوکت در سی شارپ با استفاده از
نواع شمارشي enum در C#
پاسکال،ویژوال بیسیک،دلفی، سی، شارپ، Pascal ،vb6،delphi،C#،C برنامه نویسی سوکت در سی شارپ با
آشنايي با كلاسها در C#
آموزش برنامه نویسی VB6 , Delphi. Pascal , CPP , C برنامه نویسی سوکت در سی شارپ با استفاده از TCP/IP .
برچسب :
سوکت نویسی در vb6