آموزش سی شارپ - رویدادها
رویدادها (events) عبارتند از عملکردهای کاربر مانند فشردن کلید، کلیک، حرکت ماوس و غیره یا برخی وقوعها مانند اعلانهای سیستمی تولید شده. برنامهها باید در هنگام رخداد رویدادها به آنها پاسخ دهند. رویدادها برای ارتباط میانفرآیندی استفاده میشوند.
استفاده از Delegateها با رویدادها
رویدادها در یک کلاس تعریف و فراخوانی میشوند و با استفاده از delegateها در همان کلاس یا کلاس دیگری با event handlerها مرتبط میشوند. کلاسی که شامل رویداد است، برای انتشار رویداد استفاده میشود. این به عنوان کلاس انتشاردهنده (publisher) شناخته میشود. کلاس دیگری که این رویداد را دریافت میکند، به عنوان کلاس مشترک (subscriber) شناخته میشود. رویدادها از مدل انتشاردهنده-مشترک استفاده میکنند.
یک انتشاردهنده یک شیء است که شامل تعریف رویداد و delegate است. ارتباط رویداد-delegate نیز در این شیء تعریف میشود. شیء کلاس انتشاردهنده یک رویداد را ایجاد میکند و به سایر شیءها اعلام میشود.
یک مشترک یک شیء است که رویداد را دریافت کرده و یک event handler را ارائه میدهد. delegate در کلاس انتشاردهنده متد (event handler) کلاس مشترک را فراخوانی میکند.
تعریف رویدادها
برای تعریف یک رویداد درون یک کلاس، ابتدا باید یک نوع delegate برای رویداد تعریف کنید:
public delegate string BoilerLogHandler(string str);
سپس، با استفاده از کلیدواژه event رویداد را تعریف کنید:
event BoilerLogHandler BoilerEventLog;
کد پیشین یک delegate به نام BoilerLogHandler و یک رویداد به نام BoilerEventLog تعریف میکند که delegate را هنگام ایجاد شدن فراخوانی میکند.
مثال
using System;
namespace SampleApp {
public delegate string MyDel(string str);
class EventProgram {
event MyDel MyEvent;
public EventProgram() {
this.MyEvent += new MyDel(this.WelcomeUser);
}
public string WelcomeUser(string username) {
return "Welcome " + username;
}
static void Main(string[] args) {
EventProgram obj1 = new EventProgram();
string result = obj1.MyEvent("Tutorials Point");
Console.WriteLine(result);
}
}
}
هنگامی که کد بالا کامپایل و اجرا می شود، نتیجه زیر را ایجاد می کند -
Welcome Tutorials Point