استخدام ref keyword في الـ #C

استخدام المعرف “ref” في لغة #C هو لتمرير الـ Reference/Address للمتغير في الذاكرة، بدلًا من تمرير قيمتة، وهذا يسمح بتغيير/تعديل قيمة متغير (بعيد).

افتراضيًا، عند تمرير متغير إلى دالة معينة ، ما يتم تمريره فقط هو قيمته Value :-

مثال :-

عند تشغيله :-

قمنا، بتعريف متغير (i) من نوع integer ( )،  ثم طبعنا قيمته

( )، وبعدها قمنا باستدعاء الدالة changeInt ومررنا المتغير لها، هذه الدالة تقوم بتغيير قيمة i إلى 5، ومن ثم نطبع المتغير مره أخرى بعد تغيير قيمته، لنرى ماذا تغير ؟

عند تشغييل الكود لاحظنا أن قيمة (i) لم تتغير، وتم طباعة قيمته السابقة ! ( 1 و 1 )،  والسبب هو أن المتغيرات يتم تمرير قيمتها فقط، إلى الدالة ولا يتم تمرير المتغير نفسه وعنوانه.


نلاحظ المثال التالي باستخدام المعرف ( ref )

وعند تشغيله :-

استطعنا هنا أن نغير قيمة المتغير ( i ) البعيد وعند طباعته حصلنا على ( 1 و 5 )، من خلال الدالة،  لأنه تم تمريره كـ Reference، تم تمرير عنوان المتغير وليست قيمته فقط، وعندما نمرر عنوان متغير بعيد، فإننا نتمكن من تغيير قيمته من دالة أخرى.

وهذا ما يسمى بـ   SharedByValue vs SharedByReference