خصائص و أساليب التحميل الزائد
التحميل الزائد هو انشاء أكثر من اجراء واحد, مُنشئ مثيل أو خاصية في فئة بنفس الاسم ولكن أنواع مختلفة من الوسيطات.
استخدام التحميل الزائد
التحميل الزائد مفيد بشكل خاص عندما يفرض طراز الكائن أنك تقوم بتطبيق أسماء متطابقة لإجراءات التي تعمل على أنواع بيانات مختلفة. على سبيل المثال، الفئة التي يمكنها عرض أنواع بيانات مختلفة عديدة يمكن أن يكون لديها Display الإجراءات التي تبدو كما يلي:
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
بدون التحميل الزائد, تحتاج إلى إنشاء أسماء مميزة عن كل إجراء على الرغم من أنهم يقومون بنفس الشيء, كما هو موضح تاليا:
Sub DisplayChar(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
الزائد يسهل استخدام خصائص أو أساليب لأنه يوفر اختياراً أنواع بيانات التي يمكن استخدامها. على سبيل المثال، التحميل الزائد Display الأسلوب الذي تم مناقشته سابقا يمكن استدعاؤه بواسطة أي من سطور التعليمات البرمجية التالية:
' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)
في وقت التشغيل Visual Basic الاستدعاءات الإجراء الصحيح بناءً على أنواع البيانات للمعلمات التي تحددها.
قوانين زيادة الحمل
قم بـإنشاء عضو محمل بشكل زائد لفئة بإضافة اثنتين أو أكثر من الخصائص أو الأساليب بنفس الاسم. باستثناء الأعضاء المشتقة المحملة بشكل زائد, عضو محمل بشكل زائد يجب أن يكون لديه قوائم معلمات مختلفه, و الأداه التالية لا يمكن استخدامها كميزة تمييز عند التحميل الزائد لخاصية أو اجراء:
الـمعدّلات مثل ByVal أو ByRef، التي يمكن تطبيقها لعضو أو معلمات العضو.
أسماء المعلمات
أنواع الإرجاع لإجراءات
Overloads الكلمة الأساسية اختياريه عند التحميل الزائد ولكن إذا استخدم أي عضو محمل بشكل زائد Overloads الكلمة الأساسية ثماذا كافة الأعضاء المحملين بشكل زائد بنفس الاسم يحب أن تحدد أيضا هذه الكلمة الأساسية.
الفئات المشتقة يمكنها أن تحمل بشكل زائد الأعضاء الموروثين التي لها معلمات متطابقة وأنواع معلمة, عملية تُعرف بـ تظليل بواسطة الاسم و التوقيع. إذا كانت Overloads الكلمة الأساسية استخدمت عند التظليل بواسطة الاسم و التوقيع, سيتم استخدام تطبيق الفئة المشتقة للعضو بدلاً من التطبيق في الفئة الأساسية وكل التحميلات الزائده الأخرى لذلك العضو ستكون متوفرة لمثيلات الفئة المشتقة.
إذا كانت Overloads الكلمة الأساسية يتم تجاهلها عند التحميل الزائد لعضو موروث مع عضو له معلمات متطابقة و أنواع المعلمات بالتالي يسمى التحميل الزائد تظليل بواسطة اسم. تظليل حسب الاسم يقوم باستبدال التطبيق الموروث لعضو, ويقوم بعمل كافة التحميلات الزائدة الأخرى لمثيلات للفئة المشتقة و أتباعه.
Overloads و Shadows المعدّلات لا يمكن استخدام كليهما مع نفس الخاصية أو الأسلوب.
المثال
ينشئ المثال التالي أساليب محملة بشكل زائد التي تقبل اما String أو Decimal تمثيل مقدار دولار ويقوم بإرجاع سلسلة تحتوي على ضريبة المبيعات.
لـاستخدام هذا المثال لإنشاء أسلوب محمل بشكل زائد
افتح مشروع جديد و إضافة فئة بالاسم TaxClass.
قم بإضافة التعليمات البرمجية التالية إلى فئة TaxClass .
Public Class TaxClass Overloads Function TaxAmount(ByVal decPrice As Decimal, ByVal TaxRate As Single) As String TaxAmount = "Price is a Decimal. Tax is $" & (CStr(decPrice * TaxRate)) End Function Overloads Function TaxAmount(ByVal strPrice As String, ByVal TaxRate As Single) As String TaxAmount = "Price is a String. Tax is $" & CStr((CDec(strPrice) * TaxRate)) End Function End Class
قم بـإضافة الإجراء التالي إلى النموذج الخاص بك.
Sub ShowTax() ' 8% tax rate. Const TaxRate As Single = 0.08 ' $64.00 Purchase as a String. Dim strPrice As String = "64.00" ' $64.00 Purchase as a Decimal. Dim decPrice As Decimal = 64 Dim aclass As New TaxClass 'Call the same method with two different kinds of data. MsgBox(aclass.TaxAmount(strPrice, TaxRate)) MsgBox(aclass.TaxAmount(decPrice, TaxRate)) End Sub
قم بـإضافة زر إلى النموذج الخاص بك وقم باستدعاء ShowTax الإجراء من Button1_Click حدث الزر.
قم بـتشغيل المشروع ثم انقر فوق الزر في النموذج لاختبار الاجراء ShowTax المحمل بشكل زائد.
في وقت التشغيل يقوم المحول البرمجي باختيار الدالة المحملة بشكل زائد المناسبة التي تطابق المعلمات قيد الاستخدام. عند النقر فوق الزر, يتم استدعاء الأسلوب المحمل بشكل زائد أولا مع Price المعلمة التي هي سلسلة والرسالة "السعر هو سلسلة". "الضريبة $5.12"يتم عرضها. TaxAmount يتم استدعاؤها مع Decimal القيمة مرة ثانية و الرسالة "هو السعر عدد عشري". "الضريبة $5.12"يتم عرضها.