با مطالعه‌ی فصل گذشته اطلاعات بسیار دقیقی در زمینه‌ی نماینده‌ها (Delegate) در اختیار شما قرار گرفت و با مثال‌هایی که خدمت شما عزیزان ارائه کردیم تا حد مناسبی این مبحث را پوشش داریم اما یکی از مزایای استفاده از delegateها کنترل و مدیریت رویدادها بر حسب نیاز است. رویدادها یا Event ها به عنوان یک اعلان یا توصیه یا رفتار در طی یک برنامه ظاهر می‌شوند. در این فصل قصد داریم این موضوع را به صورت کامل پوشش داده تا از آموزش دیگری شما را بی نیاز کنیم.

مقدمه

در حالت عادی و زندگی روزمره‌ی خود رویدادهای بسیاری را کنترل می‌کنید. برای درک بهتر با یک مثال در دنیای واقعی شروع می‌کنیم. فرض کنید شما صبح از خواب بیدار می‌شوید و شروع به دست شستن می‌کنید و سپس یک دوش آب گرم گرفته و از حمام بیرون می‌آید. حال معده شما فرمان گرسنگی صادر می‌کند و رویداد «غذا خوردن و آشامیدن آب» باید رخ دهد. یعنی به ازای گرسنگی ای که ناگهان ایجاد شده است شما باید پاسخی مناسب را ارسال کنید. Event ها یا رویدادها دقیقا به همینصورت عمل می‌کنند. یعنی وقتی ما یک Event را تعریف می‌کنیم در واقع به برنامه و نرم‌افزار خود دستور می‌دهیم که در صورت بروز یک اتفاق خاص (مثلا کلیک کردن روی یک گزینه یا دکمه) رویداد مدنظر ما رخ دهد. این عمل را در مجموعه‌ی کدهای فصل گذشته به تعداد بسیار زیادی انجام داده‌ایم. قسمتی از کد شما که می‌نویسید Console.Readkey به صورت متد بوده که منتظر می‌ماند تا کاربر یک دکمه از صفحه کلید را بفشارد. به محض انجام این عمل، صفحه بسته خواهد شد. در واقع Event یا رویداد بسته شدن رخ می‌دهد.

امروزه بسیاری از نرم‌افزارهای مدرن از سیستم متناسب با کنترل رویداد استفاده می‌کنند. در زبان برنامه‌نویسی #C، یک رویداد یا event به عنوان یک عضو کلاس شناخته می‌شود که هرگاه باید از آن استفاده شود، فراخوانی می‌شود. عموما برنامه‌نویسان برای فراخوانی یک رویداد از عبارت fire یا شلیک استفاده می‌کنند. یعنی مثلا یک اتفاق خاص که رخ داد رویداد x فایر یا fire می‌شود.

همچنین رابطه‌ی بسیار نزدیکی بین رویدادها (Events) و نماینده‌ها (Delegates) وجود دارد. که این دو با همکاری یکدیگر یک نرم افزار functionality یا تابع محور را ایجاد می‌کنند.

تعریف یک رویداد یا Event

برای تعریف یک رویداد یا Event در زبان برنامه‌نویسی #C باید ابتدا یک delegate یا نماینده تعریف کنیم سپس یک رویداد با کلمه‌ی event و از نوع همان delegate‌ای که تعریف کرده‌ایم، ایجاد خواهیم کرد.

بنابراین الگوی ساختاری آن پس از ایجاد یک delegate به صورت زیر است:

delegate data type:‌ در واقع نام همان delegate است که برای این event ایجاد کرده‌ایم.

eventname: نامی که برای آن event در نظر می‌گیریم.

به مثال زیر توجه کنید: