للقراءة فقط (مرجع C#)

الكلمة الأساسية readonly هي معدّل التي يمكن استخدامها لتشغيل الحقول. عندما يتضمن تعريف الحقل معدل readonly التعديل ، فقط يمكن أن يحدث الانتداب للعمل في الحقول وعرض التعريف كجزء منه أو في الدالة الإنشائية في نفس الفئة.

مثال

في هذا المثال، قيمة الحقل year لا يمكن تم تغييرها في الأسلوب ChangeYear، حتى لو تم تعيينها في قيمة فئة الدالة الإنشائية:

    class Age
    {
        readonly int _year;
        Age(int year)
        {
            _year = year;
        }
        void ChangeYear()
        {
            //_year = 1967; // Compile error if uncommented.
        }
    }

يمكنك تعيين القيمة إلى حقل readonly في السياقات التالية فقط:

  • عندما تتم تهيئة المتغير في التعريف, على سبيل المثال:

    public readonly int y = 5;
    
  • لحقل مثيل، في منشئات المثيل من الفئة التي تحتوي على تعريف الحقل، أو الحقل الثابت، للمنشئ الثابت من الفئة التي تحتوي على تعريف حقل. هذه هي أيضا سياقات الوحيدة الصالحة لتمرير حقل readonly كـ الخروج أو معلمة ref .

ملاحظة

الكلمة الأساسية readonly تختلف عن الكلمة الأساسية const. الحقل const يمكن تهيئته فقط في تعريف الحقل. الحقل readonly يمكن أن تتم تهيئته في التعريف أو في الدالة الإنشائية. ولذلك، readonly يمكن أن تحتوي الحقول على قيم مختلفة بالاعتماد على الدالة الإنشائية المستخدمة. أيضاً، بينما يكون الحقل const عبارة عن ثابت وقت الترجمة، يمكن استخدام الحقل readonlyلثوابت وقت التشغيل كما في المثال التالي:

public static readonly uint timeStamp = (uint)DateTime.Now.Ticks;
    public class ReadOnlyTest
    {
       class SampleClass
       {
          public int x;
          // Initialize a readonly field
          public readonly int y = 25;
          public readonly int z;

          public SampleClass()
          {
             // Initialize a readonly instance field
             z = 24;
          }

          public SampleClass(int p1, int p2, int p3)
          {
             x = p1;
             y = p2;
             z = p3;
          }
       }

       static void Main()
       {
          SampleClass p1 = new SampleClass(11, 21, 32);   // OK
          Console.WriteLine("p1: x={0}, y={1}, z={2}", p1.x, p1.y, p1.z);
          SampleClass p2 = new SampleClass();
          p2.x = 55;   // OK
          Console.WriteLine("p2: x={0}, y={1}, z={2}", p2.x, p2.y, p2.z);
       }
    }
    /*
     Output:
        p1: x=11, y=21, z=32
        p2: x=55, y=25, z=24
    */

في المثال السابق، إذا استخدمت جملة كما يلي:

p2.y = 66; // Error

ستتلقى رسالة خطأ في المحول البرمجي:

The left-hand side of an assignment must be an l-value

وهو نفس الخطأ التي حصلت عليه عند محاولة تعييّن القيمة إلى ثابت.

مواصفات لغة #C

لمزيد من المعلومات، راجع مواصفات لغة #C. مواصفات اللغة هي المصدر النهائي لبناء جملة C# واستخدامها.

راجع أيضًا:

المرجع

الكلمات الأساسية لـ #C

المعدّلات (مرجع #C)

الثابت (مرجع C#)

الحقول ( ارشادات البرمجة C# )

المبادئ

دليل البرمجة لـ #C

موارد أخرى

مرجع C#‎