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

با سلام.در پست های گذشته برنامه های کوچکی رو نوشته واجرا نمودیم.در پست سوم نیز به مبحث کلاس ها وسازنده های کلاس پرداختیم.دراین پست به فیلدهاومتدهای استاتیک و نحوه دسترسی به اونها(پروژه آموزشی شماره10و11)وهمچنین ثابتهاومتغیر های فقط خواندنی و فرق ایندو (پروژه اموزشی شماره 12) خواهیم پرداخت.

برای مطالعه بخش های یاد شده به ادامه مطلب مراجعه بفرمائید.


به نام خدا
 
در زبان سی شارپ تمامی متد ها بایستی داخل یک کلاس تعریف شوند.اگر چه در صورتی که متد و یا فیلدی را به صورت استاتیک تعریف کنید میتوانید با استفاده از نام کلاس و بدون ساختن شی به آن فیلد یا متد دسترسی داشته باشید.زمانی که متد استاتیکی تعریف میکنید این متد دیگر به هیچ یک از فیلدهای نمونه تعریف شده در کلاس دسترسی ندارد.این متد تنها میتواند از فیلد های استاتیک استفاده نماید.به علاوه این متد تنها میتواند متد هائی را فراخوانی کند که استاتیک باشند در صورتی که برای متد های غیر استاتیک یا نمونه میبایست ابتدا یک شی برای فراخوانی انها ایجاد کنیم.حالا این به چه دردی میخوره؟
 
فرض کنید کلاسی دارید که یک سازنده پیش فرض در خودش داره و شما بی نهایت شی از این کلاس ساختید به نظرتون اگه بخواهید دقیقا بدونید که چند تا شی از این کلاس ساختید چکار باید بکنیم؟اگر بخواهیم داخل بدنه کلاس یه متد شمارش تعریف کنیم که هر سری باید بهش یه مقدار دستی بدیم که منطقی نیست چون ممکنه یادمون بره اخرین عدد چی بوده از سوی دیگر ممکنه فقط ما از این کلاس شی درست نکنیم و کاربران دیگری هم باشند که به تعداد نا مشخص از این کلاس شی ساختند و هر کدوم یک عددی رو دارند که ممکنه درست هم نباشه...در این جاست که ما یک متد استاتیک تعریف میکنیم که با هر بار ساخته شدن یک شی از کلاس و بدنبال اون ایجاد سازنده پیش فرض یک واحد به واحد قبلی اضافه میکنه و دیگه نیاز هم نیست از طریق یک شی خاص به اون دسترسی داشته باشیم میتونیم خیلی راحت با تایپ نام کلاس نقطه نام متد استاتیک مقدار رو شاهد باشیم.اگر کامل این موضوع رو درک نکردید اصلا نگران نباشید دو تا پروژه خوب داریم که در اونها نیز کاملا این مطلب توضیح داده شده ولی برای مثال چند شکل زیر رو دنبال کنید...
 
دو متد زیر در بدنه کلاس " گلوبال " از نوع استاتیک تعریف شده اند:
 
 
حال ببینیم نحوه دسترسی به این دو متد در برنامه اصلی چگونه است:
 
 
همونطور که دیدیم پس از تایپ نام کلاس "گلوبال" و "." و"نام متد" به این متد ها دسترسی داشتیم بدون اینکه شیءای بسازیم...
 
علاوه بر متد و فیلد های استاتیک شما میتوانید حتی کلاس یا سازنده یک کلاس رو به صورت استاتیک تعریف کنید.در صورتی که کلاسی رو به صورت استاتیک تعریف نمائید تمامی فیلد ها و متد های آن نیز و حتی سازنده آن بایستی بصورت استاتیک تعریف گردند در این صورت شما نمیتوانید با استفاده از کلمه "new" یک شی از این کلاس بسازید و اصلا منطقی هم نیست چرا که از این کلاس ها بیشتر به منظور ذخیره سازی فیلد ها و متد های سودمند استفاده میگردد و نه ساخت شی.
 
حال فرض کنید یک کلاس را به صورت غیر استاتیک تعریف نموده اید ولی سازنده کلاس را بصورت استاتیک باید بدانید از طریق این سازنده یا متد تنها به فیلدهای استاتیک دسترسی خواهید داشت .شکل های زیر را ببینید:
 
 
در دو شکل بالا ما در کلاس "پرسون" دو فیلد غیر استاتیک و یک فیلد استاتیک ایجاد کردیم و همچنین سازنده رو هم از نوع استاتیک تعریف کردیم به علاوه یک متد هم از نوع استاتیک تعریف کردیم که فقط به تک فیلد استاتیک کلاس دسترسی دارد.توجه کنید همه این کد ها را در بدنه کلاس "پرسون"تعریف نمودیم.حال به برنامه اصلی میرویم و در شکل زیر نحوه دسترسی به متد استاتیک را مشاهده خواهیم نمود:
 
همانطور که میبینید بدون ساخت شی یا آبجکت به فیلد دسترسی داریم.
 
یه بخش کوچک دیگه هم بگیم تمومه... بخش دوم معرفی ثابتها و متغیر های فقط خواندنی و فرقشون هست.خیلی خیلی سادست:
 
ثابتها دقیقا مثل متغیر های معمولیند با دو تفاوت کوچک
1-مقدارشون رو در طول برنامه نمیشه عوض کرد
2-همون اول کار که تعریف میشن باید مقدار دهیشون کنیم
 
متغیر های فقط خواندنی دیگه چیند؟
متغیر های فقط خواندنی هم همون متغیر های معمولیند که فقط میتونیم یه جا تو برنامه بهشون مقدار بدیم و بعدا فقط ببینیمشون و نمیتونیم تغییرشون بدیم.این که شد همون ثابت ! نه دوتا فرق بین ثابت ها و متغیر های فقط خواندنی هست و اونا :
1-میشه همون ابتدای برنامه مقدار دهیشون نکرد
2-مقدار متغیر های فقط خواندنی رو میشه به ثابتها اختصاص داد ولی برعکسش نه
 
دو شکل زیر رو ببینید :
 
خسته نباشید.در پست پنجم به ساختار ها و داده های نوع جدید خواهیم پرداخت...
 
فایل های آموزشی این پست :
 
 
 
 


     
000100100001
دوست شما


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

*** We Say GOD Today ***

"

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

***Pnu121 In Google***

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

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