ref (مرجع #C)

تتسبب الكلمة الأساسية ref في تمرير الوسيطات بالمرجع. التأثير هو أن أية تغييرات تتم للمعلمة داخل الأسلوب تنعكس في المتغير عندما يعود التنفيذ إلى الأسلوب المستدعي.

ملاحظة

لا تخلط بين مفهوم "التمرير بالمرجع" ومفهوم "أنواع المرجع". ليس هناك علاقة بين المفهومين; يمكن تعديل امعلمة الأسلوب بواسطة ref بغض النظر عن ما إذا كانت نوع قيمة أو نوع مرجع. ولذلك، ليست هناك عملية "تحويل إلى كائن" لنوع قيمة عندما يتم تمريرها بالمرجع.

لاستخدام معلمة ref يجب على كلاً من تعريف الأسلوب والأسلوب المستدعي استخدام الكلمة الأساسية ref . فعلى سبيل المثال:

    class RefExample
    {
        static void Method(ref int i)
        {
            i = 44;
        }
        static void Main()
        {
            int val = 0;
            Method(ref val);
            // val is now 44
        }
    }

الوسيطات المُمرره إلى معلمة ref يجب أن تكون مهيئة. وهذا يختلف عن out التي لا تلزم الوسيطات بأن تكون مهيأة قبل التمرير. لمزيد من المعلومات، راجع out.

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

class CS0663_Example
{
    // Compiler error CS0663: "Cannot define overloaded 
    // methods that differ only on ref and out".
    public void SampleMethod(out int i) { }
    public void SampleMethod(ref int i) { }
}

مع ذلك، يمكن التحميل الزائد إذا أخذ أحد الأساليب وسيطة ref أو out ولا يستخدم الآخر أي منهما كما هو موضح في المثال التالي:

    class RefOverloadExample
    {
        public void SampleMethod(int i) { }
        public void SampleMethod(ref int i) { }
    }

الخصائص ليست متغيرات. هي أساليب ولذلك لا يمكن تمريرها كمعلمات ref.

لمزيد من المعلومات حول كيفية تمرير الصفائف، راجع تمرير الصفائف باستخدام ref و out ( ارشادات برمجة C# ).

مثال

تمرير أنواع القيم بالمرجع مفيد, كما هو موضّح سابقاً في هذا الموضوع، ولكن يعتبر ref مفيد أيضاً لتمرير أنواع المرجع. يسمح هذا للأساليب المستدعاه بتعديل لبكائن الذي يشير إليه المرجع لأن تم تمرير المرجع نفسه بالمرجع. يبين النموذج التالي عند تمرير نوع مرجع كمعلمة ref يمكن تغيير الكائن نفسه. لمزيد من المعلومات، راجع تمرير معلمات من نوع مرجع (دليل البرمجية لـ #C).

class RefExample2
{
    static void Method(ref string s)
    {
        s = "changed";
    }
    static void Main()
    {
        string str = "original";
        Method(ref str);
        Console.WriteLine(str);
    }
}
// Output: changed

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

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

راجع أيضًا:

المرجع

تمرير المعلمات (دليل البرمجة لـ #C)

معلمات الأسلوب (C# مرجع)

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

المبادئ

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

موارد أخرى

مرجع C#‎