عندما تذهب لصندوق بريدك وتجد طرد صغير فهذا تمرير بالقيمة

بينما لو وجدت ورقة صغيرة عبارة عن إشعار بوصول طرد ثم أخذت الورقة وذهبت للموظف فستعطيه إياه ويحضر لك الطرد فهذا تمرير بالمرجع

بالنسبة للكود فأنت عندما تمرر متغير بالقيمة فأنت تصل إلى قيمته وتتعامل مع نسخة من الكائن الأصل وبالتالي فإن أي تعديل على خصائصه لن يؤثر على الكائن الأصل

أما التمرير بالمرجع فأنت تمرر مرجع الكائن الأصل وبالتالي أي تعامل مع خصائصه فأنت تعدل على الأصل

وهذا يفيد في حال تريد عمل دالة تجري عمليات على كائن ما ويعود مع إحداث التغييرات عليه.

بالنسبة للكود فأنت عندما تمرر متغير بالقيمة فأنت تصل إلى قيمته وتتعامل مع نسخة من الكائن الأصل وبالتالي فإن أي تعديل على خصائصه لن يؤثر على الكائن الأصل

أما التمرير بالمرجع فأنت تمرر مرجع الكائن الأصل وبالتالي أي تعامل مع خصائصه فأنت تعدل على الأصل

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

"التمرير بالمرجع" يعني أنه يمكن إسناد قيمة جديدة للمرجع الذي تم تمريره داخل الدالة.

يبدو أني فهمت خطأ

أنا ظننت الأمر مقارنة بين استخدام ref وبدونها

ويبدو أن السؤال هو بين استخدام ref و val

وعلى هذا فكلامي أعلاه غير موافق للسؤال

جزاك الله خيرا على التصويب

كلام الأخ عبد الرحمن أحمد معقول

  • التمرير بالمرجح يجنبك من عمل نسخة

الأخ فؤاد محق فهو يتحدث عن الشطر الذي يتحدث عن التمرير بالقيمة أي باستخدام val أم الشطر الأخر فهو صحيح وهو لم يعلق عليه

لم أفهم

ممكن توضيح أكتر

في سي شارب عندما تكرر متغير عبر دالة فهناك 3 خيارات

1- إما أن تمررها بشكل مباشر أي فقط تضع بين قوسي الدالة اسم المتغير وهذا يعتبر تمرير عادي

2- وإما أن تسبقه بالكلمة المفتاحية ref وهذا يسمى التمرير بالمرجع

3- و إما أن تسبقه بالكلمة المفتاحية val وهذا يعتبر التمرير بالقيمة

السائل سأل عن الفرق بين الثاني والثالث وأما أنا أجبته عن الفرق بين الأول والثاني والأخ فؤاد صوب جوابي وتحدث عن الثالث

التمرير بالقيمة يعني أنك تأخذ نسخة من المتغير وتقوم بتمريره إلى دالةٍ ما.

هذا يعني أن المتغير الأصلي مازل محتفظ بقيمته الأصلية "الأمر أشبه بأخذ نسخة تحتوي على قيمة مطابقة لقيمة المتغيّر "

بينما التمرير بالمرجع فإنك تقوم بتمرير عنوان المتغير في الذاكرة(الأمر له علاقة بالمؤشرات)، وبالتالي فإن أي تغيير في قيمة ذلك المرجع فإنه يعني أنك تقوم بتغيير قيمة المتغير نفسه، وذلك لأنك تتعامل مع المحتوى الموجود في موقع ذاك المتغير في الذاكرة وليس مع نسخة منه.

برمجة

المواضيع والنقاشات المتعلقة بالبرمجة بشكل عام او لغات البرمجة التي لايوجد لها مجتمعات فرعية.

15.8 ألف متابع