ما الفرق بين التمرير بالقيمة والتمرير بالمرجع في لغة السي شارب


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

لم أفهم

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

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

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

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

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

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

فهمت الآن

:)


برمجة

مجتمع للمبرمجين من جميع المستويات لتبادل المعرفة والخبرات. ناقش لغات البرمجة المختلفة، الحلول البرمجية، والمشاريع.

24.9 ألف متابع