تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس السادس عشر : ال OverLoading
#2
كاتب الرد
أبو عابد
متقاعدد
كنت ناوي أضع سؤال عن التحميل الزائد للدوال ولكن بما أنك تطرقت لها هنا فسوف أضع سؤالي هنا ، بعد إذنك يعني


كيف نجمع بين هذين الإجراءين في الكلاس الواحد ؟

كود :
Public Sub New(ByVal UserName As String)        
      
        _UserName = UserName

End Sub

كود :
Public Sub New(ByVal Email As String)        
      
        _Email = Email

End Sub

أعرف أن المشكلة أن كلاهما String

ولكن كيف لي أن أقوم بمثل هذا ؟
------------------------------------------
كاتب الرد
DreamNet
مبرمج متقاعد
السلام عليكم ورحمة الله وبركاته
بالنسبة للتحميل الزائد فان له ضوابط طبعا للاستعمال
http://www.devx.com/dotnet/Article/9303/1954
------------------------------------------------------------

كاتب الرد
أبو عابد
متقاعدد
و علكيم السلام ورحمة الله وبركاته

أهلاً بك DreamNet

أنت تعرف أن المشكلة أنه الإجراء المشيد للكلاس New

و لو كان غيره لأمكن تغييراسم الدالة و انتهت المشكلة .

لذلك أبحث عن طريقة لتمرير ، ولو ملتوية كهذه :
كود :
[CODE]        Sub New(ByVal intID As Integer)
            Me._ID = intID
        End Sub
        Sub New(ByVal intAge As Int64)
            Me._Age = intAge
        End Sub
[/CODE]

-------------------------------------------.
كاتب الرد
Boutemine Oualid
كبار الشخصيات
جربت كل الطرق التي أعرفها و لم أجد الحل،
حاولت بهذه الطريقة و لم تنفع أيضا
كود :
PublicClass Car
           Private _Model AsString
           Private _Name AsString

           PublicSubNew(ByVal Name AsString)

           EndSub

           PublicSubNew(ByRef Model AsString, OptionalByVal maskParam As Object = Nothing)
          EndSub
EndClass

هل من حل
-------------------------------------------------------
كاتب الرد احمد جمال
المشرف العام

للاسف لن يوجد حل فعلياً فهذا شرط اساسي في عمليات ال 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

    Private _Engine As Object
    Private _UseName As String
    Private _Email As String

    Sub New(ByVal Engine As Object, ByVal UseName As String)

    End Sub

    Sub New(ByVal Email As String, ByVal Engine As Object)

    End Sub
End Class
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
الدرس السادس عشر : ال OverLoading - بواسطة oneyemenweb2_mybb_import4801 - 08-10-12, 06:04 PM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم