الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Function & API Wrapping & Overloading in VB.NET

مغلق
بدأه hazzoom في 26 سبتمبر 2005 · 12 رد · 2,136 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته :

قبل قراءة الدرس يجب عليك قراءة درس 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 من الكلاس واستخدم الدالة ستري التالي :

26_09_05_07_42_51_1127745771ss.JPG

هذا هو الـ Overloading , أليس بسيطا وسهلا ,

ان كان توفيق فمن الله وان كان تقصير فمني وان كان لديكم أي تعديلات أو آرآء , أو أي أجزاء غير مفهومه أرجو التعليق وان وجد أحد اني نسيت جزء ما أو قصرت في الشرح فأرجو تنبيهي واسلام عليكم ورحمة الله .......,,,

تم تعديل هذه المشاركة بواسطة hazzoom في 28 سبتمبر 2005 في 06:13

#2

جزاك الله خيراً استاذ hazzoom على هذا الشرح الرائع , وجعله الله في ميزان حسناتك ..

لا إله الإ الله وحده لا شريك له الملك وله الحمد يحي ويميت وهو على كل شئ قدير

------------------------------------------------------------------------------------------------

gazabigBanner.jpg

------------------------------------------------------------------------------------------------

#3

تعقيب بسيط أخ hazzoom

بخصوص الـ overloading كلامك صحيح بس ممكن يكون الاختلاف في نوع المعاملات وليس عددها

مثلا لدينا إجراء

public sub DoMath(byval X as integer, Y As Long) as Long

      return (x + y)*3

end sub

هو بقدر اعمل الها overloading كما يلي

public sub DoMath(byval X as short, Y As Long) as Long

      return (x + y)*3

end sub

وأيضا

public sub DoMath(byval X as double, Y As double) as double

      return (x + y)*3

end sub

وكما قلت أنت أيضا بتغيير عدد المعاملات

public sub DoMath(byval X as integer, Y As Long, Z as Integer) as Long

      return (x + y+Z)

end sub

أي المهم هنا هو تغيير الـ Signature التوقيع الخاص بالإجرائية - أي الإختلاف يكون إما بنوع المعاملات الممررة للإجراء أو بعددها أو بكليهما مع الانتباه إلى أن المعاملات الاختيارية Optional لا تحتسب من ضمن التوقيع Signature الخاص بالإجرائية

والله أعلم

تم تعديل هذه المشاركة بواسطة samerselo في 27 سبتمبر 2005 في 15:59

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#4

كلامك صحيح أخي محمد وأعتقد اني قلته :

اقتباس
2- أن تختلف معاملات الدوال في نوعها String,integer و هكذا .......,,,

وشكرا علي المتابعه ,,,

#5

جزاك الله اخي hazzoom

وجعلك من معتمريه في رمضان ومن حججاجه هذه السنة وفتح الله عليك

#6

جزيت خيرا وكفيت شرا

وتقبل الله منا ومنكم الصيا وكل عام وانتم بخير

استغفر الله العظيم من كل ذنب وأتوب إليه

#7

ايه يا واد يا حازم الجمال ده :D

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#9

اخي حازم انا عندي سؤال بسيط الدالة return تقوم باعادة النتيجة لكن السؤال هذه الدالة الى من تقوم باعادة انتيجة الىمتغير او ماذا(من يستقبلها)؟؟؟ مثلا لو وضعنا هذا

textbox1.text=Sum.Sum((1,2))

فهل صندوق النص يستقبل العائد من الدالة Return تلقائيا؟؟؟؟

ارجو ان تكون قد فهمت سؤالي

تم تعديل هذه المشاركة بواسطة NO BODY CAN BEAT ME في 9 أكتوبر 2005 في 20:33

تعلم:كيف تشغل برنامجك (قبل) ما يشتغل ال explorer, مثل ال check desk في الوندوز 98 و me

اللهم عطر يومنا بالايمان وانر قلبنا بالقرآن ورزقنا من حيث لانحتسب واجعل لنا سكينة تطمئن بها روحنا واحفظنا من كل سوء اللهم بارك لنا في رجب وشعبان وبلغنا رمضان آمين يارب العالمين

ranneh.com

#11

مشكور أخى

قال رسول الله صلى الله عليه وسلم

يكبر بن أدام ويكبر معه شيئان كثرة المال وطول العمر

صدق رسول الله صلى الله عليه وسلم

قال عمر بن الخطاب رضي الله عنه

نحن قوم أعزنا الله بالإسلام فإذا إبتغينا العزة فى غيره أذلنا الله

#12

لك تقديري وامتناني لما تسعى لتقديمه فلك التميز والحضور اخي hazzoom

وبالتوفيق دائما :lol:

تم تعديل هذه المشاركة بواسطة HnHn في 28 يوليو 2006 في 20:09

سجل ايميلك هنا

googlejb5.gif ليصلك كل ما هو مفيد في عالم البرمجة
#13

واد ياحازم ,,,, عايزين نعمل الـ API Mini Framwork :P

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

هذا الموضوع مغلق.

مواضيع مشابهة