ممکن است تصور کنید که دو کلیدواژهی const و readonly تفاوتی باهم ندارند و هردو برای این استفاده میشوند تا مقدار یک نوع تعریف شده، نتواند بعدا تغییر یابد! اما این دو باهم تفاوت زیادی دارند!
در جدول زیر، تقاوت دو کلیدواژهی const و readonly آورده شده است:
const | readonly |
قابل استفاده برای فیلدها و متغیرهای محلی | تنها قابل استفاده برای فیلدها |
باید در هنگام تعریف مقداردهی شود | هم میتواند در هنگام تعریف مقدار دهی شود و هم داخل متدسازندهی کلاس (داخل متدهای دیگر نمیتوان مقداردهی کرد) |
حافظهی مموری به آن اختصاص نمییابد! چراکه مقدار آن در خود IL (زبان میانی) و پس از کامپایل جاسازی شده است. یا به عبارت دیگر میتوان گفت hard-coded است؛ یعنی اینکه داده در خود سورس کد نگهداری شده و از آن خوانده میشود. | حافظهی مموری پویا (داینامیک) به آن اختصاص داده میشود و همچنین در زمان ران تایم مقداردهی میشود. |
به صورت پیشفرض static است. | static نبوده و همانند سایر اعضا است و برای استاتیک کردن آن باید static را ابتدای آن اضافه کرد. |
مقدار آن در همهی کلاسها و آبجکتهای دیگر همواره یکسان است. | مقدار آن به دلیل اینکه میتواند در داخل متد سازنده مقداردهی شود، ممکن است متفاوت باشد. (البته در صورت استاتیک بودن یکسان خواهد بود) |
تنها میتوان از آن برای تعریف انواع داده اولیه (primitive) خود زبان سیشارپ از جمله string, int و … استفاده کرد. | قابل استفاده برای هرنوعی میباشد. |
از آن نمیتوان به عنوان پارامتر ref و out استفاده کرد. | از آن میتوان به عنوان پارامتر ref و out در بدنهی متدسازنده استفاده کرد. |
اگر فکر میکنید به مورد خاصی اشاره نشده است، آن را از طریق نظرات به اشترکا بگذارید.
نظرات ثبت شده بدون دیدگاه