التظليل في Visual Basic

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

الغرض

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

أنواع التظليل

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

النسخ المتماثل عبر نطاق

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

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

يبين الرسم التوضيحي التالي متغيرات جهازين كليهما باسم temp. المتغير المحليtemp يظلل عضو المتغير temp عند الوصول إليها من داخل إجراء الخاص به p. ومع ذلك، الكلمة الأساسية MyClass تتجاوز التظليل ويقوم بالوصول إلى العضو المتغير.

النسخ المتماثل عبر نطاق

الرسم التخطيطي لرسم التظليل عبر النطاق

للحصول على مثال عن التظليل خلال نطاق راجع كيفية القيام بما يلي: قم بإخفاء متغير مع نفس اسم المتغير الخاص بك تماماً.

تظليل من خلال توريث

إذا كانت الفئة المشتقة عنصر برمجة موروثة غير معرّفة من فئة أساسية, العنصر المعاد تعريفه يظلل العنصر الأصلي. يمكن تظليل أي نوع عنصر مُعلَن أو مجموعة من عناصر التحميل الزائد مع أي نوع آخر. على سبيل المثال، Integer يمكن الظل المتغير إجراء Function . إذا كنت قمت بتظليل إجراء مع إجراء آخر يمكنك استخدام قائمة معلمات مختلفة و نوع إرجاع مختلف.

يبين الرسم التوضيحي التالي فئة أساسية b و الفئة المشتقة d التي ترث من b. تعرّف الفئة الأساسية إجراء باسم proc، و الفئة المشتقة تظللها مع إجراء آخر بنفس الاسم. أول عبارة Call تصل للتظليل proc في فئة مكتسبة. ومع ذلك، الكلمة الأساسية MyBase تتجاوز التظليل ويقوم بالوصول إلى إجراء مظلل في الفئة الأساسية.

تظليل من خلال توريث

الرسم التخطيطي لرسم التظليل عبر التوريث

للحصول على مثال عن التظليل خلال توريث، راجع كيفية القيام بما يلي: قم بإخفاء متغير مع نفس اسم المتغير الخاص بك تماماً و كيفية القيام بما يلي: إخفاء متغير متوارث.

التظليل و مستوى الوصول

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

يظهر المثال التالي على التسلسل هرمي توريث ثلاثة فئات. كل فئة تعرّف أجراء Sub display، ثم كل فئة مشتقة تظلل الإجراء display في الفئة الأساسية الخاصة به.

Public Class firstClass
    Public Sub display()
        MsgBox("This is firstClass")
    End Sub
End Class
Public Class secondClass
    Inherits firstClass
    Private Shadows Sub display()
        MsgBox("This is secondClass")
    End Sub
End Class
Public Class thirdClass
    Inherits secondClass
    Public Shadows Sub display()
        MsgBox("This is thirdClass")
    End Sub
End Class
Module callDisplay
    Dim first As New firstClass
    Dim second As New secondClass
    Dim third As New thirdClass
    Public Sub callDisplayProcedures()
        ' The following statement displays "This is firstClass".
        first.display()
        ' The following statement displays "This is firstClass".
        second.display()
        ' The following statement displays "This is thirdClass".
        third.display()
    End Sub
End Module

في المثال السابق، الفئة المشتقة secondClass تظلل display مع الإجراء Private. عند وحدة نمطية callDisplay تستدعي display في secondClass، في استدعاء التعليمات البرمجية خارج secondClass وبالتالي لا يمكن الوصول للأجراء الخاص display. التظليل فاشل، ويحل المحول البرمجي المرجع إلى إجراء فئة الأساس display.

ومع ذلك، الفئة المشتقة thirdClass يقوم بتعريف display كـ Public، لذلك تعليمات برمجية في callDisplay يمكن الوصول إليه.

الـتظليل و التجاوز.

لا تخلط بين النسخ المتماثل مع التجاوز. كلاهما مستخدم عندما ترث الفئة المشتقة من فئة أساسية، و كلاهما يعيد تعريف عنصر مُعلَن بآخر. لكن هناك اختلافات هامة بينهما. للمقارنة المفصلة ، انظر الفروق بين النسخ و التجاوز.

تظليل و التحميل الزائد

إذا كنت تظلل نفس العنصر الفئة الأساسية بعنصر واحد أو أكثر في الفئة المشتقة الخاص بك, العناصر المظللة تصبح إصدارات محمّلة فوق طاقتها من ذلك العنصر. لمزيد من المعلومات، راجع زيادة تحميل الإجراء.

الوصول إلى عنصر مظلل

عند الوصول إلى عنصر من الفئة المشتقة، أنت تقوم بذلك عبر المثيل الحالي لـ ذلك الفئة المشتقة بشكل طبيعي، وذلك بتأهيل اسم العنصر مع الكلمة الأساسية Me. إذا كانت الفئة المشتقة تظلل العنصر في فئة أساسية "، يمكنك الوصول إلى عنصر الفئة الأساسية بواسطة مؤهلة مع الكلمة الأساسية MyBase.

للحصول على مثال عن الوصول إلى عنصر مظلل راجع كيفية القيام بما يلي: الوصول إلى متغير مخفي بواسطة الفئة المشتقة.

تعريف كائن متغير

كيفية إنشاء متغير الكائن الذي يمكن أن يؤثر على ما إذا كانت الفئة المشتقة يصل إليه عنصر التظليل أو العنصر المظلل. ينشئ المثال التالي كائنين من الفئة المشتقة ولكن يتم التصريح عن كائن الفئة الأساسية "و" أخرى كفئة مشتقة.

Public Class baseCls
    ' The following statement declares the element that is to be shadowed.
    Public z As Integer = 100
End Class
Public Class dervCls
    Inherits baseCls
    ' The following statement declares the shadowing element.
    Public Shadows z As String = "*"
End Class
Public Class useClasses
    ' The following statement creates the object declared as the base class.
    Dim basObj As baseCls = New dervCls()
    ' Note that dervCls widens to its base class baseCls.
    ' The following statement creates the object declared as the derived class.
    Dim derObj As dervCls = New dervCls()
    Public Sub showZ() 
    ' The following statement outputs 100 (the shadowed element).
        MsgBox("Accessed through base class: " & basObj.z)
    ' The following statement outputs "*" (the shadowing element).
        MsgBox("Accessed through derived class: " & derObj.z)
    End Sub
End Class

في المثال السابق، المتغير basObj يتم تعريفه كفئة أساسية. تعيين كائن dervCls إليها تكوّن إجراء تحويل توسيعي ولذلك فهي صالح. ومع ذلك، الفئة الأساسية لا يمكنها الوصول إلى إصدار التظليل للمتغير z في الفئة المكتسبة, لذلك المحول البرمجي حل basObj.z إلى قيمة الفئة الأساسية الأصلية.

راجع أيضًا:

المرجع

الظلال (Visual Basic)

الـتجاوز (Visual Basic)

المبادئ

النطاق في Visual Basic

توسيع و تضييق التحويلات

Me, My, MyBase, and MyClass في Visual Basic

أساسيات التوريث

موارد أخرى

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