در این قسمت از وبسایت پروویدآموزش ویدیویی کار کردن با این Event ها در زبان برنامه نویسی سی شارپ را به شما تقدیم می کنیم. امیدوارم که مورد توجه تمامی دوستان قرار بگیرد. ضمنا در صورت تمایل می توانید از آموزش سی شارپ دات نت در ویژوال استادیو استفاده کنید.
رویداد (Event) چیست؟
در زبانهای برنامهنویسی مختلف یک رویداد و یا Event در واقعیت یک پیغام است که توسط یک Object در زمان رخ دادن یک اتفاق ارسال میشود. برخی از اتفاقاتی که میتوانند باعث ایجاد شدن یک Event بگردند شامل User Interaction و یا تعامل کاربر با برنامه شبیه کلیک کردن بر روی یک دکمه و یا انجام قسمتی از خود برنامه برای مثال تغییر دادن مقدار درون یک Property است. بهتر است در رابطه با برخی از واژگان خاص حوزه کار کردن با Event ها نیز آشنا بشوید. Object و یا موجودیتی که یک Event را اصطلاحاً Raise و یا ایجاد می کند، تحت عنوان Event Sender شناخته میشود. در واقع در زمان Raise کردن یک Event این Event Sender هیچ نمیداند که چه Object و یا متدی از یک Object آن Event ایجاد شده را دریافت و یا اصطلاحاً Handle خواهد نمود. رویداد و یا Event مورد نظر که توسط یک Event Sender اصطلاحاً Raise میگردد، یک Member و یا یک عضو از کلاس آن Event Sender می باشد. برای مثال رویداد کلیک عضوی از کلاس Button است.
در زبان برنامه نویسی سی شارپ به منظور تعریف کردن یک Event از کلمه کلیدی event استفاده میکنیم. در واقع Event ها بر اساس Delegate ها ایجاد می شوند. در زمان تعریف کردن یک Event باید نوع Delegate مورد نظر را نیز در نظر گرفته و از آن استفاده کنید. برای یادگیری Event ها می توانید از آموزش Event ها، Delegate ها و Lambda Expression ها در سی شارپ و آموزش رایگان دیلیگیت ها Delegate در سی شارپ استفاده کنید. به طور معمول برای Raise کردن یک Event ابتدا یک متد تعریف می کنید که در زبان برنامه نویسی سی شارپ باید به صورت protected و virtual تعریف بشود. رسم است که نام این مت از کلمه On و سپس نام Event مورد نظر تشکیل گردد. برای مثال یک متد می توانند تحت عنوان OnDataReceived تعریف بگردد. علاوه بر این، متد مورد نظر باید یک پارامتر ورودی دریافت کند که مشخص کننده Object ای می باشند که دادههای مربوط به آن Event در آن قرار گرفته اند. این پارامتر ورودی از کلاس EventArgs و یا از کلاس هایی می باشد که از کلاس EventArgs ارث بری میکنند. دلیل ایجاد کردن این Event این است که کلاس هایی که از این کلاس از ارث بری می کنند بتوانند Logic مربوط به Raise کردن یک Event را اصطلاحاً به Override کنند. در این رابطه در آموزش شی گرایی OOP در سی شارپ و آموزش پیشرفته برنامه نویسی شی گرا در سی شارپ صحبت کرده ایم.
کلاسی که از این کلاس که در آن Event تعریف شده است ارث بری میکند باید همواره متد مربوط به Base Class مربوطه را صدا بزند تا اطمینان حاصل کند که Delegate های Register شده موفق به دریافت کردن Event مورد نظر می شوند. مثالی که در قسمت زیر مشاهده می کنید تعریف کردن یک Event به نام ThresholdReached را نشان می دهد.
class Counter { public event EventHandler ThresholdReached; protected virtual void OnThresholdReached(EventArgs e) { EventHandler handler = ThresholdReached; handler?.Invoke(this, e); } // provide remaining implementation for the class }
این Event با یک Delegate از نوع Event Handler مرتبط شده اس تو در یک متد با نام OnThresholdReached صدا زده میشود.
فراهم کردن داده های مربوط به یک Event
برای فراهم کردن داده های مربوط به یک Event و استفاده کردن از آنها در زمان Raise شدن آن Event میتوانیم اصطلاحاً از کلاس های Event Data در فریم ورک دات نت استفاده کنیم. برای مثال کلاس SerialDataReceivedEventArgs در واقع یک کلاس Event Data می باشد که برای یک Event به نام DataReceived در کلاس SerialPort مورد استفاده قرار میگیرد. در فریم ورک دات نت رسم بر این است که نام تمامی کلاس های Event Data به کلمه EventArgs ختم بشوند. برای مشخص کردن کلاس Event Data مرتبط با یک Event میبایست Delegate مربوط به آن کلاس را بررسی کنید. برای مثال یک Delegate از با نام SerialDataReceivedEventHandler شامل یک کلاس با نام SerialDataReceivedEventArgs به عنوان یکی از پارامترهای ورودی خود می باشد.
در فریم ورک دات نت کلاس EventArgs در واقع Base Type تمامی کلاس های Event Data به حساب میآید. علاوه بر این، از کلاس EventArgs زمانی استفاده می شود که یک Event هیچ داده خاص و یا مرتبطی را دریافت نکند. زمانی که قصد تعریف کردن یک Event را داریم که دلیل آن فقط اطلاع رسانی در رابطه با رخ دادن یک اتفاق می باشد و عملاً نیاز به هیچ داده خاصی نیست میبایست یک Object از کلاس EventArgs به عنوان پارامتر دوم Delegate مربوط به آن Event دریافت بشود.
به همین ترتیب با استفاده از پروپرتی Empty از کلاس EventArgs می توانیم داده ای را برای Event مورد نظر فراهم نکنید. Delegate مورد نظر که EventHandler نام دارد نیز شامل یک Object از کلاس EventArgs به عنوان پارامتر ورودی می باشد. برای تعریف کردن یک کلاس Event Data به صورت سفارشی ابتدا یک کلاس ساده را تعریف کنید و از کلاس EventArgs ارث بری نمایید. در رابطه با ارث بری کردن در مباحث مربوط به شی گرایی در آموزش رایگان برنامه نویسی شی گرا OOP در سی شارپ بیشتر صحبت کردهایم. پس از انجام این کار Member های مورد نظر برای ارسال دادهها به Event خود را در این کلاس لحاظ کنید. علاوه بر اینT در زبان برنامه نویسی سی شارپ و فریم ورک دات نت رسم بر این است که کلاسهای Event Data به عنوان پسوند نام خود از کلمه EventArgs استفاده کنند. برای مثال کدی که در قسمت زیر مشاهده می کنید کلاس به نام ThresholdReachedEventArgs را نشان میدهد که شامل پروپرتی های خاصی برای Event ای می باشند که قرار است توسط کلاس دیگری Raise بشود.
public class ThresholdReachedEventArgs : EventArgs { public int Threshold { get; set; } public DateTime TimeReached { get; set; } }
در این قسمت از وبسایت پرووید آموزش ویدیویی و رایگان کارکردن با Event ها در زبان برنامه نویسی سی شارپ به شما تقدیم میگردد. ضمناً توصیه میکنیم در صورت تمایل از آموزش رایگان دیلیگیت ها Delegate در سی شارپ و همچنین آموزش Event ها، Delegate ها و Lambda Expression ها در سی شارپ ها و آموزش رایگان لامبدا اکسپرشن Lambda Expression در سی شارپ دیدن بفرمایید.