يا هلا :
- أولاًَ : يجب أن تراعي أن الــ(ParamArray) يجب أن يكون في آخر البارامترات لأي إجراء.
- ثانياً : يجب أن يكون عندك إختلاف بنوع البيانات بين البارام الأول و الـ (ParamArray) إختلافاً جذرياً :
يعني مش تحط واحد int والثاني long لأن في حال الارقام الصغيرة لن يميز المترجم بينهما ..
بالتالي لن تحصل على نتيجة صحيحة وإن حصلت : فـ بـالصدفة لا أكثر.
- ثالثاً : لا يمكن الجمع بينهما فعلياً، ولكن فيك تكتب الاجراء الأساسي مرتين أو ثلاث مرات (مع اختلاف البارامترات).
وعندما تكتب البارام الاختياري مع البارام المصفوفي ، لا تكتبه كـ إختياري بـ كـ إجباري.
فتكتب الاجراء : في كل مرة بـ بارامتر مختلف فيقوم المعالج بالتفريق بينهم من حيث نوع البيانات المدخلة.
- مثال عن إجراء فيك تستخدمه بأكثر من حالة :
كود :
Sub TA(ByVal FldCont As Boolean, ByVal ParamArray Cont() As Integer)
Dim S As Long = 0
For Each X In Cont
S += X
Next
MsgBox(FldCont.ToString & " - " & S.ToString)
End Sub
Sub TA(ByVal ParamArray Cont() As Integer)
Dim S As Long = 0
For Each X In Cont
S += X
Next
MsgBox(S.ToString)
End Sub
Sub TA(ByVal FldCont As Boolean)
MsgBox(FldCont.ToString)
End Sub
لاحظ : أن للاجراء في الثلاث حالات نفس الاسم ولكن اختلفت نوعية وكمية البارامترات لكل واحد منها.
- وتستطيع مناداته بالكود التالي كمثال :
كود :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TA(1, 2, 3)
TA(False, 1, 2, 3, 4)
TA(True)
End Sub
يعني نحن لما كتبنا البارام الاختياري مع البارام المصفوفي : ما كتبناه كـ أختياري بل كـ إجباري..
ولكن تنوع الاجراءات - جعله يظهر كأحد الاختيارات (كـ إجراء كامل من مجموعة إختيارات وليس مدمج ووحيد)..
اختلفت المدخلات واختلفت المخرجات ..
بحسب ما يتم إدخاله سيعطيك نتيجة تناسبه وغير متداخلة مع غيرها ..