16-08-17, 06:01 PM
هذا الموضوع يوضح هل يمكن أن يستدعي Delegate نفسه ليكرر الكود الموجود بداخله
هذ الموضوع ليس للمبتدئين
مقدمة سريعة:
Recursive هي كلمة تستخدم في الكمبيوتر بمعني أن الشئ يكرر نفسه او أن الشئ يستدعي نفسه
و Recursive هو أسلوب يستخدم في النظام الشجري غالبا
كأمثلة لذلك .......
TreeView
Control Collection
Directory
مثلا تستطيع أن تقوم بعملية بحث عن ملفات او ملف معين موجود تحت اي فهرس
وهذا الفهرس يمكن اعتباره الفهرس المبدئي للبحث
ثم تستطيع ان تستمر و تكرر عملية البحث تحت بقية الفهارس الموجودة تحت هذا الفهرس المبدئي
و اعتقد و بما أننا نستطيع كتابة روتينات تدعم عملية Recursive فإن المنطق يقول أن Delegates أيضا يمكنها أن تدعم Recursive
لأن Delegates ما هي إلا روتينات و دوال
الكود التالي يوضح الفكرة و يثبتها:
و الكود عبارة عن دالة للبحث عن الملفات تحت اي فهرس
و يتم من خلال الدالة استخدام استخدام Generic Action Delegate
السطر هذا من الكود أعلاه يوضح كيف تم استدعاء Delegate لنفسه ليكرر عملية البحث تحب بقية الفهارس
إستخدام الدالة:
مثال البحث تحت فهرس المشروع
و الناتج نضعه في ليست بوكس
أرجو أن يكون الكود مفيدا للبعض منكم
هذ الموضوع ليس للمبتدئين
مقدمة سريعة:
Recursive هي كلمة تستخدم في الكمبيوتر بمعني أن الشئ يكرر نفسه او أن الشئ يستدعي نفسه
و Recursive هو أسلوب يستخدم في النظام الشجري غالبا
كأمثلة لذلك .......
TreeView
Control Collection
Directory
مثلا تستطيع أن تقوم بعملية بحث عن ملفات او ملف معين موجود تحت اي فهرس
وهذا الفهرس يمكن اعتباره الفهرس المبدئي للبحث
ثم تستطيع ان تستمر و تكرر عملية البحث تحت بقية الفهارس الموجودة تحت هذا الفهرس المبدئي
و اعتقد و بما أننا نستطيع كتابة روتينات تدعم عملية Recursive فإن المنطق يقول أن Delegates أيضا يمكنها أن تدعم Recursive
لأن Delegates ما هي إلا روتينات و دوال
الكود التالي يوضح الفكرة و يثبتها:
و الكود عبارة عن دالة للبحث عن الملفات تحت اي فهرس
و يتم من خلال الدالة استخدام استخدام Generic Action Delegate
PHP كود :
Private Function SearchFiles(folderName As String, pattern As String, recursive As Boolean, ignoreEx As Boolean) As List(Of String)
Dim result As List(Of String) = New List(Of String)()
Dim actionParams As Action(Of List(Of String), String, String, Boolean, Boolean)
actionParams = Sub(list, folder, searchPattern, repeatSearch, ignore)
Try
Dim fileNames As String() = Nothing
If searchPattern IsNot Nothing Then
fileNames = IO.Directory.GetFiles(folder, searchPattern)
Else
fileNames = IO.Directory.GetFiles(folder)
End If
list.AddRange(fileNames)
Catch ex As Exception
If Not ignore Then
Throw
End If
End Try
If repeatSearch Then
Dim folders As String() = IO.Directory.GetDirectories(folder)
For i As Integer = 0 To folders.Length - 1
actionParams(list, folders(i), searchPattern, repeatSearch, ignore)
Next
End If
End Sub
actionParams(result, folderName, pattern, recursive, ignoreEx)
Return result
End Function
السطر هذا من الكود أعلاه يوضح كيف تم استدعاء Delegate لنفسه ليكرر عملية البحث تحب بقية الفهارس
PHP كود :
actionParams(list, folders(i), searchPattern, repeatSearch, ignore)
إستخدام الدالة:
مثال البحث تحت فهرس المشروع
و الناتج نضعه في ليست بوكس
PHP كود :
For Each f As String In Me.SearchFiles(".\", Nothing, False, False)
Me.ListBox1.Items.Add(f)
Next
أرجو أن يكون الكود مفيدا للبعض منكم