هذا الموضوع تطبيق على موضوع قديم لي الطرائق المُوَسِّعة Extension Methods فيرجى قراءته وفهمه قبل المتابعة هنا
- أنشئ مشروعا جديدا من النوع Windows Forms Application كي نقوم بالعمل عليه
- من قائمة File ومن القائمة الفرعية ADD أضف مشروعا جديدا للمشروع الحالي من النوع Class Library وقم بتسميته TestExtendingLib
في ملف الكود الخاص بالمكتبة أضف في بدايته المراجع التالية الضرورية لعمل مثالنا هنا بعد التأكد من أنك قد أضفت المراجع المناسبة لها من صفحة References من خصائص My Project
Imports System.Runtime.CompilerServices Imports System.Math Imports System.Drawing Imports System.Windows.Forms
- استبدل التعريف
Public Class Class1 End Class
بالتعريف
Public Module TestExtending End Module
- انتهت عملية التهيئة الآن وأصبحنا جاهزين لإضافة توسعاتنا
- سأبدا بإضافة الوظيفة Alert لصندوق النصوص التي ستحول لون الخلفية له إلى الأحمر والكتابة إلى الأصفر عند استدعائها - داخل تعريف الـ Module السابق أدخل الكود التالي
<Extension()> _ Sub Alert(ByVal TxtBx As TextBox) TxtBx.Font = New Font(TxtBx.Font, FontStyle.Bold) TxtBx.ForeColor = Color.Yellow TxtBx.BackColor = Color.Red End Sub
- وسنضيف وظيفة أخرى لتوسيع النوع String بحيث تحول القيمة الموجودة في السلسلة النصية إلى Double ثم تضربها بالعدد الممرر وتعيد الناتج
<Extension()> _ Function Multiply(ByVal InString As String, _ ByVal Multply As Double) As Double Return CDbl(InString) * Multply End Function
- قم بعمل Build للمكتبة TestExtending
- من أجل التجربة انقر بزر الفأرة اليميني على تطبيق ويندوز الذي أنشأناه في البداية ثم اضغط Add Reference وأضف مرجعا للمكتبة التي أنشأناه للتو ثم أضف الاستيراد التالي في بداية كود النموذج
Imports TestExtendingLib.TestExtending
- أضف TextBox و Button و ListBox للنموذج ثم انقر نقرا مزدوجا على الزر لإنشاء حدث النقر عليه ثم أدخل الكود التالي لاختبار الوظيفتين اللتان أضفناهما سابقا
Me.TextBox1.Text = "123.456" Me.TextBox1.Alert() Dim s As String = Me.TextBox1.Text MsgBox(s.Multiply(13))
شغل البرنامج واضغط على الزر وانظر النتيجة
- كما ترى أضفنا لصندوق النصوص وظيفة جديدة لم تكن موجودة سابقا تسمى Alert يمكننا الاستفادة منها وتطبيقها على أي صندوق نصوص في أي مشروع نريده فقط بإضافة المكتبة والاستيراد المناسب كما رأينا سابقا كما أضفنا أيضا الوظيفة Multiply لنوع البيانات String ويمكن استخدامه أيضا في أي مشروع بنفس الطريقة
- يمكننا أيضا إضافة وظيفة لـ ListBox لتفريغها وملئها ببعض البيانات مثلا بنفس الطريقة حيث يمكنك إضافة الكود التالي للمكتبة ثم عمل ReBuild لها وتجربة كيف أن صندوق القائمة أصبح يمتلك الوظيفة الجديدة
<Extension()> _
Sub ClearAndFillComputerCorp(ByVal LstBx As ListBox)
LstBx.Items.Clear()
LstBx.Items.Add("Micrsoft")
LstBx.Items.Add("Sun")
LstBx.Items.Add("Intel")
LstBx.Items.Add("IBM")
LstBx.Items.Add("Borland")
LstBx.Items.Add("CyberLink")
LstBx.Items.Add("Nvidia")
LstBx.Items.Add("Gigabyte")
LstBx.Items.Add("MSI")
End Sub- كما يمكننا أيضا إضافة وظيفة للتحكم Button تغير من مظهره بنفس الطريقة
<Extension()> _ Sub YellowOnDarkBlue(ByVal Btn As Button) Btn.Font = New Font(Btn.Font, FontStyle.Bold) Btn.ForeColor = Color.Yellow Btn.BackColor = Color.DarkBlue End Sub
- الآن أي وظائف متكررة تستخدمها يمكنك إضافتها للتحكمات أو الفئات الموجودة وأصبحت وكأنه وظائف أساسية وذلك بإنشاء المكتبة الخاصة بك واستيرادها للمشروع
مرفق مثال عملي