سه‌شنبه ۱ آذر ۱۳٩٠ :: ۱٢:۱٠ ‎ق.ظ ::  نويسنده : دوست شما
 

ب ا س ل ا م

در این پست دو مبحث زیر رو بررسی میکنیم :

 

ساختارها

و

داده های نوع جدید(شمارشی)
 
 
 
جهت دیدن توضیحات به ادامه مطلب بروید

بنام خداوند بخشنده مهربان

 

ساختارها :

همانگونه که در پست های پیش دیدیم کلاس ها روشی رو برای کپسوله کردن اطلاعات فراهم میاورند تنها چیزی که از کلاس ها باقیمونده وراثت و دیگری اینه که کلاس ها از heap برای ذخیره داده هاشون استفاده میکنند و این به این معناست فضای شما بهینه خواهد بود.(وراثت رو در پست هفتم بطور کامل بررسی خواهیم کرد)

ساختارها در اکثر موراد کلاس هائی هستند که قابلیت انعطاف پذیری کمتری دارند .ساختارها از لحاظ بنیادی با کلاس ها یکی هستند اما بیشتر برای مواردی طراحی شده اند که شما میخواهید داده هائی را با یکدیگر گروه بندی کنید بطور کلی ساختارها در موارد زیر با کلاس ها تفاوت دارند :

1- ساختار ها نوع مقداری هستند نه نوع مرجع.این بدان معناست که آن ها یا به صورت درون خطی (اگر قسمتی از شی ء دیگری هستند که روی heap ذخیره شده اند) و یا در پشته ذخیره شده اند و محدودیت های طول عمر یکسانی با انواع داده ای ساده دارند.

2-ساختارها از وراثت پشتیبانی نمیکنند.

3-تفاوتهائی در روش کار کردن سازنده ها در ساختارها وجود دارد.شما میبایست در ساختارتون یا از سازنده پیش فرض بدون پارامتر که سیستم میسازه (و نه خودتون) استفاده کنید و یا باید سازنده ای با مقدار دهی به همه فیلدها ایجاد کنید

نکته:توجه داشته باشید به دلیل اینکه ساختارها از نوع مقداری هستند , عملگر " new " در مورد آنها مانند کلاس ها و دیگر انواع مرجع ها کار نمیکند.به جای اختصاص مکان روی "heap" عملگر "new" تنها سازنده مناسب را بر اساس پارامترهای ارسال شده به آن فراخوانی کرده وتمام فیلدها را مقدار دهی میکند.

در شکل زیر روش ساختن یک ساختار را میبینیم:

همانطور که میبینید از سازنده پیش فرض (که نمیبینیمش) و همینطور به جای کلمه "class" از "struct" استفاده شده است.

در شکل زیر نحوه استفاده از اعضای این استراکت یا ساختار رو شاهد خواهیم بود:

حالا اگر شما بیائید به غیر از "P1" که در شکل بالا مببینید چند تا شی دیگه درست کنید مثلا "P2,P3,P4"و بعد این ساختار ها رو به هم اختصاص بدید یعنی بنویسید :

Person P3 = P1 در اصل شما یک کپی از P1 رو با مقادیرش به نام P3 ایجاد کردید بعد اگه P1 رو تغیر بدید P3 بدون تغییر باقی میمونه چون کپی کردید اما اگر "Person"شما به جای ساختار یک کلاس باشه هنگامی که همینکارو انجام بدید یعنی P1 رو برابر P3 کنید در اصل یک اشاره گر به P3 خواهید داشت و این بدان معناست که اگر بعد P1 رو تغییر بدید P3 رو تغییر بدید P1 شما هم تغییر میکنه که این به خاطر "heap بودن کلاس هاست.آخرین مطلب در مورد ساختار ها اینه که ساختار ها برای وراثت طراحی نشده اند یعنی نمیتوان آن ها را از یک ساختار مشتق کرد.برای تمرین آنچه در مورد ساختار ها گفته شد پروژه آموزشی شماره 13 رو ببینید.

یه مورد هم بگم پروژه های اموزشی فقط برای دیدن و اجرا نیست بلکه هدف اینه که شما موازی با پروژه اموزشی یه پروژه جدید باز کنید و کد نویسی کنید و اونرو خط به خط تفسیر و اجرا کنید تا درک عمیق تری از مطالب داشته باشید.

 

داده های نوع جدید (شمارشی)

یک داده نوع جدید یا شمارشی یک نوع صحیح است که توسط کاربر تعریف میشود.هنگامی که یک داده شمارشی را تعریف میکنید , مجموعه ای از مقادیر قابل قبول را مشخص میکنید که می توانند نمونه های آن داده شمارشی را در بر گیرند.همچنین می توانید برای مقادیر نام هائی انتخاب کنید که برای کاربر راحت باشند.اگر در جائی از کد , سعی کنید به یک نمونه از یک داده شمارشی مقداری غیر قابل قبول بدهید کامپایلر اعلام خطا خواهد کرد.این مفهوم شاید برای وی بی کارها (برنامه نویسان ویژوال بیسیک) تازگی داشته باشد.زبان سی پلاس نیز از این نوع داده ها (ای نام) ها پشتیبانی میکنداما داده های شمارشی در سی شارپ بسیار قوی تر از سی پلاس میباشد.

ایجاد یک داده شمارشی میتواند در زمان شما صرفه جوئی کرده و مشکلات شما را کاهش دهد استفاده از داده های شمارشی به جای اعداد صحیح حداقل دارای 3 مزیت زیر است:

1-همان طور که ذکر شد داده های شمارشی قابلیت نگهداری کد شما را بالا میبرند.به این صورت که به شما کمک میکنند تا مطمئن باشید که متغیر های شما تنها مقادیر مجاز و درست را دریافت می کنند.

2-داده ای شمارشی با ایجاد امکان برای ارجاع به مقادیر صحیح توسط نام های توصیفی به جای اعداد مبهم کد شما را مرتب تر جلوه می دهند.

3-تایپ برنامه راساده تر میکنند.هنگامی که میخواهید به یک نمونه از یک نوع شمارشی مقداری بدهید محیط توسعه یکپارچه دات نت لیستی از مقادیر قابل قبول را به شما ارائه میدهد تا زحمت تایپ و به خاطر نگه داشتن گزینه های موجود از دوش شما برداشته شود.

بطور مثال در 3شکل زیر ما سه نمونه داده شمارشی را تعریف خواهیم نمود:

حال ببینیم در برنامه چگونه از این 3 نمونه بهره ببریم:

فرض کنید کلاس پرسون رو که در پست های قبل ایجاد کردیم رو دوباره میخوایم ایجاد کنیم ولی به مجموع فیلد ها دو فیلد از نوع شمارشی اضافه کنیم .کد زیر رو داریم:

سازنده های کلاس رو هم به شکل زیر تعریف میکنیم:

 حالا در برنامه اصلی به این شکل به داده های جدیدمون دسترسی داریم:

 قدرت واقعی داده های شمارشی در سی شارپ در این است که به عنوان ساختاری نمونه سازی میشوند که از کلاس پایه (System.Enum)مشتق شده اند یعنی امکان فراخوانی متد ها در آن ها برای انجام بعضی کارهای مفید وجود دارد.توجه داشته باشید که به دلیل روشی که چارچوب دات نت در آن پیاده سازی شده است رفتار کردن با داده های شمارشی به عنوان ساختار تاثیر بدی در بازدهی نخواهد داشت.هنگامی که کد شما کامپایل شده باشد با داده های شمارشی همانند انواع داده ای اولیه مثل "اینت" و "فلوت" برخورد میشود.

خسته نباشید.در پست بعدی نحوه کار با پروپرتی و استک ها را بررسی خواهیم نمود.

فایل های اموزشی این پست:

پروژه آموزشی شماره 13

پروژه آموزشی شماره 14

پی دی اف آموزشی این پست

 



     
000100100001
دوست شما


مطالب وبلاگ
پيوندها
امکانات جانبی
RSS Feed

*** We Say GOD Today ***

"

*************************

***Pnu121 In Google***

*************************

-------------------------