سیستم رویدادهای توت فرنگی
این یک موضوع پیشرفته است. ممکن است همه چیزهایی که در اینجا صحبت میکنیم را قبلاً نشنیده باشید. حتی اگر همه چیز را متوجه نشوید، همچنان میتوانید از سیستم رویداد توت فرنگی استفاده کنید.
رویداد چیست؟
رویدادها روشی هستند که یک شیء با شیءهای دیگر ارتباط برقرار کند بدون اینکه نیاز به دانستن وجود یکدیگر داشته باشند. در C# سالهاست که مردم از delegateها و event handlerها برای این منظور استفاده میکنند.
btnExit.Click += Exit;
.
.
.
void Exit(object sender, EventArgs e) {
Application.Exit();
}
کد بالا نشان میدهد که رویدادهای C# چگونه کار میکنند. دکمه btnExit یک رویداد کلیک دارد که توسط متد Exit() مدیریت میشود. وقتی کاربر روی دکمه کلیک میکند، متد Exit() فراخوانی میشود و برنامه خارج میشود.
چرا به سیستم رویداد دیگری نیاز داریم؟
رویدادهای C# مدت طولانی است که وجود دارند و به نظر میرسد نیازی به سیستم رویداد دیگری نیست. اما چون توت فرنگی یک موتور بازی است که برای مبتدیان و توسعهدهندگان مستقل کوچک طراحی شده، نیاز به یک سیستم رویداد سادهتر کاملاً مشهود است.
تفاوتها چیست؟
سه تفاوت اصلی بین رویدادهای توت فرنگی و رویدادهای C# وجود دارد:
۱. مدیریت هوشمند حافظه:
شما نیازی به لغو اشتراک از یک رویداد ندارید، وقتی شیء خود را نابود کنید این کار به صورت خودکار انجام میشود. هرچند توصیه میشود وقتی دیگر نیازی ندارید اشتراک را لغو کنید، اما اگر فراموش کنید مشکلی پیش نمیآید.
۲. ایمن بودن در برابر نخها (Thread Safe):
وقتی یک رویداد C# را فراخوانی میکنید، روی همان نخی که فراخوانی شده اجرا میشود. اما در رویدادهای توت فرنگی، همه رویدادها از نخ اصلی فراخوانی میشوند. رویدادها در صف قرار میگیرند و در زمان مشخصشده در فریم بعدی اجرا میشوند. اطلاعات بیشتر در مورد زمان فراخوانی رویدادها
۳. دارای اولویت:
مشترک (شیئی که به رویداد گوش میدهد) میتواند ترتیب فراخوانی متدهای مرتبط با رویداد را تعیین کند.