انواع Enumerators و Enumerable :
تعریف :
" Enumerator شی ای است که
قابلیت بازگرداندن هر مورد از یک لیست و گروه داده ای را به صورت یک به یک و ترتیبی که از آن درخواست
میشود را دارد. Enumerator به طبقه بندی
موارد آگاه است و پیگیری می کند که کجای رشته قرار دارد.
و بعد از آن مقدار مورد جاری را بنا به در خواست باز می گرداند.
Enumerable یک نوع است که یک متد به نام GetEnumerator دارد که این متد یک enumerator برمی گرداند برای بازگردانی مورد ها.
برای درک بهتر Enumerators و Enumerable نگاهی به یک مثال می
اندازیم :
در مثال زیر ما یک آرایه شامل 5 المان تعریف می کنیم و بعد از ان از یک حلقه foreach برای نمایش مقادیر هر مورد.
class Program
{
static void Main()
{
int[] arr1 = { 1, 2, 3, 4, 5 }; //
Define the array.
foreach (int item in arr1) //
Enumerate the elements.
Console.WriteLine("Item
value: {0}", item);
}
}
خروجی :
Item value: 1
Item value: 2
Item value: 3
Item value: 4
Item value: 5
در مثال بالا :
· شیء enumerator را به وسیله تابع GetEnumerator صدا میزنیم .
· هر مورد را از enumerator در خواست می کند و
به عنوان متغیر تکراری در کد قابل دسترس قرار می دهد.
IEnumerator
Interface :
اینترفیس IEnumerable توسط یک کلاس IEnumerable پیاده سازی می
شود.
اینترفیس IEnumerable فقط یک متد
دارد : GetEnumerator که یک enumerator را برمی
گرداند.
- Current مقدار
جایگاه جاری در رشته را برمی گرداند.
- خصوصیت read-only است.
- یک مقدار reference از نوع داده
ای را برمی گرداند پس شی می تواند هر جنسی داشته باشد.
-MoveNext متدی است که enumerator را به
موقعیت بعدی مکانی پیش می برد. و یک مقدار بولین برمی گرداند که نشان دهنده معتبر
بودن موقعیت بعدی و یا انتهای رشته می باشد.
- اگر موقعیت بعدی معتبر باشد مقدار true است.
- اگر موقعیت بعدی معتبر نباشد (فرا تر از انتهای
رشته باشد) مقدار false است.
- موقعیت ابتدایی enumerator ، قبل از
اولین مورد در رشته است. پس تابع MoveNext باید قبل از اولین دسترسی به Current
فراخوانی شود.
- Reset برای بازنشانی مجدد موقعیت مکانی داخلی استفاده می شود.
مثال :
class Program
{
static void Main()
{
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
list.Add(5);
List<int>.Enumerator e = list.GetEnumerator();
Write(e);
}
static void Write(IEnumerator<int> e)
{
while (e.MoveNext())
{
int value = e.Current;
Console.WriteLine(value);
}
}
}
} خروجی:
1
2
3
4
5
IEnumerable Interface :
یک کلاس enumerable ، یک اینترفیس IEnumerable را پیاده سازی می کند.
اینترفیس IEnumerable تنها یک متد دارد: GetEnumerator که یک enumerator برمی گرداند.
using System.Collections;
//Implement the
IEnumerable interface
class MyClass : IEnumerable
{
public IEnumerator
GetEnumerator { ... }
...
} //Returns an object of type IEnumerator
using
System.Collections;
class
MyColors: IEnumerable
{
string[]
Colors = { "Red", "Yellow", "Blue" };
public
IEnumerator GetEnumerator()
{
return new
ColorEnumerator(Colors);//An instance of the enumerator class
}
}
ادامه در پست بعدی .....