Func and Action Delegates

Generic Delegates

بداية ظهورها كان في نسخة الدوت نت 3.5 و للأسف عندما تبجث علي النت لن تجد موضوعات كثيرة توضح كيفية استخدامها لكن وبشكل عام فإن اغلب ما قرأته كان يتحدث عن استخدامها  في أبسط صورة لها

الحقيقة و لضيق الوقت غالبا ما لايجد المبرمج وقتا كافيا للتعامل مع الكلاسات الجديدة في الدوت نت و للاسف موقع مايكروسوفت غالبا و ابدا لا يوضح اي شئ جديد بالشكل المناسب ودائما لا تجد موضوعات تتعمق في الأمر بشكل يجعلك تفهم تماما كيفية التعامل مع بعض الكلاسات الجديدة في الدوت نت

هنا غالبا عليك أنت أن تقرأ و تقرأ ثم تحاول و تحاول حتي تفهم و من ثم تستطيع أن تستفيد بشكل افضل من أي شئ جديد في الدوت نت

عموما الشئ المبدئي الوحيد الواضح جدا هو أن
 Func and Action Delegates
تقبل متغيرات او باراميتر من اي نوع

و كان اول ما تبادر في ذهني هو هذا السؤال

هل يمكن استخدامها لحفظ الملفات و قراءة الملفات ؟

و كانت الإجابة علي هذا حاضرة في ذهني بشكل مباشر
من المؤكد و بما أنها تقبل متغيرات من اي نوع فبالتالي يمكن أن نستخدمها مع اي كلاس موجود في الدوت نت

Generic Func
ابسط تعريف لها انها عبارة عن دالة في في صورة حدث مثل اي حدث موجود في الدوت نت وهي تقبل باراميتر او تقبل متغيرات من اي نوع و لكنها تستخدم بدون اطلاق للحدث
وعلي ما أظن انها مصممة لكي تستخدم مثل اي دالة نسترجع منها قيمة ما

Generic Action
أبسط تعريف لها هوأنها روتين في صورة حدث مثل اي حدث موجود في الدوت نت وهي تقبل اي باراميتر او تقبل متغيرات من اي نوع
 أيضا و بما أنها من النوع عبارة عن حدث فبالتالي يمكن استخدامها في صورة دالة و ايضا يتم استخدامها بدون استخدام اطلاق للحدث
وعلي ما أعتقد انها مصممة لكي تستخدم مثل اي روتين نكتبه او مثل اي دالة نكتبها

كيفية الاستخدام:

ولتوضيح كيفية الاستفادة سوف أستخدم فكرة بسيطة موجودة في موقع مايكروسوفت

الفكرة عبارة عن كيفية تخزين بعض المعلومات في ملف ثم إعادة قراءة البيانات من نفس الملف باستخدام كل من
 BinaryWriter و BinarrReader

وهذه الفكرة الهدف منها أن تساعد علي توضيح الأمر عندما نقوم بإعادة كتابتهابشكل أخر وذلك باستخدام
 Func and Action Delegates

كتابة و قراءة البيانات باستخدام
 BinaryWriter و BinaryReader

الكود التالي يوضح كيفية قراءة و حفظ تكست في ملف باستخدام
 BinaryReader و BinaryWriter

Private Const fileName As String ".\data.dat"
 
   Private Sub WritetValue(value As String)
 
       Using writer As BinaryWriter = New BinaryWriter(File.Open(fileNameFileMode.Create))
 
           writer.Write(value)
 
           writer.Flush()
 
       End Using
    End Sub

    Private 
Function ReadValue() As String
        Dim result 
As String CType(NothingString)
 
       If (File.Exists(fileName)) Then
            Using reader 
As BinaryReader = New BinaryReader(File.Open(fileNameFileMode.Open))
 
               result reader.ReadString()
 
           End Using
        End 
If
 
       Return result
    End 
Function

  كتابة و قراءة البيانات باستخدام
 Generic Delegates

الكود التالي يوضح كيفية استخدام
 Generic Delegates 
في كتابة نفس الكود أعلاه وهو سيؤدي نفس الهدف وسوف يقوم بحفظ البيانات في ملف


Private Const fileName As String ".\generic.dat"

 
   Private Sub WritetValueWithDelegate(value As String)
 
       Dim writeAction As Action(Of BinaryWriterString) = Sub(writer As BinaryWriterAs String)
 
                                                                Using writer
                                                                     writer
.Write(s)
 
                                                                    writer.Write(True)
 
                                                                    writer.Flush()
 
                                                                End Using
                                                             End Sub

        writeAction
(New BinaryWriter(File.Open(fileNameFileMode.Create)), value)
 
   End Sub

    Private 
Function ReadValueWithDelegate() As String
        Dim func 
As Func(Of BinaryReaderString) = Function(reader As BinaryReader)
 
                                                       Dim result As String CType(NothingString)
 
                                                       If (File.Exists(fileName)) Then
                                                            Using reader
                                                                result 
reader.ReadString()
 
                                                           End Using

                                                        End 
If
 
                                                       Return result
                                                    End 
Function


 
       Return func(New BinaryReader(File.Open(fileNameFileMode.Open)))
 
   End Function 

المصادر المستخدمة:

Func Delegate

Action Delegate

BinaryReader

BinaryWriter
  




Comments

Popular posts from this blog

مقدمة الي تشفير الحروف الأبجدية العربية

VB.NET Translucent Control using GDI+

Add Custom Event to a Class in VB.NET