نوشته شده توسط
com_engineer_ab
راستش رو بخواین من از delegate هیچی نمیدونم یه منبع خوب فارسی سراغ دارین؟؟
بیا خودم منبعم!
یادته که توی C می شد یک تابع را با آدرسش صدا زد؟
myPointer=clrscr;
myPointer(); //calls clrscr
حالا تو C# این کار یک مقدار قاعده مند تر شده. یعنی یک delegate می سازیم که نشون میده چه نوع قالبی از توابع رو پشتیبانی می کنه:
public delegate void Print (String s);
در حقیقت یک delegate نوعی تعیریف type برای متغیرهایی هست که به جای داده، مقدارشون برابر یک تابع هست.
البته قبلش مطابق اون قالب چند تابع داریم که نوع و ارگومان هاشون با اون قالب هم خونی داره:
public static void toConsole (String str)
{
Console.WriteLine(str);
}
public static void Display(Print WriteToFile)
{
pMethod("This should be displayed in the console");
}
حالا تو برنامه ی خودمون میاییم و از اون delegate یک یا چند نمونه می سازیم. و به delegate ها مقدار می دهیم. تابع مورد نظر رو به اون نمونه از delegate نسبت می دیم. بعد نمونه از delegate ساخته شده را صدا می زنیم. می بینیم که اون تابع صدا زده میشه.
public static void Main()
{
Print s = new Print (toConsole);
Print v = new Print (toFile);
Display (s);
Display (v);
}
delegate چیز خوبیه. حریم و این جور چیزا سرش نمیشه. public یا private بودن تابع براش مهم نیست. هر چیزی رو که بهش نسبت داده شده باشه رو می تونه صدا بزنه.
اگه این توضیحات کفایت نکرد، ببخشید که وسعمون در همین حد بود. خواستی می تونی google کنی. مطلب زیاده. اگه هم خواستی بیشتر گیج بشی می تونی مثل همیشه سراغ توضیحات MSDN بری.
البته delegate کاربردهای دیگری هم داره. که توی این پست بحث شد.