![]() |
|
الدرس السادس عشر : ال OverLoading - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة .net 2008 . لنبدأ سوياً (http://vb4arb.com/vb/forumdisplay.php?fid=138) +---- الموضوع : الدرس السادس عشر : ال OverLoading (/showthread.php?tid=5414) |
الدرس السادس عشر : ال OverLoading - oneyemenweb2 - 08-10-12 منقول من المنتدؤ القديم كاتب المقال احمد جمال المشرف العام بسم الله الرحمن الرحيم . السلام عليكم ورحمة الله وبركاته . من اهم مبادئ ال OOP هي تطبيق مبدئ ال Overloading ، حيث يمكن تسمية عدة طرق او دوال بنفس الاسم ما دام هناك تغيير في البارميترس . ابسط مثال على عمليات ال Overloading هي دالة MessageBox.Show() في ال Windows Forms . لو جربت ستجد هذه الأوامر مثلاً : كود : MessageBox.Show(string text);وغيرها ايضاً ضمن 7 اوامر ، كل واحدة منها عبارة عن دالة خاصة ولهم جميعاً نفس الاسم ، لنتصور لو لم يكن مبدأ Overloading موجوداً ، كنا سنضطر لكتابة دوال بالشكل التالي : كود : ShowWithStringأما الآن ولتسهيل الاستخدام تجدهم جميعاً بنفس الاسم ، وهذا ما يسبب سهولة الاستخدام . لتطبيق مبدأ ال OverLoading في دوالك يمكنك كتابة كود بالشكل التالي - لعملية الجمع مثلاً في حين انك لا تدري هل يمرر لك في الكلاس قيم من نوع int او من نوع double - : C#: كود : static int Add(int x, int y) { return x + y; } static double Add(double x, double y) { return x + y; } static long Add(long x, long y)vb.net: كود : Private Shared Function Add(ByVal x As Integer, ByVal y As Integer) As Integer يمكن ان نعيد الكرة مرة أخرى مع ال Constructor ، فيمكنك عمل عدد منها حسب احتياج المستخدم ، لو عدنا لمثالنا Person يمكن تعريف ال Constructors بالشكل التالي : c#: كود : class PersonVB.net: كود : Class Person وبهذه الطريقة يمكننا انشاء كائنات بأحد الطرق التالية : C#: كود : Person MyEmpolyee = new Person();كود : Dim MyEmpolyee As New Person() الدرس السادس عشر : ال OverLoading - oneyemenweb2 - 08-10-12 كاتب الرد أبو عابد متقاعدد كنت ناوي أضع سؤال عن التحميل الزائد للدوال ولكن بما أنك تطرقت لها هنا فسوف أضع سؤالي هنا ، بعد إذنك يعني كيف نجمع بين هذين الإجراءين في الكلاس الواحد ؟ كود : Public Sub New(ByVal UserName As String) كود : Public Sub New(ByVal Email As String) أعرف أن المشكلة أن كلاهما String ولكن كيف لي أن أقوم بمثل هذا ؟ ------------------------------------------ كاتب الرد DreamNet مبرمج متقاعد السلام عليكم ورحمة الله وبركاته بالنسبة للتحميل الزائد فان له ضوابط طبعا للاستعمال http://www.devx.com/dotnet/Article/9303/1954 ------------------------------------------------------------ كاتب الرد أبو عابد متقاعدد و علكيم السلام ورحمة الله وبركاته أهلاً بك DreamNet أنت تعرف أن المشكلة أنه الإجراء المشيد للكلاس New و لو كان غيره لأمكن تغييراسم الدالة و انتهت المشكلة . لذلك أبحث عن طريقة لتمرير ، ولو ملتوية كهذه : كود : [CODE] Sub New(ByVal intID As Integer)-------------------------------------------. كاتب الرد Boutemine Oualid كبار الشخصيات جربت كل الطرق التي أعرفها و لم أجد الحل، حاولت بهذه الطريقة و لم تنفع أيضا كود : PublicClass Carهل من حل ------------------------------------------------------- كاتب الرد احمد جمال المشرف العام للاسف لن يوجد حل فعلياً فهذا شرط اساسي في عمليات ال overloading لا يمكن تغييره ، إلا انه يمكن التحايل عليه ببعض الطرق مثل : كود : Public Sub New(ByVal UserName As String, ByVal Type as Integer)حيث يتم ارسال قيمة 0 او 1 لتحديد نوع المتغير المرسل . الحل الآخر بارسال النص مرفق في نهايته برقم /0 او /1 مثلاً . للاسف ال Optional لا يتم الاعتبار بها في الشروط . لو لاحظت لن تجد MessageBox.Show تحدد ال Text فقط واخر لاظهار العنوان فقط ، إنما هناك واحد لاظهار النص وآخر لاظهار كل من العنوان والنص . إذن الحل الامثل في هذه الحالة هو تمرير بارميتر اضافي يحتوي على 0 او 1 لتحديد فيما إذا كان المرسل بريد الكتروني ام اسم . --------------------- أبو عابد متقاعد توصلت لحل (ملتوي طبعاً) في مشروعي الحالي أنا أمرر 2 بارمتر للمشيد ، ولذلك نحج معي هذا الحل كود : Public Class Users |