تفاوت میان کلمات کلیدی Const, ReadOnly و Static ReadOnly

دوشنبه 7 مهر 1393

معمولا درک تفاوت این کلمات کلیدی گیج کننده هستند،در این مقاله سعی داریم تا به توضیح هر کدام بپردازیم

در اینجا من یک کلاس به نام Variables ایجاد کردم و هر سه نوع از متغیر را تعریف کردم

اجازه بدهید با const  شروع کنیم.

Const:

Const چیزی نیست جز یک  متغیر ثابت("constant")،متغیری که مقدار آن در زمان کامپایل ثابت است.و مقدار دهی به آن اجباری است.به طور پیش فرض یک static ،Const است و ما نمی توانیم مقدار ان را در کل برنامه تغییر دهیم.

 

در اینجا سعی کردم تا به const مقدار ندهم که با error،فیلد const باید مقدار دهی شود مواجه شدم.
("A const field requires a value to be provided").
خوب پس من در اینجا به آن مقدار می دهم و سعی می کنم بعدا در کلاس مقدارش را تغییر دهم.

در اینجا من به طور پیش فرض constructor static ،یک  constructor همراه با parameter ورودی و یک متد ساده ایجاد کردم.
در هرکدام از انها سعی کردم تا مقدار متغیر را تغییر دهم اما چون قبلا به ان مقدار دادم قادر به تغییر ان نیستم و همان طور که در تصویر می بینید با error،compile time مواجه می شوم.
ReadOnly:
متغیری است که می توان  در زمان اجرا به ان مقدار داد و یا مقدارش را تغییر داد اما فقط در non-static constructor  میتوان این کار را کرد و انجام کارهای فوق حتی در یک متد امکان ندارد.
ببینید چه اتقاقی می افتد:

همان طور که دیدید من سعی کردم تا مقدار در یک static constructor مقدار متغیر را تغییر دهم که با error بالا مواجه شدم حالا بگذارید ببینیم در یک متد چه اتفاقی رخ می دهد:

در اینجا نیز با این error که شما فقط می توانید مقدار دهی را از طریق متغیر یا constructor انجام دهید مواجه شدیم.
حالا بگذارید مقدار را در constructor پیش فرض تغییر دهیم.

می بینید که پروژه بدون ایجاد خطا Build شد حالا بگذارید ببینیم در زمان اجرا با خطایی مواجه می شویم یا خیر.

 

همان طور که می بینید هیچ نوع خطا در زمان اجرا وجود ندارد و مقدار به متغیر ReadOnly منصوب شد.
اما نه هنوز یک گیر وجود دارد.
حالا که مقدلر به متغیر منصوب شد می توان دوباره تغییرش داد؟؟؟؟
بگذارید امتحان کنیم:

 

در اینجا من یک constructor با پارامتر و یک object جدید تعریف کردم و مقدار "Hello Frend'z  را  پاس دادم خوب موقع Build پروژه که مشکلی پیش نیامد بگذارید ببینیم در زمان اجرا چه اتفاقی می افتد:

 

دیدید دوستان با هیچ error ی مواجه نشدیم پس مقدار متغیر درون  constructor را می توان بارها و بارها  تغییر داد.
StaticReadOnly:
یک متغیر از نوع StaticReadOnly در زمان اجرا و یا در زمان compile مقدار دهی می شود و در زمان اجرا قابل تغییر است.
اما این مقدار فقط در یک static constructor قابل تغییر است،و بعدا نیز قابل تغییر نیست.متغیر از این نوع فقط یک بار در زمان اجرا قابل تغییر است.
بیایید تا به طور عملی به ان بپردازیم:

می بینید که دو متغیر داریم یکی دارای مقدار و دیگری فاقد مقدار و  همچنین یک static constructor   داریم.همان طور که مشاهده می کنید  در static constructor متغیری که مقدار دهی نشده بود ،مقداردهی شده ومقدر متغیر مقدار دهی شده تغییر کرده است و با هیچ خطای کامپایلی مواجه نشدیم در ادامه سعی دارم تا مقدار متغیر را دوباره تغییر دهم.

همان گونه که می بینید من یک constructor پیش فرض با پارامتر ایجاد کردم و سعی کردم تا مقدار متغیر را  دوباره تغییر دهم اما در هر صورت دچار خطای compile می شوم.

 

 

جعفری

نویسنده 22 مقاله در برنامه نویسان
  • C#.net
  • 4k بازدید
  • 10 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید