![]() |
|
الدرس السابع والعشرون - IEnumerable interface - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة .net 2008 . لنبدأ سوياً (http://vb4arb.com/vb/forumdisplay.php?fid=138) +---- الموضوع : الدرس السابع والعشرون - IEnumerable interface (/showthread.php?tid=5621) |
الدرس السابع والعشرون - IEnumerable interface - RaggiTech - 14-10-12 كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .السلام عليكم ورحمة الله وبركاته . نواصل الآن دروسنا مع ال interfaces ، سنتعرض الآن ولثلاث دروس قادمة عن كيفية عمل فئة أو كلاس يقوم بعمل implement لل interface معين ، في هذا الدرس سنبدأ ب interface المسمى IEnumerable وما هي الفائدة المرجوة وراء ذلك . بداية أرجو منك أن تركز جيداً في هذا الدرس ، فهذا واحد من الدروس التي ستلاحقنا كثيراً أثناء تطبيق مبادئ Linq . لنفترض ان لدينا فئة مصفوفة أسماء تحتوي على عدة بيانات بالشكل التالي : C#: كود : string[] users = { "Ahmed", "Mohammed" };vb.net: كود : [FONT=Tahoma]Dim users As String() = {"Ahmed", "Mohammed"} [/FONT]والآن لقراءة محتويات المصفوفة كنا نستخدم الكود التالي باستخدام for - each كما تعلمنا سابقاً : C#: كود : foreach (string us in users)vb.net: كود : [FONT=Tahoma]For Each us As String In users هذا لو كنا نعتمد على array ، تجد اننا نستخدم دالة للدوران على كافة العناصر ، سنقوم بتوسيع المثال نوعاً ليكون ذلك بالاعتماد على فئة ، سنفترض فئة الموظفين بالشكل التالي : C#: كود : public class employeevb.net: كود : [FONT=Tahoma]Public Class employee وليكن لدينا كلاس آخر يحتوي على بيانات المستخدمين ، حيث ان المستخدم هو عبارة عن مجموعة من الموظفين بالشكل التالي مثلاً : c#: كود : [FONT=Tahoma]public class usersvb.net: كود : [FONT=Tahoma]Public Class users يمكننا استعراض السيارات ايضاً باستخدام for each ايضاً باستخدام جملة كالتالي : C#: كود : [FONT=Tahoma]foreach (employee e in emp)vb.net كود : [FONT=Tahoma]For Each e As employee In emp مع كل loop سيتم طباعة عنصر معين ، هذا هو المبدأ الذي سنسعى إليه مع ال IEnumerable . الدرس السابع والعشرون - IEnumerable interface - RaggiTech - 14-10-12 الشكل الاساسي لل interface المسمى IEnumerable : C#: كود : public interface IEnumerablevb.net: كود : [FONT=Tahoma]Public Interface IEnumerable وكما ترى في المثال السابق ، يقوم بتعريف انترفيس من نوع IEnumerator بالشكل التالي : C#: كود : [FONT=Tahoma]public interface IEnumeratorvb.net: كود : [FONT=Tahoma]Public Interface IEnumerator لذا لو كنا نرغب في ان نجعل فئة users تقوم بعمل implements لهذا الانترفيس ، سنضطر لعمل implement للدالة GetEnumerator() ، سيكون ذلك بالشكل التالي : C#: كود : [FONT=Tahoma]public class users:IEnumerablevb.net: كود : [FONT=Tahoma]Public Class users يمكننا القيام بذلك يدوياً ايضاً بالشكل التالي : C#: كود : [FONT=Tahoma] IEnumerator i = emp.GetEnumerator();vb.net: كود : [FONT=Tahoma]Dim i As IEnumerator = emp.GetEnumerator() - ماذا نستفيد من هذه الطريقة ؟ في الواقع فأي مبرمج لقواعد البيانات يستطيع ان يستنتج العلاقة بسهولة ، إن ما نحن بصدده هنا هو مثال عن فئة تحتوي على مجموعة من البيانات اشبه بقاعدة بيانات ، واصبح باستطاعنا الآن القراءة منها والتنقل فيها باستخدام moveNext . الدرس السابع والعشرون - IEnumerable interface - RaggiTech - 14-10-12 استخدام yield بدلاً من الكود السابق قم بكتابة الكود التالي : كود : public IEnumerator GetEnumerator()في هذه الحالة ومع اول استدعاء للدالة سيتم اعادة القيمة الأولى ، ثم الثانية فالثالثة وهكذا حتى نصل إلى yield break . نستعرف على واحدة من أهم الاستخدامات الفعلية عندما نصل إلى Linq ، وحتى ذلك الحين أتمنى ألا تغفل عينك عن هذا الانترفيس . والله الموفق ... والسلام عليكم ورحمة الله وبركاته . |