دسته بندی ها
01:54 1398/11/15

تفاوت بین const و static readonly در سی شارپ

مشخصات سوال کننده :
کاربر : pedram_khan     امتیاز کاربر : 277     رتبه کاربر : 6
دسته بندی : سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3648
هوش مصنوعی

پاسخ هوش مصنوعی

در 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; // این تابع می تواند محاسباتی انجام دهد
}
به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : hamid_b 01:59 1398/11/15

مقایسه 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 پاکسازی نمیشوند و تا پایان اجرای برنامه درون حافظه باقی می مانند.

 

متغیر const در سی شارپ

به این پاسخ امتیاز بدهید    ‎−1
امتیاز: 518 رتبه: 4
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود