ذكرني خطأ واجهه أحد الإخوة في أحد المنتديات بموضوع قديم لي بعنوان التحميل الزائد للمعاملات Operators Overloading الذي أرجو من كل من يريد فهم ما سأقوم به هنا بقراءة وفهم الموضوع المذكور جيدا قبل المتابعة هنا لأنني سأورد خطوات سريعة فقط هنا
فمثلا إن كنت تريد القيام بعملية ضرب قيمة ما يوجد داخل صندوق النصوص بـ 10 مثلا فكلكم سيقول أن بيئة التطوير لن تقبل الكود التالي
a = TextBox1 * 10
وفي موضوعي هذا سأقوم بإقناع بيئة التطوير بقبوله تطبيقا على موضوعي القديم
- أنشئ مشروعا جديدا وضع فيه صندوق نصوص و زر أوامر فقط
- من قائمة Project اختر الأمر Add Class و سم الفئة الجديدة MyTextBox وسنرثها من صندوق النصوص العادي المستخدم
- أدخل الكود التالي في الفئة الجديدة الذي سيكون الكود الكامل للفئة
Public Class MyTextBox Inherits TextBox Public Shared Operator *(ByVal Op1 As MyTextBox, ByVal op2 As Integer) As Integer Return (CInt(Op1.Text) * op2) End Operator Public Shared Operator *(ByVal op2 As Integer, ByVal Op1 As MyTextBox) As Integer Return (CInt(Op1.Text) * op2) End Operator End Class
- اعمل build للمشروع
- في Solution Explorer اضغط الزر Show All Files ثم وسع العقدة Form1.vb وافتح محرر الكود الخاص بالملف Form1.Designer.vb واستبدل النص System.Windows.Forms.TextBox أينما ورد باسم فئتنا الجديدة MyTextBox
- قم بالحفظ وأغلق كافة الملفات المفتوحة ثم قم بفتح محرر النماذج الخاص بـ Form1 وانقر نقرا مزدوجا على الزر ليتم إضافة معالج حدث للنقر على زر الأوامر وضع فيه الكود التالي
Dim a As Integer = TextBox1 * 34 Dim b As Integer = 65 * TextBox1 MsgBox(a.ToString & vbCrLf & b.ToString)
سترى نتيجة الكود الذي وضعناه في فئتنا الجديدة أن صندوق النصوص أصبح يقبل عملية الضرب مباشرة بدون استخدام الخاصية Text و دوال التحويل بين الأنواع