السلام عليكم ورحمة الله وبركاته :
قبل قراءة الدرس يجب عليك قراءة درس Classes in VB.NET
الجزء الأول :
**********
لو انك تقوم بعمل برنامج متعلق بالرياضيات وتحتاج الي العمليات الحسابيه كثيرا فهل كل مره ستكتب هذا الكود لجمع رقمين :
Dim x, y As Integer MsgBox(Val(x) + Val(y))
هذا في حالة بسيطه جدا وهي جمع رقمين أما لو طلب منك عمليات حسابيه كبيره وطويله ماذا تفعل !!!
أليس من الأفضل عمل دالة تقوم بعمليه الجمع واستخدامها سهل كالتالي :
myobject.Sum(2, 3)
وظيفة الدرس هو أن نتعلم كيفية عمل دالة تقوم بمثل العمل السابق ,,,
ا- أنشئ Class لكي نعمل فيها بحريه , ,ولكي تنشئ دالة اكتب في داخل الـ Class التالي :
نعلن عن الدالة كالتالي :
Function Sum
وبالضغط علي زر انتر يتم استكمال باقي الكود :
Function Sum() End Function
هذا هو هيكل الدالة والذي سنكتب بداخله كود جمع رقمين مثلا ,
الدالة التي تقوم بجمع رقمين التي عرضتها في البدايه تأخذ الرقمين كـ Parameters , اذن كيف يمكن تمريرها الي الداله ؟؟؟
يمكن تمريرها كالتالي :
داخل القوسين بجانب اسم الدالة قم بكتابة اسم المتغير وكذلك حدد نوعه - كأنك تعلن عن متغير عادي أثناء كتابتك للكود :
Function Sum(x As Integer,y As Integer)
ثم أضغط انتر لتجد أنه تمت كتابة ByVal بجانب كل متغير , هكذا تستطيع دالتك أن تأخذ متغيرات ,
لكن كيف نعود بقيمة حاصل جمع الرقمين ؟
يمكن هذا مباشره عن طريق استخدام عبارة Return وهي من مميزات الدوال , وهذه العباره تتيح أن تعود الدالة بقيمة ما لاستعمالها مره أخري ...,
في داخل كود الدالة اكتب :
Return (x + y)
يمكنك استعمال عبارة Return بطريقه أخري كالتالي :
نعلن عن متغير يحمل قيمة عملية الجمع , ثم نضع فيه حاصل جمع X+Y هكذا :
Dim z As Integer z = (x + y)
ثم نسند المتغير z الي عبارة Return ويكون الكود النهائي للداله هكذا ويفضل توضيح نوع القيمه التي ستعود بها الداله ويكون بجوار المتغيرات من خارج الأقواس :
Function Sum(ByVal x As Integer, ByVal y As Integer) As Integer Dim z As Integer z = (x + y) Return z End Function
جرب أن تستعمل الدالة التي صممناها كما تعلمت من درس الـ Classes in VB.NET :
في حدث Button_Click أنشئ Object من الكلاس ثم استخدم الدالة Sum , واعرض الناتج في رساله :
Dim myobject As New OOP2Class MsgBox(myobject.Sum(2, 3))
الجزء الثاني :
**********
تطبيق : كيف يمكن استخدام تصميم الدوال في تغليف دوال الـ API ???
وهو ما يسمي API Wrapping ,,,
**********************************************************
أولا لكي تغلف دالة من دوال الـ API يجب معرفة الدالة وكذلك معاملاتها ,
مثال : توجد دالتي API تستخدمان لاخفاء واظهار الـ TaskBar :
نعلن عنهم في أول الكلاس كالتالي :
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Int32 Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Int32, ByVal hWndInsertAfter As Int32, ByVal x As Int32, ByVal y As Int32, ByVal cx As Int32, ByVal cy As Int32, ByVal wFlags As Int32) As Int32
ومعاملات هذه الدوال هي .. ونعلن عنها أسفل الدوال مباشره كالتالي , كما نعلن عن متغير يستقبل عنوان الـ TaskBar من النوع Integer :
Const swp_hidewindow = &H80 Const swp_showwindow = &H40 Dim hwnd As Integer
ثم ننشئ دالة لاخفاء الـ TaskBar كالتالي :
Public Function Show_TaskBar()
hwnd = FindWindow("shell_traywnd", "")
SetWindowPos(hwnd, 0, 0, 0, 0, 0, swp_showwindow)
End Functionثم ننشئ دالة لالاظهار الـ TaskBar كالتالي :
Public Function Hide_TaskBar()
hwnd = FindWindow("shell_traywnd", "")
SetWindowPos(hwnd, 0, 0, 0, 0, 0, swp_hidewindow)
End Functionويمكنك استخدام عبارة الـ Return للتأكد من أنه تم الاخفاء والاظهار .....أتركها لكم كتمرين ومن لم يعرف فليسأل ....وأنا في الخدمة ....,,,
أذهب الي الفورم وأنشئ Object من الكلاس واستخدم هاتين الدالتين وانظر النتيجه ..... رائعه ,,,
الجزء الثالث :
***********
ما هو Overloading ؟؟؟
************************
لكي تفهم معني الـ Overloading أشرح لكم المعني النظري الذي فهمته من كتاب ,,,
الكثير منا لديه تليفون محمول (موبايل) - نفسي أشتري واحد - ألم تلاحظ أن بعض أزرار الوظائف تؤدي أكثر من وظيفة !!!
مره تكون وظيفة الزر هي الاتصال ومره قطع الاتصال ومره حذف رساله ومره ............... ,,,,
فكيف يكون نفس الزر ويؤدي أكثر من وظيفة , كذلك سنقوم بعمل أكثر من دالة بنفس الاسم ولكن وظائف مختلفه بشرطين علي الأقل :
1- أن يختلف عدد معاملات كل دالة عن الأخري ,
2- أن تختلف معاملات الدوال في نوعها String,integer و هكذا .......,,,
مثال :
تعالوا نصمم دالتين بنفس الاسم Sum ولكن الأولي تأخذ متغيرين فقط (كما سبق) والثانيه تأخذ 3 متغيرات كالتالي :
التي تأخذ متغيرين صممناها قبل ذلك تعالوا نري الشكل النهائي للدالة التي ستأخذ ثلاثة متغيرات :
Function Sum(ByVal x As Integer, ByVal y As Integer, ByVal z As Integer) As Integer Dim r As Integer r = (x + y + z) Return r End Function
وكما رايتم أضفت متغير جديد لتتماشي مع التعديل ,
حاول استخدام الدالة في الفورم :
أنشئ Object من الكلاس واستخدم الدالة ستري التالي :
هذا هو الـ Overloading , أليس بسيطا وسهلا ,
ان كان توفيق فمن الله وان كان تقصير فمني وان كان لديكم أي تعديلات أو آرآء , أو أي أجزاء غير مفهومه أرجو التعليق وان وجد أحد اني نسيت جزء ما أو قصرت في الشرح فأرجو تنبيهي واسلام عليكم ورحمة الله .......,,,


