شمارش (Enumeration)
Enumeration یا شمارش راهی برای تعریف دادههایی است که میتوانند مقادیر محدودی که شما از قبل تعریف کردهاید را بپذیرند. به عنوان مثال شما میخواهید یک متغیر تعریف کنید که فقط مقادیر جهت (جغرافیایی) مانند east، west، north و south را در خود ذخیره کند. ابتدا یک enumeration تعریف میکنید و برای آن یک اسم انتخاب کرده و بعد از آن تمام مقادیر ممکن که میتوانند در داخل بدنه آن قرار بگیرند تعریف میکنید. به نحوه تعریف یک enumeration توجه کنید:
enum enumName { value1, value2, value3, . . . valueN }
ابتدا کلمه کلیدی enum و سپس نام آن را به کار میبریم. در سی شارپ برای نامگذاری enumeration از روش پاسکال استفاده کنید. در بدنه enum مقادیری وجود دارند که برای هر کدام یک نام در نظر گرفته شده است. به یک مثال توجه کنید :
enum Direction { North, East, South, West }
در حالت پیشفرض مقادیری که یک enumeration میتواند ذخیره کند از نوع int هستند. به عنوان مثال مقدار پیشفرض north صفر و مقدار بقیه مقادیر یک واحد بیشتر از مقدار قبلی خودشان است. بنابراین مقدار east برابر 1، مقدار south برابر 2 و مقدار west برابر 3 است. میتوانید این مقادیر پیشفرض را به دلخواه تغییر دهید، مانند:
enum Direction { North = 3, East = 5, South = 7, West = 9 }
اگر به عنوان مثال هیچ مقداری به یک عنصر اختصاص ندهید آن عنصر به صورت خودکار مقدار می کیرد.
enum Direction { North = 3, East = 5, South, West }
در مثال بالا مشاهده میکنید که ما هیچ مقداری به south در نظر نگرفتهایم بنابر این به صورت خودکار یک واحد بیشتر از east یعنی 6 و به west یک واحد بیشتر از south یعنی 7 اختصاص داده میشود. همچنین میتوان مقادیر یکسانی برای عناصر enumeration در نظر گرفت. مثال :
enum Direction { North = 3, East, South = North, West }
میتوانید مقادیر بالا را حدس بزنید؟ مقادیر north، east، south، west به ترتیب 3، 4، 3، 4 است. وقتی مقدار 3 را به north میدهیم مقدار east برابر 4 میشود. سپس وقتی مقدار southرا برابر 3 قرار دهیم به صورت اتوماتیک مقدار west برابر 4 میشود. اگر نمیخواهید که مقادیر آیتمهای enumeration شما پیشفرض (از نوع int) باشد میتوانید از نوع مثلاً byte به عنوان نوع دادهای آیتمهای آن اسفاده کنید.
enum Direction : byte { North, East, South, West }
نوع دادهای byte فقط شامل مقادیر بین 0 تا 255 میشود بنابر این تعداد مقادیر که شما میتوانید به enumeration اضافه کنید محدود میباشد. به نحوه استفاده از enumeration در یک برنامه سی شارپ توجه کنید.
1: using System; 2: 3: enum Direction 4: { 5: North = 1, 6: East, 7: South, 8: West 9: } 10: 11: public class Program 12: { 13: public static void Main() 14: { 15: Direction myDirection; 16: 17: myDirection = Direction.North; 18: 19: Console.WriteLine("Direction: {0}", myDirection.ToString()); 20: } 21: }
Direction: North
ابتدا enumeration را در خطوط 9-3 تعریف میکنیم. توجه کنید که enumeration را خارج از کلاس قرار دادهایم. این کار باعث میشود که enumeration در سراسر برنامه در دسترس باشد. میتوان enumeration را در داخل کلاس هم تعریف کرد ولی در این صورت فقط در داخل کلاس قابل دسترس است.
class Program { enum Direction { //Code omitted } static void Main(string[] args) { //Code omitted } }
برنامه را ادامه میدهیم. در داخل بدنه enumeration نام چهار جهت جغرافیایی وجود دارد که هر یک از آنها با 1 تا 4 مقدار دهی شدهاند. در خط 15 یک متغیر تعریف شده است که مقدار یک جهت را در خود ذخیره میکند. نحوه تعریف آن به صورت زیر است :
enumType variableName;
در اینجا enumType نوع داده شمارشی (مثلاً Direction یا مسیر) میباشد و variableName نیز نامی است که برای آن انتخاب کردهایم که در مثال قبل myDirection است. سپس یک مقدار به متغیر myDirection اختصاص میدهیم (خط 17). برای اختصاص یک مقدار به صورت زیر عمل میکنیم :
variable = enumType.value;
ابتدا نوع Enumeration سپس علامت نقطه و بعد مقدار آن (مثلاً North) را مینویسیم. میتوان یک متغیر را فوراً، به روش زیر مقدار دهی کرد :
Direction myDirection = Direction.North;
حال در خط 1۹ با استفاده از Console.WriteLine() مقدار myDirection را چاپ میکنیم. توجه کنید که با استفاده از متد ToString() مقدار عددی myDirection را به رشته، جهت چاپ تبدیل میکنیم.
تصور کنید که اگر enumeration نبود شما مجبور بودید که به جای کلمات اعداد را حفظ کنید چون مقادیر enumeration در واقع اعدادی هستند که با نام مستعار توسط شما یا هر کس دیگر تعریف میشوند. متغیرهای شمارشی میتوانند به انواع دیگری مانند int یا string تبدیل شوند. همچنین یک مقدار رشتهای میتواند به نوع شمارشی معادلش تبدیل شود.
سلام وقتتون بخیر دلیل قرار دادن :{0} هنگام چاپ برنامه چیست ؟
سلام، مرسی
بحث جانگهدار لینک زیر رو بخونید متوجه میشین
http://www.w3-farsi.com/
آقای ابراهیمی. من چندساله تو هنرستان ودانشگاه برنامه نوبسی و برنامه سازی درس میدم انصافا روش آموزش شما بی نظیره. بسیار ممنون ✌
فکر کنم دوست عزیزمون شوخی کردن این مبلغ واقعا برای این همه زحمت شما ناچیزه
مرسی، نظر لطفتونه
سایتتون بی نظیره
من نزدیک به 7 سال پیش تا حدودی برنامه نویسی کار کردم و بنا به شرایطی که پیش اومد نتونستم ادامه بدم. الان نزدیک به یکماهه که دوباره مشتاق به یادگیری شدم و خیلی اتفاقی با سایت شما آشنا شدم. خیلی عالیه و واقعن آموزشتون کامل و بی نقصه.
وظیفه خودم دونستم که تشکر کنم و خسته نباشید بگم خدمتتون و آرزوی بهترین ها رو براتون دارم …
بسیار ممنون از لطفتون، موفق و موید باشین
جناب آقای ابراهیمی عزیز از زحمات جنابعالی در راه اندازی چنین سایت پر محتوا و جامع کمال تشکر و سپاسگزاری رو دارم.بنده تمام زبانهایی رو که یاد گرفتم از دو سایت مرجع w3schools و TutorialsPoint بوده ولی در مورد خصوصا #C باید بگم که مطالب این سایت از وبسایت TutorialsPoint ساده تر و در عین سادگی کاملتر بوده بنابراین بنده سایت شما رو انتخاب کردم و از این انتخابم بسیار راضی ام.
ضمنا دوست عزیزی که فرموده بودند شما پولکی هستید و مطالب سایت w3schools رایگانه باید خدمتشون عرض کنم که اشتباه میکنند.فکر کنم ایشون از درآمد تبلیغاتی سایت w3schools اطلاع ندارند.البته تبلیغات سایت رو شاید شما ندیدید چون تبلیغات برای اغلب کسانی که از ایران به سایت مراجعه میکنند به خاطر فیلترینگ ایران نمایش داده نمیشه فقط کافیه یک بار با VPN متصل بشید تا تبلیغات حتی فروشگاه های اینترنتی ایرانی رو در گوشه و کنار سایت مشاهده کنید.
سال پیش بنده ایمیلی برای Kai Jim Refsnes مدیر شرکت Refsnes Data که مالک وب سایت w3schools هست فرستادم و درخواست و اجازه ترجمه و راه اندازی این وبسایت رو به زبان فارسی کردم.جوابی که ایشون به من دادند موید گفته های بنده است.
در این ایمیل ایشون به درآمد تبلیغاتی سایت اشاره کردن و از بنده خواستند که این کارو انجام ندم.
Hi, Reza
I am sorry, but we do not allow any translation of our content at this time. Please, don’t copy or translate any of our content.
Any copy, reproduction, redistribution, or translation of W3Schools content is expressly prohibited by copyright laws.
We cannot allow our content to be published under a different name.
Our only income is ad-revenue, and the only way we can sell ads is if people visit our site.
This is a policy we have decided on. We discuss it a lot and perhaps we will change our minds in the future. I will keep your e-mail and contact you if we decide to change our policy.
I am sorry that I don’t have a more positive response for you; I hope you understand and respect our position.
On Mon, Nov 24, 2014 at 9:05 AM, Hege Refsnes
Best regards,
Hege Refsnes
http://www.w3schools.com
سلام آقای کلاته ، بسیار ممنون بابت این همه لطفتون، والا من که نمی دونم باید چکار کنم که برخی از دوستان راضی بشن؟ هزینه عضویت VIP که پول یه ((( پفکه)))!!!!
موفق و موید باشین.
با سلام خدمت مدیریت عزیز سایت
دوست عزیزی که می فرمائید اطلاعات رو رایگان قرار بدید تا مردم استفاده کنند…
بنده از مهر 93 از این سایت استفاده می کنم و واقعا از این موضوع ناراحت بودم که چنین سایت پر محتوایی که خیلی شیوا داره مطالب رو یاد دوست داران برنامه نویسی میده چرا رایگانه.. یقینا مبلغ ده هزار تومان چیزی از شما کم نمی کنه ولی با حجم بالای کاربران با همین مبلغ اندک کمک بزرگتری به مدیریت سایت میشه
حداقل باعث روحیه گرفتن و تشویق شدن میشه که الانم میبینیم که مطالب داره به طور مداوم به روز میشه و مدیریت داره فعالیت میکنه
من نه آشنای مدیریم نه یک اکانت دیگه که مدیر خودش بسازه بیاد نظر بده .. کلاه خودمو قاضی کردم شما که دنبال مطالب مفید و مفتی میگردی به خودتون احترام و ارزش نمی گذارید و این حرف توهین به خودتونه …
واقعا از زحمات مدیریت سایت تشکر بی پایان دارم .. داداش فوق العاده داری کار میکنی امیدوارم ادامه بدی همین طور و بهترین باشی…
مرسی آقای یونس ابراهیمی
سلام لطفا جوابم رو بدید …
اسم سایت تون رو عوض کنید چون فکر کنم اسم تون رو از W3SCHOOL…
گرفتید ولی اصلا در حدش نیستید …یکی از دلایل اینه که w3schoolرایگانه ولی شما پولکی هستید…
بزارید مردم از اطلاعات شما استفاده کنن …
بی جنبه ها
سلام ؛ مجانی بودن یک سایت دلیل برتری نسبت به سایت های دیگه نیست . در سایت w3schools چندین زبان و تکنولوژی تحت وب آموزش داده میشه و به همین دلیل هست که تعداد بازدید کننده های آن زیاد هست .همچنین تعداد نویسنده ها ان مطمئنا 1 نفر نیست. این سایت صرفا به آموزش زبان برنامه نویسی سی شارپ می پردازه و خارج از ان فعالیتی نداره .
مبلغ VIP سایت 10 هزار تومن هست . که با پرداخت آن نزدیک به 600 مطلب آموزشی رو یاد میگیرد که در هیچ کلاس یا کتاب آموزشی شما این حجم اطلاعات رو بهتون یاد نمیدن . تقریبا اگر مشکلی پیش نیاد مطالب سایت هر روز بروزرسانی میشه .
در ضمن خیلی از افراد هستند که الان دارن از مطالب سایت استفاده می کنند . می تونید نظرات اونها را مطالعه کنید . ممکنه بعدا مطالب سایت رو آزاد کنم که تمامی افراد ازش استفاده کنن ولی فعلا تصمیمی در این باره ندارم.
به هر حال متشکرم از نظرتون