كيفية القيام بما يلي: تغيير قيمة وسيطة الإجراء

عندما تقوم بإسدعاء إجراء, كل وسيطة تقوم بتوفيرها يطابق أحد المعلمات المعرفة في الإجراء. في بعض الحالات، إجراء التعليمات البرمجية يمكنها تغيير قيمة وسيطة في استدعاء تعليمات برمجية المصدر. في حالات أخرى، الإجراء يمكنف فقط تغيير نسخته المحلية من الوسيطة.

عنما تقوم باستدعاء إجراء Visual Basic يقوم بإنشاء نسخ محلية من كل وسيطة يتم تمريرها Visual Basic) ByVal). لكل وسيطة يتم تمريرها ByRef في (Visual Basic), Visual Basic يوفر رمز إجراء مرجع مباشر إلى عنصر برمجة الوسيطة في استدعاء تعليمات برمجية المصدر.

إذا كان العنصر الأساسي في تعليمات برمجية يقوم استدعاء عنصر قابل للتعديل يتم تمرير وسيطة ByRef، التعليمة البرمجية إجراء يمكن استخدام مرجع مباشر إلى تغيير القيمة العنصر في استدعاء تعليمات برمجية.

تغيير القيمة الأساسية

لتغيير قيمة وسيطة الإجراء في استدعاء تعليمات برمجية المصدر

  1. في تعريف الإجراء قم بتحديد ByRef في (Visual Basic) بالنسبة للمعلمة المقابلة للوسيطة.

  2. في تعليمات برمجية الاستدعاء تقوم بتمرير عنصر قابل للتعديل برمجة كوسيطة.

  3. في تعليمات برمجية الاستدعاء لا إحاطة وسيطة في أقواس في قائمة الوسائط.

  4. في التعليمة البرمجية إجراء استخدام اسم معلمة إلى تعيين القيمة العنصر الأساسي في استدعاء تعليمات برمجية.

راجع المثال باستمرار للحصول على العرض التوضيحي.

تغيير عدد النسخ المحلية

إذا كان العنصر الأساسي في تعليمات برمجية استدعاء عنصر غير قابل للتعديل أو إذا كان يتم تمرير وسيطة ByVal، لا يمكن تغيير إجراء قيمتها في استدعاء تعليمات برمجية. ومع ذلك، الإجراء يمكنه تغيير النسخ المحلية الخاص به كوسيطة ما.

تغيير نسخ وسيطة إجراء في إجراء تعليمات برمجية

  1. في تعريف الإجراء قم بتحديد Visual Basic) ByVal) بالنسبة للمعلمة المقابلة للوسيطة.

    -أو-

    في تعليمات برمجية الاستدعاء لا تقم بإحاطة وسيطة في أقواس في قائمة الوسائط. هذا يفرض Visual Basic إلى تمرير وسيطة حسب القيمة، حتى إذا تحدد معلمة المطابقة ByRef.

  2. في التعليمة البرمجية إجراء استخدام اسم معلمة لتعيين القيمة إلى نسخ محلية من وسيطة. لم يتم تغيير القيمة الأساسية في استدعاء تعليمات برمجية.

مثال

يظهر المثال التالي إجراءان يأخذان متغير صفيف و يعملان على عناصره. الإجراء increase يضيف ببساطة واحد لكل عنصر. يعين الإجراء replace صفيف جديد للمعلمة a() و من ثم يقوم بإضافة واحد لكل عنصر.

Public Sub increase(ByVal a() As Long)
    For j As Integer = 0 To UBound(a)
        a(j) = a(j) + 1
    Next j
End Sub
Public Sub replace(ByRef a() As Long)
    Dim k() As Long = {100, 200, 300}
    a = k
    For j As Integer = 0 To UBound(a)
        a(j) = a(j) + 1
    Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " & 
    CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " & 
    CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))

استدعاء MsgBox الأول يعرض "بعد زيادة(n): 11, 21, 31, 41". لأن الصفيف n من نوع مرجع، replace يمكنه تغيير أعضائه، حتى لو كانت آلية التمرير هي ByVal.

استدعاء MsgBox الثاني يعرض "بعد استبدال(n): 101, 201, 301". لأن n يتم تمرير ByRef, replace يمكن تعديل متغير n في تعليمات برمجية الاستدعاء و تعيين صفيف جديد إليه. لأن n نوع المرجع replace يمكنك أيضاً تغيير أعضائها.

يمكنك منع إجراء تعديل المتغير نفسه في استدعاء تعليمات برمجية. انظر كيفية القيام بما يلي: يحمي وسيطة إجراء من تغييرات القيمة

التحويل البرمجي للتعليمات البرمجية

عند تمرير متغير حسب المرجع عليك استخدام الكلمة الأساسية ByRef لتحديد هذه الآلية.

التمرير الافتراضي في Visual Basic هو تمرير وسيطة بواسطة قيمة. ومع ذلك، تضمين إما الكلمة الأساسية Visual Basic) ByVal) أو ByRef في (Visual Basic) مع كل معلمة مُعلَنة هو تدريب برمجي جيد. هذا يجعل تعليماتك البرمجية أسهل في القراءة.

أمان

دوماً هناك مخاطر محتملة في السماح لإجراء إلى تغيير قيمة تابع وسيطة التعليمات البرمجية المتصله. تأكد من أن تتوقع بأن يتم تغيير هذه القيمة و كن مستعدا لفحصها للصحة قبل استخدامها.

راجع أيضًا:

المهام

كيفية القيام بما يلي: تمرير الوسيطات إلى إجراء

كيفية القيام بما يلي: يحمي وسيطة إجراء من تغييرات القيمة

كيفية القيام بما يلي: فرض على وسيطة ليتم تمريرها حسب القيمة

المبادئ

الـإجراءات في Visual Basic

معلمات إجراء و وسيطات

تمرير الوسائط بواسطة القيمة و بواسطة المرجع

الفروق بين الوسيطات القابلة للتعديل و الغير قابلة للتعديل

الفروق بين تمرير الوسيطة على حسب القيمة و حسب المرجع

تمرير الوسائط حسب الموضع و حسب الاسم

موارد أخرى

تطبيق نوع البيانات