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

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

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

يظهر المثال التالي مراجع إلى متغيرين بنفس الاسم. يقوم المثال بتعريف متغيرين ، كلا منهما باسم totalCount، في مستويات مختلفة من نطاق في وحدة نمطية container. عندما يقوم الإجراء showCount بعرض totalCount دون تأهيل ، يقوم برنامج التحويل البرمجي Visual Basic بحل المرجع إلى التعريف مع النطاق الأضيق, وهو التعريف المحلي داخل showCount. عندما يقوم بتأهيل totalCount مع الوحدة النمطية الحاوية container ، يقوم المحول البرمجي بحل المرجع إلى التعريف مع النطاق الأوسع.

' Assume these two modules are both in the same assembly.
Module container
    Public totalCount As Integer = 1
    Public Sub showCount()
        Dim totalCount As Integer = 6000
        ' The following statement displays the local totalCount (6000).
        MsgBox("Unqualified totalCount is " & CStr(totalCount))
        ' The following statement displays the module's totalCount (1).
        MsgBox("container.totalCount is " & CStr(container.totalCount))
    End Sub
End Module
Module callingModule
    Public Sub displayCount()
        container.showCount()
        ' The following statement displays the containing module's totalCount (1).
        MsgBox("container.totalCount is " & CStr(container.totalCount))
    End Sub
End Module

تأهيل اسم عنصر

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

تعريف اسماً يعني تقديمه في عبارة المصدر الخاصة بك بالمعلومات التي تعرّف أين تم تعريف العنصر الهدف. تسمى هذه المعلومات سلسلة التأهيل. يمكن أن تتضمن أكثر من مساحة اسم واحدة و وحدة نمطية أو فئة أو بنية.

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

للوصول إلى عنصر معرف عن طريق تأهيل اسمه

  1. حدد الموقع الذي تم تعريف العنصر به. هذا قد يتضمن مساحة اسم أو حتى تسلسل هرمي من مساحات الأسماء. في مساحة الاسم ذات المستوى الأقل, العنصر يجب أن يكون موجودة في وحدة نمطية فئة, أو بنية.

    ' Assume the following hierarchy exists outside your code.
    Namespace outerSpace
        Namespace innerSpace
            Module holdsTotals
                Public Structure totals
                    Public thisTotal As Integer
                    Public Shared grandTotal As Long
                End Structure
            End Module
        End Namespace
    End Namespace
    
  2. حدد مسار تأهيل استناداً إلى موقع العنصر الهدف. إبدأ بمساحة الاسم ذات المستوى الأعلى، انتقل إلى مساحة الاسم ذات المستوى الأقل وانتهي مع الوحدة النمطية، الفئة, أو البنية التي تحتوي على العنصر الهدف. كل عنصر في مسار يجب أن يحتوي العنصر الذي يليه.

    outerSpace → innerSpace → holdsTotals → totals

  3. حضر سلسلة التأهيل للعنصر الهدف. ضع نقطة (.) بعد كل عنصر في المسار. يجب أن يكون لدى التطبيق الخاص بك حق الوصول إلى كل عنصر في سلسلة التأهيل الخاصة بك.

    outerSpace.innerSpace.holdsTotals.totals.
    
  4. اكتب التعبير أو عبارة التعيين مشيراً إلى عنصر الهدف بالطريقة العادية.

    grandTotal = 9000
    
  5. قدم اسم عنصر الهدف مع سلسلة التأهيل. يجب أن يتبع الاسم مباشرة النقطة (.) التي تتبع الوحدة النمطية، الفئة, أو البنية التي تحتوي على العنصر.

    ' Assume the following module is part of your code.
    Module accessGrandTotal
        Public Sub setGrandTotal()
            outerSpace.innerSpace.holdsTotals.totals.grandTotal = 9000
        End Sub
    End Module
    
  6. يستخدم المحول البرمجي سلسلة التأهيل للعثور على تعريف غير غامض و واضح يمكن أن يطابق مرجع العنصر الهدف.

قد يتوجب عليك أيضاً تأهيل مرجع اسم إذا كان لدى التطبيق الخاص بك حق الوصول إلى أكثر من عنصر برمجة له نفس الاسم. على سبيل المثال، مساحات الاسم System.Windows.Forms و System.Web.UI.WebControls كلاهما يحتوي الفئة Label (System.Windows.Forms.Label و System.Web.UI.WebControls.Label). إذا كان التطبيق يستخدم كلا الفئتين, أو إذا كان يعرّف الفئة Label الخاصة به, يجب تمييز الكائنات Label المختلفة. ضمن مساحة الاسم أو الاسم المستعار للاستيراد في تعريف المتغير. يستخدم المثال التالي الاسم المستعار للاستيراد.

' The following statement must precede all your declarations.
Imports win = System.Windows.Forms, web = System.Web.UI.WebControls
' The following statement references the Windows.Forms.Label class.
Dim winLabel As New win.Label()

أعضاء عناصر حاوية أخرى

عند استخدام عضو غير مشترك لفئة أو بنية أخرى, يجب أولاً تأهيل اسم العضو مع متغير أو تعبير يشير إلى مثيل للفئة أو البنية. في المثال التالي, demoClass هو مثيل لفئة مسماة class1.

Dim demoClass As class1 = New class1()
demoClass.someSub[(argumentlist)]

لا يمكنك استخدام اسم الفئة نفسها لتأهيل عضو غير (Visual Basic) المشترك. يجب عليك أولاً إنشاء مثيل في متغير كائن (في هذه الحالة demoClass) ومن ثم أشر إليه بواسطة اسم المتغير.

إذا كان للفئة أو البنية عضو Shared, يمكن تأهيل ذلك العضو إما مع اسم الفئة أو البنية أو مع متغير أو تعبير يشير إلى مثيل.

ليس لدى الوحدة النمطية أية مثيلات منفصلة، و تكون كل أعضائها Shared بشكل افتراضي. ولذلك، يتم تأهيل عضو الوحدة نمطية باسم الوحدة النمطية.

يظهر المثال التالي مراجع مؤهله لإجراءات عضو وحدة نمطية. يقوم المثال بتعريف اثنان من إجراءات Sub، كلاهما باسم perform، في وحدات نمطية مختلفة في مشروع. يمكن تحديد كلاً منها دون تأهيل ضمن الوحدة النمطية الخاصة به ولكن يجب أن يكون مؤهلاً إذا تمت الإشارة إليه من أي مكان آخر. لأن المرجع النهائي في module3 لا يقوم بتأهيل perform، برنامج التحويل البرمجي لا يمكنه حل هذا المرجع.

' Assume these three modules are all in the same assembly.
Module module1
    Public Sub perform()
        MsgBox("module1.perform() now returning")
    End Sub
End Module
Module module2
    Public Sub perform()
        MsgBox("module2.perform() now returning")
    End Sub
    Public Sub doSomething()
        ' The following statement calls perform in module2, the active module.
        perform()
        ' The following statement calls perform in module1.
        module1.perform()
    End Sub
End Module
Module module3
    Public Sub callPerform()
        ' The following statement calls perform in module1.
        module1.perform()
        ' The following statement makes an unresolvable name reference
        ' and therefore generates a COMPILER ERROR.
        perform() ' INVALID statement
    End Sub
End Module

مراجع لمشاريع

لاستخدام عناصر عام (Visual Basic) معرّفة في مشروع آخر, يجب عليك أولاً تعيين مرجع إلى تجميع أو مكتبة نوع ذلك المشروع. لتعيين مرجع انقر فوق إضافة مرجع على قائمة مشروع أو استخدام خيار سطر الأوامر في برنامج التحويل البرمجي Visual Basic) /reference) .

على سبيل المثال، يمكنك استخدام طراز الكائن (XML) من .NET Framework. إذا قمت بتعيين مرجع إلى مساحة الاسم System.Xml يمكنك تعريف و استخدام أي من فئاته ، مثل XmlDocument. المثال التالي يستخدم XmlDocument.

' Assume this project has a reference to System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As System.Xml.XmlDocument

استيراد عناصر حاوية

يمكنك استخدام استيراد كشف (مساحة الاسم و نوع NET.) لاستيراد مساحات الأسماء التي تحتوي على الوحدات النمطية أو الفئات التي تريد استخدامها. يمكّنك هذا للإشارة إلى العناصر المعرفه في مساحة أسم مستوردة بدون تأهيل أسمائها بشكل كامل. المثال التالي يعيد كتابة المثال السابق لاستيراد مساحة الاسم System.Xml.

' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As XmlDocument

بالإضافة إلى ذلك، العبارة Imports يمكنها تعريف اسم مستعار للاستيراد لكل مساحة اسم مستوردة. هذا يجعل مصدر التعليمات البرمجية أقصر وأسهل للقراءة. المثال التالي يعيد كتابة المثال السابق لاستخدام xD كاسم مستعار لمساحة الاسم System.Xml.

' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports xD = System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As xD.XmlDocument

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

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

تسمية الإرشادات

عند تعريف عنصرا برمجة أو أكثر لهما نفس الاسم، قد ينتج التباس في الاسم عندما يحاول المحول البرمجي حل مرجع لهذا الاسم. إذا كان هناك تعريف أو أكثر في النطاق، أو إذا لم يكن هناك أي تعريف في النطاق, يكون المرجع غير قابل للحل. ‏‫للحصول على مثال، راجع "مثال مرجع مؤهل" في صفحة التعليمات هذه.

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

النسخ المتماثل

عند برمجة عنصرين يشتركان في نفس الاسم، يمكن لأحدهما إخفاء, أو تظليل الأخر. لا يتوفر العنصر المظلل كمرجع، بدلاً من ذلك عندما تستخدم التعليمات البرمجية الخاصة بك اسم العنصر المظلل, يقوم برنامج التحويل البرمجي Visual Basic بحله إلى العنصر الذي يقوم بتظليله. للحصول على شرح أكثر تفصيلاً مع الأمثلة راجع التظليل في Visual Basic.

راجع أيضًا:

المهام

كيفية القيام بما يلي: تعديل خصائص المشروع وإعدادات التكوين

المرجع

استيراد كشف (مساحة الاسم و نوع NET.)

عامل تشغيل Visual Basic) New)

عام (Visual Basic)

المبادئ

أسماء العنصر المعرف

الصفات المميزة للعنصر المعلن

المتغيرات في Visual Basic