13-05-14, 05:48 PM
بسم الله الرحمن الرحيم
وصلى الله على محمد واله الطاهرين
السلام عليكم ورحمة الله وبركاته
وصلى الله على محمد واله الطاهرين
السلام عليكم ورحمة الله وبركاته
سنتكلم عن الكلمتين المحجوزتين ref و out
ref كلمة محجوزة تستخدم مع تمرير المتغيرات الى الدوال وأن أي تغيير يطرأ على المتغير في داخل الدالة سيتأثرر به المتغير الرئيسي في الدالة الرئيسية.
ملاحظة/ يجب ان يعطى المتغير ذات الاشارة المرجعية ref قيمة اولية قبل تمريرها الى الدالة.
مثال على استخدام ref:
PHP كود :
private void Add(int num1,ref int num2)
{
num2 = num1 + num2;
}
private void button1_Click(object sender, EventArgs e)
{
var num2 = 7;
Add(2,ref num2);
MessageBox.Show(@"num2= " + num2);
}
output: num2=9
لاحظ اخي العزيز في الدالة الرئيسية عرفنا متغير num2 واعطينا له قيمة اولية وبدون القيمة الاول لا نستطيع ان نستخدم ref واثناء تمرير المتغير num2 الى الدالة اشرنا اليه بالكلمة المحجوزة ref. وكذلك فعلنا في تعريف الدالة Add اشرنا بـref للباراميتر الثاني واثناء الجمع اسندت ناتج الجمع الى num2 (ليس شرطا ان تتشابه اسماء المتغيرات في دالة الجمع مع المتغيرات في الدالة الرئيسية) وبهذا تكون التأثير قد طرأ للمتغير الممر بالاشارة المرجعية ref في الدالة الرئيسية ويكون الناتج 9. أما بدون استخدام ref فان أي تغيير على الباراميترات في الدالة لا يتأثر بها المتغيرات في الدالة الرئيسية.
نأتي الى الكلمة المحجوزة out: شبيهة بـref لكن الفرق الوحيد انه لا يحتاج الى ان يسند الى المتغير المؤشر بـout قيمة اولية ,ما عدا ذلك فهي تؤدي نفس وظيفة الـref لنأخذ المثال التالي:
PHP كود :
private void Sub(int val1, int val2, out int res)
{
res = val1 - val2;
}
private void button1_Click(object sender, EventArgs e)
{
int res;
Sub(5, 3, out res);
MessageBox.Show(@"Result is: " + res);
}
output: 2
لاحظ ان out هنا تعمل عمل return لكن بدون الحاجة الى دالة ترجع قيمة ,المسألة فقط عمل متغير اضافي مؤشر بـout تكون حاضن للناتج وبذلك تقوم بارجاع ا الناتج الى الدالة الرئيسية ,وبهذا نكون قد استغنينا عن الـreturn.
اتمنى أن المعلومات افادتكم وبصراحة انا اميل الى استخدام out بدل الـreturn لاضفي لمسة الى برامجي
ولا تنسوني و والدي من صالح دعواتكم
والسلام عليكم ورجمة الله وبركاته