العودة   منتدى رياض الجنة - Riad Al-Ganah > الرياض التقنية > روضة الكورسات والدورات التقنية والعلمية > روضة دورات تقنية الـ .NET بلغاتها المختلفة > دورة .NET 2008 من منتدى فيجوال بيسك للعرب

دورة .NET 2008 من منتدى فيجوال بيسك للعرب مقدم الدورة : أحمد جمال ، نوع الدورة : كتابية مصحوبة بصور ، حالة الدورة : انتهت ، عدد الدروس : 80 درس . مستوى الدورة : من البداية للاحتراف .

إضافة رد

 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 02-24-2010, 02:18 PM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي الدرس السابع والعشرون : IEnumerable interface دورة .net 2008

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

نواصل الآن دروسنا مع ال interfaces ، سنتعرض الآن ولثلاث دروس قادمة عن كيفية عمل فئة أو كلاس يقوم بعمل implement لل interface معين ، في هذا الدرس سنبدأ ب interface المسمى IEnumerable وما هي الفائدة المرجوة وراء ذلك .

بداية أرجو منك أن تركز جيداً في هذا الدرس ، فهذا واحد من الدروس التي ستلاحقنا كثيراً أثناء تطبيق مبادئ Linq .

لنفترض ان لدينا فئة مصفوفة أسماء تحتوي على عدة بيانات بالشكل التالي :

C#:
كود PHP:
string[] users = { "Ahmed""Mohammed" }; 
vb.net:
كود PHP:
Dim users As String() = {"Ahmed""Mohammed"
والآن لقراءة محتويات المصفوفة كنا نستخدم الكود التالي باستخدام for - each كما تعلمنا سابقاً :

C#:
كود PHP:
foreach (string us in users)
            {
                
Console.WriteLine(us);
            } 
vb.net:
كود PHP:
For Each us As String In users 
    Console
.WriteLine(us
Next 

هذا لو كنا نعتمد على array ، تجد اننا نستخدم دالة للدوران على كافة العناصر ، سنقوم بتوسيع المثال نوعاً ليكون ذلك بالاعتماد على فئة ، سنفترض فئة الموظفين بالشكل التالي :

C#:

كود PHP:
public class employee
        
{
            
int emp_number;
            
string emp_name;
    } 
vb.net:
كود PHP:
Public Class employee 
    
Private emp_number As Integer 
    
Private emp_name As String 
End 
Class 

وليكن لدينا كلاس آخر يحتوي على بيانات المستخدمين ، حيث ان المستخدم هو عبارة عن مجموعة من الموظفين بالشكل التالي مثلاً :
c#:

كود PHP:
public class users
        
{
                
employee[] emp = new employee[3];
            
users()
            {
                
emp[0] = new employee(10"Ahmed");
                
emp[1] = new employee(20"Khaled");
                
emp[2] = new employee(30"Ali");

            }
        } 
vb.net:

كود PHP:
Public Class users 
    
Private emp As employee() = New employee(2) {} 
    
    Private 
Sub New() 
        
        
emp(0) = New employee(10"Ahmed"
        
emp(1) = New employee(20"Khaled"
            
            
        
emp(2) = New employee(30"Ali"
    
End Sub 
End 
Class 
يمكننا استعراض السيارات ايضاً باستخدام for each ايضاً باستخدام جملة كالتالي :

C#:
كود PHP:
foreach (employee e in emp)
                {
                } 
vb.net
كود PHP:
For Each e As employee In emp 
Next 
مع كل loop سيتم طباعة عنصر معين ، هذا هو المبدأ الذي سنسعى إليه مع ال IEnumerable .

الشكل الاساسي لل interface المسمى IEnumerable :

C#:
كود PHP:
public interface IEnumerable
{
IEnumerator GetEnumerator();

vb.net:
كود PHP:
 
Public Interface IEnumerable 
    
Function GetEnumerator() As IEnumerator 
End 
Interface 
وكما ترى في المثال السابق ، يقوم بتعريف انترفيس من نوع IEnumerator بالشكل التالي :

C#:
كود PHP:
public interface IEnumerator
{
bool MoveNext (); 
object Current get;} 
void Reset (); 


vb.net:
كود PHP:
Public Interface IEnumerator 
    
Function MoveNext() As Boolean 
    ReadOnly Property Current
() As Object 
    Sub Reset
() 
End Interface 

لذا لو كنا نرغب في ان نجعل فئة users تقوم بعمل implements لهذا الانترفيس ، سنضطر لعمل implement للدالة GetEnumerator() ، سيكون ذلك بالشكل التالي :

C#:
كود PHP:
public class users:IEnumerable
        
{
            
employee[] emp = new employee[4];
            
users()
            {
                
                
emp[0] = new employee(10"Ahmed");
                
emp[1] = new employee(20"Khaled");
                
emp[2] = new employee(30"Ali");
                
emp[3] = new employee(40"Sami");
                
            }
            public 
IEnumerator GetEnumerator()
            {
                return 
emp.GetEnumerator();
            }
        } 
vb.net:
كود PHP:
Public Class users 
    
Implements IEnumerable 
    
Private emp As employee() = New employee(3) {} 
    Private 
Sub New() 
        
        
emp(0) = New employee(10"Ahmed"
        
emp(1) = New employee(20"Khaled"
        
emp(2) = New employee(30"Ali"
            
        
emp(3) = New employee(40"Sami"
    
End Sub 
    
    
Public Function GetEnumerator() As IEnumerator 
        
Return emp.GetEnumerator() 
    
End Function 
    
End Class 
يمكننا القيام بذلك يدوياً ايضاً بالشكل التالي :

C#:
كود PHP:
                IEnumerator i emp.GetEnumerator();
                
i.MoveNext();
                
employee myCar = (employee)i.Current
vb.net:
كود PHP:
Dim i As IEnumerator emp.GetEnumerator() 
i.MoveNext() 
Dim myCar As employee DirectCast(i.Currentemployee
- ماذا نستفيد من هذه الطريقة ؟
في الواقع فأي مبرمج لقواعد البيانات يستطيع ان يستنتج العلاقة بسهولة ، إن ما نحن بصدده هنا هو مثال عن فئة تحتوي على مجموعة من البيانات اشبه بقاعدة بيانات ، واصبح باستطاعنا الآن القراءة منها والتنقل فيها باستخدام moveNext .

استخدام yield

بدلاً من الكود السابق قم بكتابة الكود التالي :
كود PHP:
public IEnumerator GetEnumerator()
            {
                yield return 
emp[0];
                yield return 
emp[1];
                yield return 
emp[2];
                yield break;
            } 

في هذه الحالة ومع اول استدعاء للدالة سيتم اعادة القيمة الأولى ، ثم الثانية فالثالثة وهكذا حتى نصل إلى yield break .

نستعرف على واحدة من أهم الاستخدامات الفعلية عندما نصل إلى Linq ، وحتى ذلك الحين أتمنى ألا تغفل عينك عن هذا الانترفيس .

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس
إضافة رد


تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

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

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس السادس والعشرون : ال Interfaces دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-24-2010 01:44 PM
الدرس السابع : if statement - دورة سي شارب 2008 khaledbelal دورة CSharp 2008 من منتديات حور العين الاسلامية 0 02-22-2010 09:35 PM
الدرس الثالث والعشرون : ال Abstract دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-22-2010 01:57 PM
الدرس الثاني والعشرون : ال polymorphism دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-22-2010 01:54 PM
الدرس السابع عشر : مقدمة إلى مبادئ Oop دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-19-2010 08:16 PM

استضافة الحياة

الساعة الآن 04:25 AM.


Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية
Ads Management Version 3.0.1 by Saeed Al-Atwi

SlamDesignzslamDesignzEdited by Riad Al-Ganah Team - جميع الحقوق محفوظة لشبكة رياض الجنة

Privacy Policy Valid XHTML 1.0 Transitional By SlamDesignz Valid CSS Transitional By SlamDesignz