السلام عليكم
الخاصية Byref الخاصة بالإجراء sub غير مفهومة لدي بشكل جيد ..
فقط أريد شرح عنها مدعم بأمثلة بارك الله فيكم
السلام عليكم
الخاصية Byref الخاصة بالإجراء sub غير مفهومة لدي بشكل جيد ..
فقط أريد شرح عنها مدعم بأمثلة بارك الله فيكم
السلام عليكم
غالي والطلب رخيص , بس الأول كلمة ByRef مش خاصية B)
غالبا انت تجد كلمة ByRef في تعريف متغير لاستخدامه كـ Parameter لدالة أو Sub ,
Public Function sum(ByRef x As Integer, ByRef y As Integer) Return (x + y) End Function
وما معناها ؟ معناها أن الـ Compiler يقوم بانشاء متغير في الـ Heap من النوع الذي تحدده أنت ,
وبالمره ما معني كلمة ByVal ؟ معناها أن الـ Compiler يقوم بانشاء متغير في الـ Stack يحمل عنوان متغير في الـ Heap ,,,
ملحوظه : الـ Stack , Heap أسماء أماكن في الذاكره ,
يعني لو قمت بعمل متغير ByVal وقمت بعمل تغيير في قيمته ثم عرضت قيمته ستجد أنها لم تتغير , أما لو كان ByRef وقمت بعمل تغيير في قيمته ثم عرضت قيمته ستجد أنها تغيرت ,
طبعا أنت تريد مثال لكي تفهم الفرق بينهما :
أنشئ دالة تأخذ 2 Parameters وخلي بالك ByVal , وتقوم بتبديل القيم التي أخذتها ,
Public Function swap(ByVal x As Integer, ByVal y As Integer) As Integer Dim temp As Integer temp = x x = y y = temp End Function
ثم كود حدث تحميل الفورم اكتب الكود التالي لعرض قيم المتغيرات قبل تطبيق الدالة وبعد تطبيقها :
Dim xx As Integer = 5 Dim yy As Integer = 3 MsgBox(xx & "," & yy) swap(xx, yy) MsgBox(xx & "," & yy)
قم بتنفيذ البرنامج وانظر النتيجه ,
قم بتغيير تعريف المتغيرات من ByVal الي ByRef , وانظر النتيجه ,
وفي النهاية أرجو أن تكون قد فهمت شرحي جيدا ,
وأرجو أن تدعو لمشرف القسم الأخ crazy-man لأنه من علمني الفرق بينهما والمثال الأخير مأخوذ عنه ,,,
تم تعديل هذه المشاركة بواسطة hazzoom في 19 أكتوبر 2005 في 20:58
هذا الموضوع مغلق.