دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۵
  • مرداد

جلسه ۴۶ : مفهوم Delegate در #C

  • دسته‌بندی‌ها :
جلسه ۴۶ : مفهوم Delegate در #C
    • جزئیات
    • نوع محتواآموزش تصویری

      مقدمه :

      با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با دوره کامل آموزش #C در خدمت شما دوستان هستیم . در بخش قبلی با نحوه ایجاد استثنائات سفارشی در زبان #C آشنا شدید. در این بخش قصد داریم در رابطه با مفهوم Delegate در #C و نحوه فراخوانی Delegate در سی شارپ توضیح دهیم. یک تابع می تواند یک یا چند پارامتر از انواع داده های مختلف داشته باشد، اما اگر شما بخواهید یک تابع را به عنوان یک پارامتر منتقل کنید، چه؟ جواب سوال استفاده از Delegate ها است.

      delegate مانند یک اشاره گر به یک تابع عمل می کند . پس می توان نتیجه گرفت که یک نوع داده ارجاعی است و آدرس مرجع یک متد را نگهداری می کند. تمام delegate ها به طور ضمنی از کلاس System.Delegate مشتق شده اند.

      delegate می تواند با استفاده از کلمه کلیدی delegate مانند مثال زیر تعریف شود.

      <access modifier> delegate <return type> <delegate_name>(<parameters>)

       

      در مثال زیر print  ،delegate تعریف شده است :

      مثال : 

      حالا این delegate را می توان برای اشاره به هر متدی که نوع بازگشت و پارامتر های اعلام شده اش با delegate مورد نظر برابر باشد را بکار برد. مانند مثال زیر :

      مثال : 

      خروجی :

      مثال : 

      در مثال فوق، ابتدا دلگیت print را تعریف کردیم که پارامتر int را دریافت کرده و هیچی را به عنوان خروجی بر نمیگرداند (void). در متد Main یک متغیر از نوع Print تعریف کرده ایم که در ابتدا به متد PrintNumber اشاره کرده و سپس متد PrintMoney اشاره می کند . که با فراخوانی هرکدام عملیات مخصوص به آن متد نیز اجراء میشود.

      تصویر زیر یک delegate و توصیه های مربوط به آن را نشان می دهد.

      delegate

      delegate

       

      فراخوانی Delegate :

      delegate می تواند به عنوان یک متد فراخوانی شود زیرا به یک متد ارجاع دارد . delegate را می توان با دو روش به کار برد: با استفاده از operator یا با استفاده از متد Invoke مانند مثال زیر:

      مثال : 

      خروجی :

      مثال : 

       

      ارسال Delegate به عنوان پارامتر :

      یک متد می تواند پارامتری از نوع delegate داشته باشد و می تواند آن را فراخوانی کند.

      مثال : 

      در مثال بالا، متد PrintHelper دارای پارامتر delegate است و آن را مانند یک تابع: delegateFunc (numToPrint) فراخوانی می کند.

      مثال زیر نشان می دهد که چگونه از متد PrintHelper استفاده کنید که شامل پارامتر delegate باشد.

      مثال : 

      خروجی :

      مثال : 

       

      Delegate چندگانه :

      delegate می تواند به چند متد اشاره کند. یک delegate که متشکل از چندین متد است، delegate چندگانه نامیده می شود. عملگر “+” تابع را به شیء delegate اضافه می کند و اپراتور “-” یک تابع موجود را از یک شی delegate حذف می کند.

      مثال : 

      خروجی :

      مثال : 

      همانطور که در مثال بالا می بینید، Print delegates یک delegate چندگانه است ، زیرا به سه متد اشاره دارد: PrintNumber، PrintMoney و PrintHexadecimal. بنابراین با فراخوانی printDel تمام متد ها به صورت پیوسته فراخوانی می شوند.

      delegate نیز میتواند با Event, Anonymous method, Func delegateو Action delegate مورد استفاده قرار گیرند.

       

      چند نکته جهت بخاطر سپردن :

      1. delegate ها تابع های اشاره گر هستند که از نوع ارجاعی می باشند.
      2. ساختار آنها به این شکل است public delegate void <function name>(<parameters>)
      3. ساختار متدی که به delegate اختصاص داده می شود باید با delegate برابر باشد.
      4. delegate ها می توانند مانند یک تابع عادی و یا بوسیله متد Invoke فراخوانی شوند.
      5. چندین متد را می توان به delegate با استفاده از اپراتور “+” اختصاص داد. این نوع delegate ها را delegate چندگانه می نامند.

       

      در این بخش با delegate ها و کاربرد آنها در زبان #C آشنا شدید در بخش بعدی قصد داریم شما را با رویداد ها (Event) در #C آشنا کنیم.

      QR:  جلسه ۴۶ : مفهوم Delegate در #C
      به اشتراک بگذارید