تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مساعدة بخصوص كود الحفظ
#12
العفو أخي ay.alhaj

الـ Function ـ ( FindAllChildren

تستخدم الـ Attribute
<Runtime.CompilerServices.Extension()>


ماذا يعني هذا الكلام ؟
الـ Extension
هي ميزة يمكنك إستخدامها مع أي كائن من كائنات الـ NET. وهي موجودة إبتداءً من الـ NET Framework 3.5.
ما فائدتها وكيف يتم إستخدامها ؟


سأشرح لك الموضوع بمثال لتتضح الفكرة قليلاً :

تخيل أن لديك ( على سبيل المثال ) كنترول من نوع PictureBox , ( مثلاً وليس حصراً على الكنترولات , بل مع أي كائن كان , حتى مع الـ Object )

أنت الآن تريد أن تظيف Sub أو Function جديدة على هذا الكائن ( أمر ليس من الأوامر الإفتراضية الخاصة بهذا الكائن , أمر خاص بك أنت ).
مثلاً : أريد أن أقوم بإنشاء Sub يقوم بحفظ الصورة الموجودة في الـ PictureBox في القرص الصلب في مكان محدد (أو حتى في قاعدة البيانات ) وبعض الأمور التي تخصك قبل حفظ الصورة.
المعتاد أنك ستقوم بإستدعاء هذا الأمر وترسل له الـ PictureBox أو الصورة ليقوم بالعمل المطلوب.

دعنا نسمي الـ Sub بـ ( SaveMyPhoto )

كود :
   Public Sub SaveMyPhoto(ByVal PicBox As PictureBox)
       ' PicBox ستبداء الآن بإستخدام الـ
       ' وإجراءات وتحقق ومن هذة الأمور المعتادة
   End Sub

المعتاد أنك ستنادي هذا الأمر بهذة الطريقة :
كود :
SaveMyPhoto(Me.PictureBox1)


لكن بإستخدام الـ Extension مع الـ Sub الذي قمنا بإنشائة ( SaveMyPhoto )
كود :
   <System.Runtime.CompilerServices.Extension()>
   Public Sub SaveMyPhoto(ByVal PicBox As PictureBox)
       ' PicBox ستبداء الآن بإستخدام الـ
       ' وإجراءات وتحقق ومن هذة الأمور المعتادة
   End Sub


الآن يمكنك إستدعاء الأمر هكذا :
كود :
Me.PictureBox1.SaveMyPhoto()


لاحظ :
أصبح الأمر ( SaveMyPhoto ) أحد أوامر الكائن  الـ PictureBox , وأي كائن  PictureBox في كامل المشروع أصبح يمتلك هذا الأمر الجديد





 الـ Extension يجب أن تكون في Module ولا تقبل أن تكون في مكان آخر !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  Huh  لماذا ؟
كما شرحت في الأعلى أن كل  الـ PictureBox في المشروع أصبحوا يمتلكون هذا الأمر , لذلك لا يمكن جعلها في كلاس لأنها عامة لأي كائن في المشروع من نوع PictureBox



مثال آخر : وهو الموجود لديك الآن ( الـ Function ـ FindAllChildren )
وظيفتها إرجاع كل الأبناء تحت كنترول معين نحن نحددة
كود :
   <System.Runtime.CompilerServices.Extension()>
   Public Function FindAllChildren(ByRef StartingContainer As Control) As List(Of System.Windows.Forms.Control)
       ' الكود المعتاد
   End Function

لاحظ يوجد parameter باسم StartingContainer 
نوعة Control

هذا يعني أن أي كائن من نوع Control ستجد فية هذة الوظيفة الجديدة , Control يشمل كل الأدوات التي تظهر على الشاشة من ضمنها النافذة كذلك
Control عام أكثر
بإمكانك تغيير Control وإستخدام شيء محدد , مثلاً Panel أو Button

نوع الناتج من الوظيفة هو  List(Of System.Windows.Forms.Control)    : o
يمكنك تغييرة إلى أي نوع أنت تحتاج إلية طبعاً كما هو معروف.

الـ parameter الأول حصرياً خاص بتحديد نوع الكائن الذي سيتأثر بهذة الوظيفة

بإمكانك إضافة parameter آخر ( اسميتة Args ) وهو لتمرير أي بيانات لهذة الوظيفة 
كود :
   <System.Runtime.CompilerServices.Extension()>
   Public Function FindAllChildren(ByRef StartingContainer As Control, ByVal Args As String) As List(Of System.Windows.Forms.Control)
       ' الكود المعتاد
   End Function


وسيصبح الكود للتنفيذ هكذا :
كود :
Me.FindAllChildren("My Args")






بإمكان تغيير النوع إلى String
وستجد هذة الوظيفة في كل متغير من نوع String
كود :
   <System.Runtime.CompilerServices.Extension()>
   Public Sub ShowMyText(ByVal YourText As String)
       MsgBox(YourText)
   End Sub


وتستخدم هكذا :
كود :
Me.TextBox1.Text.ShowMyText

أو هكذا :
كود :
       Dim MyName As String = "Abdulla Aldosari"

       MyName.ShowMyText










 الـ Extension تدعم هذة الطرق فقط :
  • Classes (reference types) o

  • Structures (value types) o

  • Interfaces

  • Delegates

  • ByRef and ByVal arguments

  • Generic method parameters

  • Arrays





تحياتي .
الرد }}}
تم الشكر بواسطة: ay.alhaj , princelovelorn , ابراهيم ايبو , elgokr


الردود في هذا الموضوع
مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 02-10-18, 07:01 AM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 02-10-18, 03:39 PM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 02-10-18, 06:22 PM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 02-10-18, 07:26 PM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 02-10-18, 09:22 PM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 02-10-18, 10:17 PM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 03-10-18, 07:36 AM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 03-10-18, 04:09 PM
RE: مساعدة بخصوص كود الحفظ - بواسطة عبدالله الدوسري - 03-10-18, 06:08 PM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 03-10-18, 07:38 PM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 04-10-18, 12:19 AM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 04-10-18, 03:57 PM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 04-10-18, 08:07 PM
RE: مساعدة بخصوص كود الحفظ - بواسطة ay.alhaj - 04-10-18, 10:22 PM


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


يقوم بقرائة الموضوع: