بسیار خب، بیایید آنچه رو که تو ویدیوی آخر یاد گرفتیم، به کار ببندیم.
بیایید اون رو روی یک **temperature change handler** اعمال کنیم.
یعنی ابزاری که تغییرات دما رو مدیریت می‌کنه.
و فرض کنید وقتی به یک دمای مشخص، مثلاً 30 درجه سانتی‌گراد، می‌رسیم، **temperature event** ما **trigger** می‌شه (راه می‌افته).
که می‌گه: هی، **event** به آستانه (threshold) رسیده یا از اون عبور کرده.
بنابراین، من یک **public delegate** ایجاد می‌کنم که **void** (هیچ چیز) برمی‌گردونه. و این رو **TemperatureChangeHandler** صدا می‌زنم. بسیار خب.
و فقط پیام رو چاپ می‌کنه.
خب، البته که نیازی به بدنه نداره. و بعد یک **class** اینجا داریم، **public class TemperatureMonitor**، اوکی.
این **class** یک وظیفه داره و اون هم **monitor** کردن (نظارت بر) دماست.
پس اینجا من یک **event** خواهم داشت که از **TemperatureChangeHandler** من استفاده می‌کنه. و البته یاد گرفتیم که باید اون رو **OnTemperatureChanged** صدا بزنیم. خب، **Changed**.
هر وقت دما تغییر کنه، اون وقت می‌خوایم **event** رو **raise** (راه بیندازیم). پس اون موقعی هست که می‌خوایم کد اون **event** رو اجرا کنیم، اوکی؟
بعدش، یک **private int** برای **temperature** خواهم داشت و یک **property** که اون هم **int** هست و **Temperature** نامیده می‌شه.
و وقتی می‌خوایم **get** (دریافت)ش کنیم، فقط **underscore temperature** رو برمی‌گردونه. و وقتی می‌خوایم **set** (تنظیم)ش کنیم، کمی پیچیده‌تر خواهد بود، اوکی؟
پس در **setter** هست که می‌خوایم یک بررسی انجام بدیم.
پس بررسی می‌کنیم که آیا دما یک مقدار مشخصی هست یا نه. اگه اینطور بود، شروع به **trigger** کردن **event** می‌کنه.
پس بیایید **value** رو برای **temperature** تنظیم کنیم. و بعد بررسی می‌کنیم که آیا **temperature** قراره مثلاً بزرگ‌تر از 30 باشه.
و حالا می‌تونید اون رو به **Fahrenheit** تبدیل کنید. فکر می‌کنم حدود 95 یا 90 و خورده‌ای باشه. و اونجاست که می‌خوایم **event** رو **raise** کنیم. **Raise event**.
خب، البته ما باید **event**ای رو که می‌خوایم اجرا کنیم، آماده کنیم. پس کدی که می‌خوایم اجرا بشه، داخل این **protected virtual void RaiseTemperatureChangedEvent** خواهد بود.
که فقط یک **message** می‌گیره و وقتی **OnTemperatureChanged** اتفاق افتاد، می‌خوایم با اون **message** **invoke** (فراخوانی)ش کنیم. اوکی، پس این شبیه چیزیه که دفعه قبل داشتیم.
پس حالا این بار این **event** ما **OnTemperatureChanged** هست و حالا انتظار داریم که صفر باشه. به خاطر همینه که علامت سوال رو اضافه می‌کنیم و بعد تمام **listener**ها رو **invoke** می‌کنیم. پس تمام **subscriber**ها، ما اون متدها رو **invoke** می‌کنیم. پس داریم اون متدها رو صدا می‌زنیم و **message** رو پاس می‌دیم، اوکی؟
پس اینجا وقتی **event** رو **raise** می‌کنیم، اونجاست که **RaiseTemperatureChangedEvent** رو با چیزی مثل: **Temperature is above threshold** (دما بالاتر از آستانه است) **raise** می‌کنیم، برای مثال. خب، پس حالا که این رو داریم، این **delegate** و **event** ماست که آماده کردیم.
حالا به **subscriber** (مشترک)مون نیاز داریم.
خب **subscriber** ما کی می‌تونه باشه؟
بذارید بگیم یک **TemperatureAlert**.
پس **public class TemperatureAlert**. خب، البته ممکنه **class**های زیادی باشن که در این **event**ها **subscribe** بشن. اما در این حالت، **TemperatureAlert** ما خواهد بود.
و اینجا من فقط می‌گم **public void OnTemperatureChanged**. **message** رو پاس می‌دم. می‌خوام روی **console** بنویسم: **Alert: ** (اعلان:) و بعد هرچیزی که **message** هست، اوکی؟
حالا بیایید از این تو برنامه‌مون استفاده کنیم.
پس تو برنامه اصلی، بیایید **TemperatureMonitor**مون رو بسازیم. اسمش رو می‌ذاریم **monitor**، **new TemperatureMonitor**.
و بعد بیایید **TemperatureAlert** رو هم بسازیم. اسمش رو می‌ذاریم **alert**، **new TemperatureAlert**.
و بعد می‌تونیم به **monitor.OnTemperatureChanged** **event**مون، **alert.OnTemperatureChanged** رو اضافه کنیم.
بنابراین حالا می‌تونیم جلو بریم و فقط مقدار **monitored temperature** رو مثلاً 20 بذاریم به صورت پیش‌فرض. و بعد این هیچ چیزی رو **trigger** نمی‌کنه، اوکی؟
این **event** رو **trigger** نخواهد کرد.
حالا بیایید از کاربر درخواست ورودی کنیم.
پس **monitored temperature** هرچیزی خواهد بود که کاربر وارد می‌کنه. پس **console.ReadLine**، هرچیزی که کاربر وارد می‌کنه.
پس می‌خوایم اون رو به یک **int** **parse** کنیم، **int.Parse**. و بعد هرچیزی که کاربر وارد کرده رو **parse** می‌کنیم.
خب البته می‌تونستیم از **try** و غیره استفاده کنیم. این بار ساده نگهش می‌داریم.
و بیایید بذاریم کاربر بدونه: **Please enter a temperature** (لطفا یک دما یا دما را وارد کنید). خب البته این دما می‌تونه از سنسورهایی که داریم یا یک **API** که ازش می‌خونیم و غیره بیاد.
اوکی.
پس حالا بیایید جلو بریم و اپلیکیشن کوچیکمون رو اینجا اجرا کنیم.
و می‌گه: لطفا دما را وارد کنید.
بذارید 25 رو وارد کنیم. هیچ اتفاقی نمی‌افته، اوکی؟
پس تغییر زیادی ندادیم چون دما به آستانه نرسید.
بذارید دوباره 30 رو بزنیم.
حالا هیچ اتفاقی نمی‌افته.
بذارید دوباره اجراش کنیم. و این بار بذارید بگیم 31 هست.
و بعد **alert** رو می‌گیریم.
می‌گه: **Alert: Temperature is above threshold**.
پس تو این حالت چیزی که اتفاق افتاد اینه که ما **property**مون رو داریم که وقتی **set** می‌شه، مقداری **custom logic** (منطق سفارشی) داره.
پس حالا دلیل خیلی خوب دیگه‌ای هم می‌بینید که چرا **property**ها اینقدر ارزشمند هستن.
بنابراین ما این **private field temperature** رو داریم و این **public property** رو داریم. و حالا می‌گیم: اوکی، اگه می‌خوای **get**ش کنی، فقط **get**ش کن.
اما اگه می‌خوای **set**ش کنی، یک سری قوانین وجود داره. اوکی.
اول از همه می‌تونی **set**ش کنی، من اهمیت نمی‌دم.
اما اگه اون رو بالاتر از 30 **set** کنی، من قراره یک **event** **raise** کنم. و قراره کدوم **event** رو **raise** کنم؟
خب، قراره این **event** رو **raise** کنم. پس وقتی این **event** اتفاق بیفته، چی می‌شه؟
خب، اساساً من فقط تمام **subscriber**ها رو **invoke** می‌کنم تا بهشون خبر بدم: بچه‌ها، **event** **raise** شده. کار خودتون رو انجام بدید، هرچیزی که به عنوان منطق تنظیم کردید.
و حالا ما این **TemperatureAlert** رو داریم که این **alert** رو تنظیم می‌کنه. اما تصور کنید که چیزی شبیه این باشه: اوکی، دمای اتاق شما خیلی گرم می‌شه و ممکنه چندین **listener** وجود داشته باشن.
ممکنه، برای مثال، یک سیستم خنک‌کننده خودکار روشن بشه، یا ممکنه یک پیام خودکار به گوشی شما ارسال بشه که می‌گه: هی، اتاقت گرمه، اتاقت رو خنک کن، یا چیزی شبیه اون، و همه این چیزهای مختلف که بعد **event** رو **trigger** می‌کنن، یا به نوعی، این اجرا رو **trigger** می‌کنن، اونها **listener**های اون **event** هستن.
اونها **event** رو **trigger** نمی‌کنن.
چیزی که **event** رو **trigger** می‌کنه، هر اطلاعاتیه که دما رو به **TemperatureMonitor** ما می‌فرسته.
**TemperatureMonitor** کد خنک کردن اتاق شما یا ارسال پیام به شما رو اجرا نمی‌کنه.
**TemperatureMonitor** فقط یک کار انجام می‌ده. اون دما رو **monitor** می‌کنه و اگه اتفاق خاصی بیفته، یک **event** **raise** می‌کنه. همین.
ما می‌تونستیم همچنین چیزی شبیه این بگیم: فرض کنید دما زیر 20 درجه سانتی‌گراد هست، که معمولاً دمای اتاقه. می‌تونه 21، 22 باشه، بستگی داره. پس اگه دما زیر 21 بود، یک **event** دیگه **raise** کن.
و حالا می‌تونید بگید: دما رو با روشن کردن سیستم گرمایشی یا چیزی شبیه اون، بهتر یا افزایش بده.
برای اون، ما احتمالاً یک **event** دیگه ایجاد می‌کنیم تا اونهایی که به دمای زیر 20 اهمیت می‌دن، به اون گوش بدن و کار خودشون رو انجام بدن. اوکی.
خوب.
پس این مورد شماره یک بود.
حالا بیایید به عنوان مورد بعدی، یک سیستم **stock price alert** (هشدار قیمت سهام) داشته باشیم.
و فکر می‌کنم می‌تونیم از اون به عنوان یک چالش کوچیک برای شما استفاده کنیم.
اوکی. بنابراین شما باید از همون اصول استفاده کنید که اینجا داریم. اما این بار با تغییر قیمت سهام یا سیستم هشدار، اوکی؟
لذت ببرید. موفق باشید و تو ویدیوی بعدی می‌بینمتون.