14-01-16, 09:17 AM
السلام عليكم ورحمة الله وبركاته
الهدف:
الهدف من هذا الموضوع هو مشاركة بعض الافكار البرمجية
مقدمة:
Generic Delegates
بداية ظهورها كان في نسخة الدوت نت 3.5 و للأسف عندما تبجث علي النت لن تجد موضوعات كثيرة توضح كيفية استخدامها لكن وبشكل عام فإن اغلب ما قرأته كان يتحدث عن استخدامها في أبسط صورة لها
الحقيقة و لضيق الوقت غالبا ما لايجد المبرمج وقتا كافيا للتعامل مع الكلاسات الجديدة في الدوت نت و للاسف موقع مايكروسوفت غالبا و ابدا لا يوضح اي شئ جديد بالشكل المناسب ودائما لا تجد موضوعات تتعمق في الأمر بشكل يجعلك تفهم تماما كيفية التعامل مع بعض الكلاسات الجديدة في الدوت نت
هنا غالبا عليك أنت أن تقرأ و تقرأ ثم تحاول و تحاول حتي تفهم و من ثم تستطيع أن تستفيد بشكل افضل من أي شئ جديد في الدوت نت
عموما الشئ المبدئي الوحيد الواضح جدا هو أن Func and Action Delegates تقبل متغيرات او باراميتر من اي نوع
و كان اول ما تبادر في ذهني هو هذا السؤال
هل يمكن استخدامها لحفظ الملفات و قراءة الملفات ؟
و كانت الإجابة علي هذا حاضرة في ذهني بشكل مباشر
من المؤكد و بما أنها تقبل متغيرات من اي نوع فبالتالي يمكن أن نستخدمها مع اي كلاس موجود في الدوت نت
Generic Func
ابسط تعريف لها انها عبارة عن دالة Function في صورة EventHandler او في صورة حدث مثل اي حدث موجود في الدوت نت وهي تقبل باراميتر او تقبل متغيرات من اي نوع و لكنها تستخدم بدون استخدام RaisEvent
وعلي ما أظن انها مصممة لكي تستخدم مثل اي دالة نسترجع منها قيمة ما
Generic Action
أبسط تعريف لها هو أنها روتين Method في صورة EventHandler أو في صورة حدث مثل اي حدث موجود في الدوت نت وهي تقبل اي باراميتر او تقبل متغيرات من اي نوع أيضا و بما أنها من النوع Delegate فبالتالي يمكن استخدامها في صورة دالة و ايضا يتم استخدامها بدون استخدام جملة RaisEvent
وعلي ما أعتقد انها مصممة لكي تستخدم مثل اي روتين نكتبه او مثل اي دالة نكتبها
كيفية الاستخدام:
ولتوضيح كيفية الاستفادة من Generic Delegates سوف أستخدم فكرة بسيطة موجودة في موقع مايكروسوفت
الفكرة عبارة عن كيفية تخزين بعض المعلومات في ملف ثم إعادة قراءة البيانات من نفس الملف باستخدام كل من BinaryWriter و BinarrReader
وهذه الفكرة الهدف منها أن تساعد علي توضيح الأمر عندما نقوم بإعادة كتابتهابشكل أخر وذلك باستخدام Func and Action Delegates
كتابة و قراءة البيانات باستخدام BinaryWriter و BinaryReader
الكود التالي يوضح كيفية قراءة و حفظ String في ملف باستخدام BinaryReader و BinaryWriter
كتابة و قراءة البيانات باستخدام Generic Delegates
الكود التالي يوضح كيفية استخدام Generic Delegates في كتابة نفس الكود أعلاه وهو سيؤدي نفس الهدف وسوف يقوم بحفظ البيانات في ملف
المصادر المستخدمة:
Func Delegate
Action Delegate
BinaryReader
BinaryWriter
في المرفقات ستجدون نسخة من الكود مع توضيح لكيفية استخدامه
الكود بنسخة الفيجوال استوديو 2015
تقبلوا تحياتي
الهدف:
الهدف من هذا الموضوع هو مشاركة بعض الافكار البرمجية
مقدمة:
Generic Delegates
بداية ظهورها كان في نسخة الدوت نت 3.5 و للأسف عندما تبجث علي النت لن تجد موضوعات كثيرة توضح كيفية استخدامها لكن وبشكل عام فإن اغلب ما قرأته كان يتحدث عن استخدامها في أبسط صورة لها
الحقيقة و لضيق الوقت غالبا ما لايجد المبرمج وقتا كافيا للتعامل مع الكلاسات الجديدة في الدوت نت و للاسف موقع مايكروسوفت غالبا و ابدا لا يوضح اي شئ جديد بالشكل المناسب ودائما لا تجد موضوعات تتعمق في الأمر بشكل يجعلك تفهم تماما كيفية التعامل مع بعض الكلاسات الجديدة في الدوت نت
هنا غالبا عليك أنت أن تقرأ و تقرأ ثم تحاول و تحاول حتي تفهم و من ثم تستطيع أن تستفيد بشكل افضل من أي شئ جديد في الدوت نت
عموما الشئ المبدئي الوحيد الواضح جدا هو أن Func and Action Delegates تقبل متغيرات او باراميتر من اي نوع
و كان اول ما تبادر في ذهني هو هذا السؤال
هل يمكن استخدامها لحفظ الملفات و قراءة الملفات ؟
و كانت الإجابة علي هذا حاضرة في ذهني بشكل مباشر
من المؤكد و بما أنها تقبل متغيرات من اي نوع فبالتالي يمكن أن نستخدمها مع اي كلاس موجود في الدوت نت
Generic Func
ابسط تعريف لها انها عبارة عن دالة Function في صورة EventHandler او في صورة حدث مثل اي حدث موجود في الدوت نت وهي تقبل باراميتر او تقبل متغيرات من اي نوع و لكنها تستخدم بدون استخدام RaisEvent
وعلي ما أظن انها مصممة لكي تستخدم مثل اي دالة نسترجع منها قيمة ما
Generic Action
أبسط تعريف لها هو أنها روتين Method في صورة EventHandler أو في صورة حدث مثل اي حدث موجود في الدوت نت وهي تقبل اي باراميتر او تقبل متغيرات من اي نوع أيضا و بما أنها من النوع Delegate فبالتالي يمكن استخدامها في صورة دالة و ايضا يتم استخدامها بدون استخدام جملة RaisEvent
وعلي ما أعتقد انها مصممة لكي تستخدم مثل اي روتين نكتبه او مثل اي دالة نكتبها
كيفية الاستخدام:
ولتوضيح كيفية الاستفادة من Generic Delegates سوف أستخدم فكرة بسيطة موجودة في موقع مايكروسوفت
الفكرة عبارة عن كيفية تخزين بعض المعلومات في ملف ثم إعادة قراءة البيانات من نفس الملف باستخدام كل من BinaryWriter و BinarrReader
وهذه الفكرة الهدف منها أن تساعد علي توضيح الأمر عندما نقوم بإعادة كتابتهابشكل أخر وذلك باستخدام Func and Action Delegates
كتابة و قراءة البيانات باستخدام BinaryWriter و BinaryReader
الكود التالي يوضح كيفية قراءة و حفظ String في ملف باستخدام BinaryReader و BinaryWriter
PHP كود :
Private Const fileName As String = ".\data.dat"
Private Sub WritetValue(value As String)
Using writer As BinaryWriter = New BinaryWriter(File.Open(fileName, FileMode.Create))
writer.Write(value)
writer.Flush()
End Using
End Sub
Private Function ReadValue() As String
Dim result As String = CType(Nothing, String)
If (File.Exists(fileName)) Then
Using reader As BinaryReader = New BinaryReader(File.Open(fileName, FileMode.Open))
result = reader.ReadString()
End Using
End If
Return result
End Function
كتابة و قراءة البيانات باستخدام Generic Delegates
الكود التالي يوضح كيفية استخدام Generic Delegates في كتابة نفس الكود أعلاه وهو سيؤدي نفس الهدف وسوف يقوم بحفظ البيانات في ملف
PHP كود :
Private Const fileName As String = ".\generic.dat"
Private Sub WritetValueWithDelegate(value As String)
Dim writeAction As Action(Of BinaryWriter, String) = Sub(writer As BinaryWriter, s As String)
Using writer
writer.Write(s)
writer.Write(True)
writer.Flush()
End Using
End Sub
writeAction(New BinaryWriter(File.Open(fileName, FileMode.Create)), value)
End Sub
Private Function ReadValueWithDelegate() As String
Dim func As Func(Of BinaryReader, String) = Function(reader As BinaryReader)
Dim result As String = CType(Nothing, String)
If (File.Exists(fileName)) Then
Using reader
result = reader.ReadString()
End Using
End If
Return result
End Function
Return func(New BinaryReader(File.Open(fileName, FileMode.Open)))
End Function
المصادر المستخدمة:
Func Delegate
Action Delegate
BinaryReader
BinaryWriter
في المرفقات ستجدون نسخة من الكود مع توضيح لكيفية استخدامه
الكود بنسخة الفيجوال استوديو 2015
تقبلوا تحياتي