![]() |
|
ref vs out in c#.net - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175) +--- قسم : قسم مقالات C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=177) +--- الموضوع : ref vs out in c#.net (/showthread.php?tid=21140) |
ref vs out in c#.net - Sajad - 21-07-17 بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))
ref vs out in c#.net
كلاهما عبارة عن كلمات محجوزة في لغة C# دورها ارسال التغير الحاصل على المتغير في الدالة الفرعية الى المتغير في الدالة الرئيسية حيث توجد هنالك طريقتان لتمرير البيانات عبر الدوال وهي:
1- Pass by reference.
2- Pass by value.
وهذه الطريقة تسمى بــ pass by reference أي باستخدام (ref and out).
لكن توجد بعض الفروقات في عمل هاتين الكلمتين نوجزها كما يلي:
1-
out: لا يفترض أو ليس بالضرورة اسناد قيمة أولية للمتغير الذي سنمرره للدالة كــ out argument.
ref: يجب اسناد قيمة أولية للمتغير الذي سنمرره للدالة كــ ref argument.
2-
out: يجب اسناد قيمة للباراميتر المُمَرَّر للدالة كــ out parameter في الدالة الفرعية وإلا سينتج خطأ.
ref: لا يجب اسناد قيمة للباراميتر المُمَرَّر للدالة كــ ref parameter في الدالة الفرعية.3- out: أكثر فائدة واستخداما في حال كان المطلوب ارجاع اكثر من قيمة. ref: اكثر فائدة في حال كان المطلوب تعديل أو تغيير قيمة أو محتوى المتغير داخل الدالة الفرعية. 4- out: يعمل باتجاه واحد فقط، أيّ ان التغير الحاصل على المتغير سيأتي من الدالة الفرعية، بمعنى سيتم ارسال المتغير فقط بدون البيانات وسيتم جلب البيانات من الدالة الفرعية. حتى وإن تم اسناد المتغير بقيمة أولية فهنا سيتم تجاهل القيمة الاولية لانه كما ذكرنا سابقا بأن اسناد القيمة الجديدة ستكون في الدالة الفرعية. ref: يعمل باتجاهين، أيّ أنك تستطيع أن تمرر بيانات الى الدالة الفرعية وجلب البيانات المعدلة منها، بمعنى آخر أنك ستقوم بارسال متغير مع البيانات وستقوم باسترجاع البيانات المعدلة من الدالة الفرعية. مخطط يوضح النقطة الاخيرة بين ref and out: ![]() مثال يبيّن الفرق بين ref and out:
PHP كود : using static System.Console;والحمد لله رب العالمين
|