Borna66
07-25-2010, 11:16 PM
تفاوت میان delegate ,Event:
در زیر چند نمونه از تفاوت های میان این دو را ذکر کرده ام و در ادامه با یک مثال نحوه پیاده سازی آن را نشان خواهم داد:
Delegates
Events
یک تابع اشاره گر است که می تواند آدرس هر تابع دیگری را ذخیره کند
یک آرایه از Delegates ها می باشند
پلی را برای ارتباط بین کنترل ها وتوابع ایجاد میکند
فقط یک تابع را می توانند صدا بزنند
مثال: فرض کنید دو فرم داریم یکی با نام Parent . دیگری با نام Child حال میخواهیم ترتیبی تثر دهیم تا هنگامی که کاربر در روی دکمه ای در روی فرم child کلیک می کند رنگ پشت زمینه فرم Parent تغییر کند ولی این کار به چه نحوی امکان پذیر است زیرا فرم child از وجود فرم parent با شی از Parent با خبر نیست :
راه حل استفاده از Delegate : بدین معنی که شما اشاره گری را با استفاده از delegate هب بین فرم Parent و child ایجاد می کنید :
مراحل کار :
در محیط ویژوال استودیو یک پروژه ویندوزی ایجاد نمایید و در فرم با نامهای Parent و child به آن اضافه کند حال در فرم parent یک button اضافه کند تا با استفاده از آن فرم Child نمایش داده شود
حال در فرمchild ، یک button اضافه کنید تا با کلیک بر روی آن بتوانیم رنگ فرم Parent را تغییر دهیم . بر روی فرم Child دوبار کلیک کنید و کد های زیر را در آن وارد نمایید:
public delegate void changebackground(Color color);
public event changebackground changebackcolordelegate;
حال بر روی دکه خود در همین فرم(Child) دوبار کلیک کنید و کد های زیر را در آن وارد کنید
private void button1_Click(object sender, EventArgs e)
{
changebackcolordelegate(Color.Yellow);
}
به فرم Parent باز گردید و دوبار روی فرم کلیک کنید تا محیط کد نویسی آن باز شود
تابع زبر را درآن وارد کنید:
private void set_color(Color c)
{
this.BackColor = c;
}
حال بر روی دکمه خود دوبار کلیک کنید تا محیط کد نویسی آن باز شود و کد های زیر را درآن وارد نمایید
private void button1_Click(object sender, EventArgs e)
{
child frm = new child();
frm.Show();
frm.changebackcolordelegate += new child.changebackground(set_color);
}
با اجرای این برنامه متوجه خواهید شد که وقتی بروی دکمه فرم Child کلیک می کنید رنگ پشت زمینه فرم Parent به صورت زرد در خواهد آمد
در زیر چند نمونه از تفاوت های میان این دو را ذکر کرده ام و در ادامه با یک مثال نحوه پیاده سازی آن را نشان خواهم داد:
Delegates
Events
یک تابع اشاره گر است که می تواند آدرس هر تابع دیگری را ذخیره کند
یک آرایه از Delegates ها می باشند
پلی را برای ارتباط بین کنترل ها وتوابع ایجاد میکند
فقط یک تابع را می توانند صدا بزنند
مثال: فرض کنید دو فرم داریم یکی با نام Parent . دیگری با نام Child حال میخواهیم ترتیبی تثر دهیم تا هنگامی که کاربر در روی دکمه ای در روی فرم child کلیک می کند رنگ پشت زمینه فرم Parent تغییر کند ولی این کار به چه نحوی امکان پذیر است زیرا فرم child از وجود فرم parent با شی از Parent با خبر نیست :
راه حل استفاده از Delegate : بدین معنی که شما اشاره گری را با استفاده از delegate هب بین فرم Parent و child ایجاد می کنید :
مراحل کار :
در محیط ویژوال استودیو یک پروژه ویندوزی ایجاد نمایید و در فرم با نامهای Parent و child به آن اضافه کند حال در فرم parent یک button اضافه کند تا با استفاده از آن فرم Child نمایش داده شود
حال در فرمchild ، یک button اضافه کنید تا با کلیک بر روی آن بتوانیم رنگ فرم Parent را تغییر دهیم . بر روی فرم Child دوبار کلیک کنید و کد های زیر را در آن وارد نمایید:
public delegate void changebackground(Color color);
public event changebackground changebackcolordelegate;
حال بر روی دکه خود در همین فرم(Child) دوبار کلیک کنید و کد های زیر را در آن وارد کنید
private void button1_Click(object sender, EventArgs e)
{
changebackcolordelegate(Color.Yellow);
}
به فرم Parent باز گردید و دوبار روی فرم کلیک کنید تا محیط کد نویسی آن باز شود
تابع زبر را درآن وارد کنید:
private void set_color(Color c)
{
this.BackColor = c;
}
حال بر روی دکمه خود دوبار کلیک کنید تا محیط کد نویسی آن باز شود و کد های زیر را درآن وارد نمایید
private void button1_Click(object sender, EventArgs e)
{
child frm = new child();
frm.Show();
frm.changebackcolordelegate += new child.changebackground(set_color);
}
با اجرای این برنامه متوجه خواهید شد که وقتی بروی دکمه فرم Child کلیک می کنید رنگ پشت زمینه فرم Parent به صورت زرد در خواهد آمد