X
تبلیغات
نماشا
رایتل

 

بخش اول

IEnumerator Interface

حتما با داده های شمارشی سروکار داشته اید مانند آرایه ها ، آرایه ها ممکن است ساده باشند مثلا آرایه عددی یا پیچیده تر مثلا آرایه ای از اشیا حتما سروکار شما با حلقه foreach بوده ، خوب اگر کنجکاوی کرده باشید متوجه شده اید که  foreach بر روی تمامی اشیاء نمی تواند گردش کند.

اینجا می خواهم از اینترفیسهای شمارنده صحبت کنم .ما می خواهیم در مورد فرمی از enumerator صحبت کنیم که بصورت کلاسی است که اینترفیس IEnumerator را پیاده سازی می کند .من می خواهم در این مطلب در مورد IEnumerator and IEnumerable interfaces در دات نت صحبت کنم . Enumerators می تواند راه حل بسیار توانمندی باشد برای داده های شمارش پذیر. شاید برای شما اتفاق افتاده باشد که مجموعه ای از داده ها را داشته باشید که بصورت لیست است اما ابتدا و انتهای لیست مشخص نباشد ، بر خلاف آرایه ها .و یا داده هایی را ازمنبعی بدست می آورید که نا همگام باشد.اینجاست که شمارنده های  IEnumerator به کار شما می آید و شما براحتی می توانید برای دادهای خود ، پیمایشگر یا حرکت دهنده از مقداری به مقدار دیگر تعریف کنید .و یا به تعبیری دیگر شما می خواهید کلاسی داشته باشید با عناصر شمارش پذیر و قابل جابجایی ، اگر شما کلاسی داشته باشید که عناصر آن مجموعه ای از لیست ها یا داده هایی باشندکه از یک منبع داده استخراج شده باشند چگونه می خواهید اطلاعات آن را نمایش دهید و یا اطلاعاتی به آن بیفزاییند ،ویرایش کنید

جواب : به کمک IEnumerator and IEnumerable interfaces

حال سوال این است که IEnumerator interface چه کارهایی را انجام می دهد ؟

این اینترفیس شامل سه متد مهم است Current, MoveNext, and Reset

Current : خصوصیتی هست که موقعیت فعلی لیست را برمی گرداند .خصوصیتی فقط خواندنی است و چیزی که برمی گرداند از نوع object  است .

MoveNext : متدی است که شمارنده را به موقعیت بعدی منتقل می کند و مقدار برگشتی آن یک مقدار منطقی Boolean است .اگر به موقعیت جدید منتقل شد مقدار true  برمی گرداند اما اگر موقعیت جدید نباشد مقدار false  را برمی گرداند

Reset : متدی برای برگرداندن شمارنده به موقعیت اولیه خود قبل از جابجایی است .به تعبیری دیگر موقعیت اولیه لیست را برمی گرداند .


اکنون سعی می کنم با کد مسله را توضیح بدهم .کلاس suitsEnumerator
را در نظر بگیرید که دارای کدهای زیر است .این کلاس دارای آرایه ای از عناصر
 است که ما می خواهیم به این عناصر دسترسی پیدا کنیم .


دقت کنید که فضای نام
using System.Collections باید حتما باشد
 و کلاس ما از اینترفیس
IEnumerator ارث بری می کند . ما ابتدا یک آرایه
تعریف کردیم و مقدار دهی کردیم
سپس متغیر m_nCurr را برای استفاده
 به عنوان اندیکس تعریف می کنیم که مقدار اولیه آن منفی یک است اکنون
به متد reset
دقت کنید که چگونه باز تعریف شده است ، هر وقت این متد
 فراخوانی می شود ، شمارنده ما به مکان اول خود برمی گردد
در کادر
سبز رنگ بالا متد movenext
تعریف شده است . این متد ،متغیر اندیکس
 را در هر بار
فراخوانی به مقدار یک واحداضافه می کند .اما اگر مقدار متغیر
 ما بیشتر از 4 شد پس مقدار  false
را برمی گرداند یعنی شمارنده به انتهای
 لیست
رسیده است و در نهایت کادر مشکی رنگ را مشاهده کنید که
 خصوصیت current راباز تعریف می کند، همانطور که می بینید مقداربرگشتی
 آن از نوع object است در اینجا اگر موقعیت کمتر از صفر یا بزرگتر از 3 باشد ،
یک پیغام خطا نمایش می دهد در غیر اینصورت عنصر متناظر با آن موقعیت
 را برمی گرداند .خوب حالا که نحوه تعریف کلاس مشتق شده از اینترفیس
 IEnumeratorآشنا شدیم در زیر نحوه فراخوانی آن را نمایش
می دهیم
کدهای زیر را مشاهده کنید :




برنامه را اجرا کنید تا
نتیجه را ببینید .خواهید دید که چگونه تنها با فراخوانی متدها می توانید
 به عناصرکلاس دسترسی پیدا کنید .