بخش اول
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آشنا شدیم در زیر نحوه فراخوانی آن را نمایش می دهیم
کدهای زیر را مشاهده کنید :
برنامه را اجرا کنید تا
نتیجه را ببینید .خواهید دید که چگونه تنها با فراخوانی متدها می توانید
به عناصرکلاس دسترسی پیدا کنید .
سلام آقای سبزپوش
احوالات چطوره ؟
من سایت اینترنتی خودم رو افتتاح کردم. خیلی خوشحال میشم که شما هم سری بزنید. البته مطالب زیادی هنوز درج نشده ولی به هر حال تصمیم گرفتم سایتی متفاوت با وبلاگم ایجاد کنم.
ارادتمند
کاوه
سایت شما را دیدم امیدوارم موفق باشید