تفاوت بین const و static readonly در سی شارپ
لطفا بگید تفاوت بین متغیرهای const و static readonly در سی شارپ چیه ؟
پاسخ هوش مصنوعی
در C#، const و static readonly هر دو برای تعریف مقادیر ثابت استفاده می شوند، اما تفاوت های مهمی بین آنها وجود دارد:
- تعریف و مقداردهی:
constدر زمان کامپایل مقداردهی می شود و نمی تواند در زمان اجرا تغییر یابد. در حالی کهstatic readonlyمی تواند در زمان اجرا و فقط در سازنده یا اعلام اولیه مقداردهی شود. - نوع:
constفقط می تواند برای انواع داده های ساده (primitive types) و رشته ها استفاده شود. اماstatic readonlyمی تواند برای هر نوع داده، از جمله اشیاء پیچیده، استفاده شود. - بازگشت در زمان کامپایل یا اجرا: مقادیر
constدر زمان کامپایل به عنوان مقادیر ثابت در کد قرار می گیرند. این به این معنی است که اگر تغییرات در این مقادیر ایجاد شود، تمام کلاس هایی که از اینconstاستفاده می کنند نیاز به کامپایل مجدد دارند. در حالی کهstatic readonlyتنها در زمان اجرا ارزیابی می شود و به این ترتیب نیازی به کامپایل مجدد ندارد.
به عنوان مثال:
const int ConstValue = 10; // مقداردهی در زمان کامپایل
static readonly int ReadOnlyValue = CreateValue(); // مقداردهی در زمان اجرا
private static int CreateValue() {
return 20; // این تابع می تواند محاسباتی انجام دهد
}
مقایسه const و static readonly
در سی شارپ برای نگه داری مقادیر ثابت از const استفاده میشود. همچنین می توان با استفاده از static readonly متغیرهای فقط خواندنی تعریف کرد.
مقدار const باید در زمان تعریف مشخص شود و بعد از آن قابل تغییر نیست. همچنین const فقط مقادیر built-in مثل int و string به خود میگیرد.سی شارپ در پس زمینه هر جایی که const بکار رفته با مقدارش جایگزین میکند و در کد کامپایل شده hard-code میکند. این مقدار دیگر قابل تغییر نیست مگر اینکه پروژه مجدد build شود. به همین دلیل اگر از چند dll استفاده میکنید بهتر است از const استفاده نکنید.
مقادیر که به صورت Static readonly تعریف میشوند در زمان اجرا قابل تغییر نیستند. در اینجا می توان هر نوع داده ای از جمله مقادیر reference type هم ذخیره کرد. همچنین می توان مقدار اولیه را درون سازنده ی کلاس مشخص کرد. از آنجا که hard-code انجام نمیشود برای بدست آوردن مقدار باید به حافظه رجوع شود و ممکن است کندتر از const عمل کند.
نکته ی آخر اینکه مقادیر const خود به خود static هم هستند. مقادیر static پاکسازی نمیشوند و تا پایان اجرای برنامه درون حافظه باقی می مانند.

- آموزش نصب و راه اندازی دیتابیس PostgreSQL در ویندوز
- PostgreSql چیست ؟ چه کاربردهایی دارد ؟
- دسترسی به پکیج های nuget در زمان قطع نت بین الملل
- نمایش آخرین ردیف دیتاگیرید موقع لود در wpf
- مشکل اینترنت جهانی و عدم دسترسی به cdnjs.cloudflare.com
- مشکل در نصب sql server 2022
- جلوگیری از اد شدن خودکار در گروه و کانال تلگرام
- کم کردن حجم فیلم توسط کد در Asp net core
- چه کسانی استوری تلگرام را می بینند ؟
- برای کسب و کار تلگرام پرمیوم بهتره یا واتس اپ بیزینس ؟
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول