ترقية النوع

عندما تقوم بتعريف عنصر البرمجة في الوحدة النمطية . يطور Visual Basic  نطاقه إلى مساحة الاسم المحتوية على الوحدة النمطية. و هذا يُعرف باسم و ترقية نوعه .

يوضح المثال التالي تعريف هيكلي لوحدة نمطية و عضوين منها.

Namespace projNamespace
    Module projModule
        Public Enum basicEnum As Integer
            one = 1
            two = 2
        End Enum
        Public Class innerClass
            Shared Sub numberSub(ByVal firstArg As Integer)
            End Sub
        End Class
    End Module
End Namespace

داخلprojModule، عتاصر البرمجة المعرفة في مستوى الوحدة النمطية ترقى إلى projNamespace. في المثال السابق، ترقى basicEnum و innerClass و لكن numberSub غير قابلة ، لأنها غير معرفة في مستوى الوحدة النمطية.

تأثير ترقية النوع

تأثير ترقية النوع يظهر خلال عدم حاجة سلسلة التأهيل لاحتواء اسم الوحدة النمطية. المثال التالي يجري استدعاءان للإجراء الموجود في المثال السابق.

Sub usePromotion()
    projNamespace.projModule.innerClass.numberSub(projNamespace.projModule.basicEnum.one)
    projNamespace.innerClass.numberSub(projNamespace.basicEnum.two)
End Sub

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

فشل ترقية النوع

إذا كانت مساحة الاسم بالفعل لها عضو له نفس اسم عضو الوحدة النمطية سيتم فشل ترقية النوع لعضو الوحدة النمطية. يوضح المثال التالي تعريف هيكلي لقائمة التعداد و الوحدة النمطية في نفس مساحة الاسم.

Namespace thisNamespace
    Public Enum abc
        first = 1
        second
    End Enum
    Module thisModule
        Public Class abc
            Public Sub abcSub()
            End Sub
        End Class
        Public Class xyz
            Public Sub xyzSub()
            End Sub
        End Class
    End Module
End Namespace

في المثال السابق،لا تستطيع Visual Basic أن ترقّي فئة abc إلى thisNameSpace بسبب وجود قائمة تعداد بنفس الاسم في مستوى مساحة الاسم. للوصول إلى abcSub، يجب عليك استخدام سلسلة التأهيل بالكامل thisNamespace.thisModule.abc.abcSub. ومع ذلك، فئة xyz لا يزال يتم ترقيتها ، ويمكن الوصول إلى xyzSub من خلال سلسلة تأهيل أقصر thisNamespace.xyz.xyzSub.

فشل ترقية النوع النوع للأنواع الجزئية

إذا كانت الفئة أو البنية داخل الوحدة النمطية تستخدم (Visual Basic) جزئي . الكلمة أساسية و ترقية النوع يفشل تلقائياً لهذه الفئة أو البنية ، سواء احتوت مساحة الاسم على عضو له نفس الاسم أم لا. عناصر أخرى في الوحدة النمطية ما زالت مؤهلة لترقية النوع .

النتائج. يمكن أن يؤدي فشل ترقية النوع للتعريف الجزئي إلى نتائج غير متوقعة و حتى أخطاء في المحول البرمجي . يظهر المثال التاليتعريف جزئي هيكلي للفئة من تلك التي داخل الوحدة النمطية.

Namespace sampleNamespace
    Partial Public Class sampleClass
        Public Sub sub1()
        End Sub
    End Class
    Module sampleModule
        Partial Public Class sampleClass
            Public Sub sub2()
            End Sub
        End Class
    End Module
End Namespace

في المثال السابق، قد يتوقع المطور قيام المحول البرمجي بدمج ملفا التعريف الجزئيين ل sampleClass. على الرغم من ذلك، المحول البرمجي لا يأخذ بالاعتبار ترقية التعريف الجزئي داخل sampleModule. ونتيجة لذلك، فإنها تحاول تحويل فئتين منفصلتين و مختلفتين برمجيا, كليهما باسم sampleClass لكن مع مسارات تأهيل مختلفة.

يدمج المحول البرمجي ملفات التعريف الجزئية فقط عندما تكون مساراتها المؤهلة بالكامل متطابقة .

التوصيات

تمثل التوصيات التالية تدريب برمجي جيد.

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

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

راجع أيضًا:

المهام

كيفية القيام بما يلي: نطاق التحكم بالمتغير

المرجع

كشف الوحدة النمطية

كشف مساحة الاسم

(Visual Basic) جزئي

المبادئ

النطاق في Visual Basic

موارد أخرى

مراجع لعناصر معرّفه