تفاوت بین 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 پاکسازی نمیشوند و تا پایان اجرای برنامه درون حافظه باقی می مانند.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول