آموزش Delegate
سه شنبه 17 اردیبهشت 1392آموزش Delegate <br/> (آموزش Delegate در سه بخش ارائه شده که این سه بخش در ادامه یکدیگر می باشند.) <br/> به این مطلب فکر کنید که در حال حاضر چگونه از متدها استفاده می کنید. الگوریتمی می نویسید که مقادیر یک سری متغیر را دستخوش تغییر قرار می دهد وآنرا مستقیماً توسط صدا کردن نامش صدا می زنید.
(آموزش Delegate در سه بخش ارائه شده که این سه بخش در ادامه یکدیگر می باشند.)
به این مطلب فکر کنید که در حال حاضر چگونه از متدها استفاده می کنید. الگوریتمی می نویسید که مقادیر یک سری متغیر را دستخوش تغییر قرار می دهد وآنرا مستقیماً توسط صدا کردن نامش صدا می زنید. حال اگر الگوریتمی بخواهید بسیار انتعطاف پذیر و دارای قابلیت استفاده مجدد و بخواهید توابع هر زمانی که لازم می باشند اجرا گردند چه می کنید ؟ بعلاوه این الگوریتم فقط با یک سری از انواع داده سازگار است اما شما می خواهید که الگوریتم تان برای هر نوع داده ای کار برد داشته باشد اگر ندانید که انواع داده ای چه هستند چگونه می توانید عملیات مقایسه را انجام دهید؟ حتما می گویید از if then else یا switch case استفاده میکنیم در صورتیکه این دستورات نیز برای انواع داده ای شناخته شده کاربرد دارند راه حل دیگر این است که از interfaceبرای تمامی انواعی که می خواهند الگورتم خاصی را داشته باشند استفاده نماییم که واقعا راه حل خوبی است.
البته به این علت که ما در اینجا می خواهیم درباره delegate ها صحبت نماییم از راه حل بالا صرف نظر می کنیم و از همان delegate ها که بسیار سریع و بدون هزینه هستند استفاده می نماییم.
برای حل این مسئله می توانید یک delegate را به الگوریتم خود بفرستید و به متد در برگیرنده delegate این اجازه را بدهید که عملیات مقایسه را انجام دهید. مانند مثال زیر :
نکته: حتما قبل از اجرای این برنامه یک ارجاع به System.Drawing.dll و System.Windows.Forms.dll بدهید.
حتماً متوجه شده اید که کد بالا یک برنامه تحت ویندوز است. اگر چه من در اینجا زیاد درباره برنامه های تحت ویندوز صحبت نکرده ام اما برای آشنایی بیشتر بعضی از قسمت های کد را توضیح می دهم.
کلاس Eventdemo از Form، ارث بری می نماید. پس می تواند از تمام ویژگیهای فرم های ویندوز از قبیل ماکزمایز و مینیمایز شدن داشتن عنوان و ... استفاده نماید. برای اجرا شدن برنامه های دارای فرم باید متد Run() از شیی استاتیک Application صدا زده شود.
حال بهتر است نگاهی به رویداد سفارشی بیاندازیم. در زیر تعریف آن آورده شده است. همانطور که مشاهده می شود یکی از اعضای کلاس Eventdemo می باشد. که شامل کلمه کلیدی event، یک Delegate و نام رویداد میباشد.
هر کسی که به این رویداد علاقه مند است می تواند از طریق Delegate به آن اتصال برقرار نماید. در اینجا توسطDelegate به نام StartDelegate که خودمان تعریفش کرده ایم می خواهیم به رویداد متصل شویم. با دستور =+ می توان یک Delegate را برای رویدادی ثبت کرد. برای خارج کردن Delegate از لیست ثبت نامی ها از دستور =- می توان استفاده نمود.
برای فعال کردن یک رویداد دقیقاً مثل صدا کردن یک متد رفتار می نماییم:
روش بالا از ابتدا یک روند اتصال به رویداد را با تعریف Delegate و رویداد به شما نشان داد. ولی در برنامه نویسی معمولاً ما از رویداد ها و Delegate های از پیش تعریف شده استفاده می نماییم. برای مثال خط زیر به ما نحوه اتصال Delegate از پیش تعریف شده EventHandler را به رویداد Button Click نشان می دهد.
رویداد Click در کلاس Button نوشته شده است، از طرفی EventHandler هم بعنوان یک Delegate در کتابخانه.Net پیاده سازی گردیده. تنها کاری که ما باید انجام دهیم نوشتن متدی است که به هنگام فعال شدن رویداد باید اجرا شود یعنی OnClickMeClicked.
از آنجایی که بسیاری از رویدادها و Delegate ها در کتابخانه .Net موجود می باشند. قبل از اینکه شروع به نوشتن رویداد جدید یا Delegate خاصی کنید بهتر است که یک نگاهی به کتابخانه .Net بیاندازید.
منبع:
- C#.net
- 1k بازدید
- 0 تشکر