Events
Event یکی دیگر از ویژگیهای مهم سیشارپ است که بر اساس delegate میباشد. یک object میتواند برای یک event تعدادی event handler را register کند و هنگامیکه یک event اتفاق میافتد، تمامی handler های register شده، فراخوانی میشوند. Event handler ها باید مطابق با delegate باشند.
Event ها اعضای کلاس هستند و توسط کلمهی کلیدی event تعریف میشوند. فرم آن به شکل زیر است:
در اینجا، event-delegate نام آن delegate است که این event را support میکند و event-name نام همین event object است که تعریف کردهایم.
به مثال زیر توجه کنید:
این برنامه با تعریف delegate type برای event handler شروع میشود:
تمام event ها از طریق delegate فعال میشوند. از اینرو، event delegate type، نوع بازگشتی و signature را برای event مشخص میکند.
سپس، کلاس MyEvent تعریف شده که درون آن، یک event به نام SomeEvent تعریف شده است:
۱
public event MyEventHandler SomeEvent;
همچنین، درون کلاس MyEvent یک متد به نام ()OnSomeEvent وجود دارد که برای fire کردن event استفاده میشود. یعنی این همان متدی است که وقتی event اتفاق میافتد، فراخوانی میشود. این متد، event handler را از طریق SomeEvent delegate فراخوانی میکند:
۱
۲
if (SomeEvent != null)
SomeEvent();
دقت کنید که handler درصورتی فراخوانی میشود که SomeEvent برابر با null نباشد. درون کلاس EventDemo یک متد به اسم ()Handler وجود داردکه درون متد ()Main بهعنوان handler برای event شیء تعریف شده، register میشود:
۱
۲
MyEvent evt = new MyEvent();
evt.SomeEvent += Handler;
دقت کنید که handler از طریق += افزوده شده است. event ها فقط از += و -= پیشتیبانی میکنند. در نهایت میبینید که event بهصورت زیر fire شده است:
۱
evt.OnSomeEvent();
فراخوانی ()OnSomeEvent موجب میشود تا تمامی event handler های register شده، فراخوانی شوند. در این مورد تنها یک handler را register کرده بودیم اما میتوانید تعداد بیشتری را نیز register کنید.