مقایسه نوع Const با Read-only در #C

دوشنبه 13 مهر 1394

در این مقاله قصد داریم دو نوع Const و Read-only را شرح دهیم و به بیان تفاوت این دو نوع بپردازیم.به نظر می رسد که این دو تفاوتی با هم نداشته باشند ولی با خواندن این مقاله متوجه خواهید شد که علی رغم شباهت های زیاد این دو تفاوت هایی با هم دارند.

مقایسه نوع Const با Read-only  در #C

مقایسه نوع 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 خواهیم داشت.

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 5k بازدید
  • 1 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید