دقة التحميل الزائد
عندما يواجه برنامج التحويل البرمجي Visual Basic استدعاء لإجراء المعرف في عدة إصدارات ذات الحمل الزائد, فان المحول البرمجي يجب أن يقرر أي من الحمولات الزائدة يقوم باستدعاءها. إنه يقوم بذلك بواسطة تنفيذ الخطوات التالية:
إمكانية وصول ذوي الاحتياجات الخاصة. يقوم بالتخلص من التحميل الزائد بمستوى وصول الذي يمنع استدعاء تعليمات برمجية استدعائه.
عدد المعلمات. يقوم بانهاء أي تحميل زائد الذي يحدد عدد مختلف من المعلمات غير الموفر في الاستدعاء.
أنواع بيانات المعلمة. يمنح المحول البرمجي التفضيل أساليب مثيل أفضلية على أساليب التوسيع. إذا تم العثور على أي أسلوب مثيل الذي يتطلب فقط تحويلات توسيع لمطابقة استدعاء الإجراء, كل أساليب التوسيع يتم إسقاطها و يستمر المحول البرمجي مع مرشحي أسلوب المثيل فقط.. إذا لم يتم العثور على أسلوب مثيل مثل هذا, فانه يستمر مع كلا أساليب المثيل و التوسيع.
في هذه الخطوة، قم بانهاء أية تحميل زائد التي يتعذر تحويل أنواع البيانات لوسائط الاستدعاء إلى أنواع معلمة معرفة في التحميل الزائد.
التحويلات التضييقية ينهي أي تحميل زائد الذي يتطلب تحويل تضييقي من أنواع وسيطة الاستدعاء إلى أنواع المعلمات المعرفة. هذا صحيح سواء أن كان مبدل تدقيق النوع (كشف الخيار الصارمِ) هو On أو Off.
أقل توسيع. يعتبر المحول البرمجي التحميلات الزائدة المتبقية في أزواج. لكل زوج, يقوم بمقارنة أنواع البيانات للمعلمات المعرّفة. اذا كانت الأنواع في أحد التحميلات الزائدة كلها تتوسع الى الأنواع المطابقة في التحميلات الأخرى, يتخلص المحول البرمجي من الأخير. أي، يقوم بالحتفظ على التحميل الزائد الذي يتطلب مقداراً أقل من التوسيع.
المرشح المفرد. يستمر في اعتبار التحميلات الزائدة في أزواج حتى يبقى تحميل زائد واحد فقط, و يعمل على حل الاستدعاء إلى هذا التحميل الزائد. إذا لم يتمكن المحول البرمجي من تقليل التحميلات الزائدة مرشح مفرد، يقوم بإنشاء خطأ.
يبين الرسم التوضيحي التالي العملية التي تحدد أي مجموعة من إصدارات التحميل الزائد يتم الاتصال به.
الـحل بين إصدارات التحميل الزائد
يوضح المثال التالي عملية حل التحميل الزائد هذه.
Overloads Sub z(ByVal x As Byte, ByVal y As Double)
End Sub
Overloads Sub z(ByVal x As Short, ByVal y As Single)
End Sub
Overloads Sub z(ByVal x As Integer, ByVal y As Single)
End Sub
Dim r, s As Short
Call z(r, s)
Dim p As Byte, q As Short
' The following statement causes an overload resolution error.
Call z(p, q)
في الاتصال الأول، يحل المحول البرمجي التحميل الزائد الأول لأن نوع الوسيطة الأولى (Short) تضيق الى نوع المعلمة المطابقة (Byte). فإنه فيما بعد ينهي التحميل الزائد الثالث لأن كل نوع وسيطة في التحميل الزائد الثاني ( Short و Single) يوسع إلى النوع المطابق في التحميل الزائد الثالث (Integer و Single). التحميل الزائد الثاني يتطلب أقل توسيع, بحيث يستخدم المحول البرمجي فوقه للحصول يتصل.
في الإستدعاء الثانية, لا يمكن إزالة المحول البرمجي أي تساعد أساس من تضييق. فإنه يحل التحميل الزائد الثالث للسبب نفسها كما في أول يتصل ، لأنه يمكن يتصل التحميل الزائد الثاني مع توسيع أقل من أنواع وسيطة. ومع ذلك، لا يمكن حل المحول البرمجي بين تساعد أول والثاني. الـكل لديه نوع معلمة معرفة واحدة التي توسع الى النوع المقابل في الأخرى (Byte إلى Short، ولكن Single إلى Double). ولهذا يقوم المحول البرمجي بإنشاء خطأ دقة التحميل الزائد.
وسيطات المحمل بشكل زائد الاختيارية و ParamArray
إذا كان لدى تحميلين زائدين لاجراء لهما تواقيع متطابقة ماعدا أنه تم تعريف المعلمة الأخيرة (Visual Basic) اختيارية في أحد و ParamArray (Visual Basic) في الأخرى، يحل المحول البرمجي الاتصال بذلك الإجراء كما يلي:
إذا وفر الاستدعاء الوسيطة الأخيرة كـ |
يقوم المحول البرمجي بحل الاستدعاء للتحميل الزائد بالتصريح عن الوسيطة الأخيرة كـ |
---|---|
لا توجد قيمة (حذف وسيطة) |
Optional |
قيمة مفردة |
Optional |
قيمتان أو أكثر في قائمة مفصولة بفواصل |
ParamArray |
صفيف من أي طول (بما في ذلك الصفيف الفارغ) |
ParamArray |
راجع أيضًا:
المهام
إجراءات استكشاف الأخطاء وإصلاحها
كيفية القيام بما يلي: تعريف الإصدارات المتعددة للإجراء
كيفية القيام بما يلي: إستدعاء إجراء محمّل تحميلا زائداً
كيفية القيام بما يلي: زيادة تحميل إجراء الذي يأخذ المعلمات الاختيارية
كيفية القيام بما يلي: التحميل الزائد لإجراء الذي يأخذ عدد لا نهائي من المعلمات