مقایسه نوع Const با Read-only در #C
دوشنبه 13 مهر 1394در این مقاله قصد داریم دو نوع Const و Read-only را شرح دهیم و به بیان تفاوت این دو نوع بپردازیم.به نظر می رسد که این دو تفاوتی با هم نداشته باشند ولی با خواندن این مقاله متوجه خواهید شد که علی رغم شباهت های زیاد این دو تفاوت هایی با هم دارند.
مقایسه نوع Const با نوع Read-only
واژه Constant به چیزی اطلاق می شود که قابل تغییر نباشد. Constant متغیر هایی هستند که مقادیرشان در طول اجرای برنامه ثابت می ماند.این نوع متغیرها با کلمه کلیدی Const تعریف می شوند.
Constant همانطور که در شکل زیر می بینید به دو گروه عمده تقسیم می شوند. Constو Read-only
بیایید نگاهی به Const بیاندازیم
Const نوعی از مقادیر ثابت است که مقادیرشان در طول اجرای برنامه ثابت می ماند.این متغیر ها با نام متغیر های ثابت Compile time شناخته می شوند.در زمان تعریف مقدار اولیه می گیرند اما پس از تعریف دیگر این مقدار عوض نخواهد شد.از این جهت به آنها متغیر های ثابت Compile Time گفته می شود که در زمان کامپایل مقدار آنها مشخص می شود.
class Program { public const int month = 12; static void Main(string[] args) { Console.WriteLine(month); Console.ReadKey(); } }
در کد بالا متغیر Month به صورت Const تعریف شده است.و در لحظه تعریف مقدار دهی شده است .این مقدار در طول اجرای برنامه ثابت است و اگر سعی کنیم آن را در خطوط بعدی تغییر دهیم خطا خواهیم داشت . شکل زیر این خطا را نشان می دهد
توجه
همانطور که می بینید در لحظه تعریف متغیر Const باید به آن مقدار داد.در غیر اینصورت خطای کامپایل با این عنوان دریافت خواهیم کرد: A const field requires a value to be provided
به طور پیش فرض متغیری که Const تعریف می شود، static هم هست .ولی اگر در هنگام تعریف از کلمه static استفاده کنیم خطای کامپایل با این عنوان دریافت خواهیم کرد: Cannot be marked static
مقدار متغیر Const کدگذاری شده است
فقط نوع های اولیه مانند int,double را میتوان به صورت Const تعریف کرد
بیایید نگاهی به Read-only بیاندازیم
متغیرهای Read-only تنها در زمان اعلانشان مقداردهی میشوند.البته روش دیگری هم برای مقدار دهی وجود دارد آن هم درون Constructor است .این نوع از متغیر های ثابت به نام Run Time Constant شناخته می شوند.
class Program { public static readonly int week = 7; public const int month = 12; static void Main(string[] args) { Console.WriteLine(week); Console.ReadKey(); } }
مثال دیگر
class ReadOnly { public readonly int week = 7; // در زمان تعریف readonly مقدار دهی به متغیر از نوع public ReadOnly() { week = 10; } } static void Main(string[] args) { ReadOnly objRn = new ReadOnly(); //RunTime در زمان اجرا یاreadonly تعریف و مقدار دهی متغیر Console.WriteLine(objRn.week); Console.ReadLine(); }
در این نوع متغیر مقداردهی اولیه اجباری نیست.اما در صورت مقداردهی این مقدار ثابت خواهد بود و در طول اجرای برنامه تغییر نخواهد کرد.
می توان این متغیر را Static هم تعریف کرد.
مقداری که به این متغیر نسبت می دهیم در Run Time زمان اجرا ست می شود.
متغیر Static از نوع Read-only نمی تواند به صورت مستقیم مقدار دهی شود در این صورت خطای A static read-only field cannot be assigned to خواهیم داشت.
- C#.net
- 5k بازدید
- 1 تشکر