کلمه کلیدی event در سی شارپ

رویدادها رویدادها یک کلاس یا شی را قادر می سازد که هنگام وقوع چیزی مورد علاقه ، به کلاسها یا اشیاء دیگر اطلاع دهند.کلاسی که رویداد را ارسال می کند (یا مطرح می کند raise) ناشرpublisher نامیده می شود و کلاس هایی که رویداد را دریافت می کنند (یا اداره می کنند handle) مشترکین subscribers می نامند.در یک برنامه معمولی C# Windows Forms یا وب ، شما در رویدادهایی که توسط کنترل هایی مانند دکمه ها و list box ها مطرح شده(raise شده) است ، مشترک می شوید.شما می توانید از محیط ویژوال سی شارپ توسعه یکپارچه (IDE) استفاده کنید تا رویدادهایی را که یک کنترل منتشر می کند مرور کنید و مواردی را که می خواهید handle کنید انتخاب کنید.IDE روشی آسان برای اضافه کردن خودکار یک متد کنترل رویداد خالی(empty event handler method) و کد برای اشتراکsubscribe در این رویداد فراهم می کند.برای اطلاعات بیشتر How to: Subscribe to and Unsubscribe from Events ببینید.بررسی اجمالی رویدادهارویدادها دارای خصوصیات زیر هستند:ناشر تعیین می کند که چه رویدادی مطرح می شود. مشترکان تعیین می کنند که در پاسخ به این رویداد چه اقدامی انجام می شود.یک رویداد می تواند مشترکان متعددی داشته باشد. یک مشترک می تواند چندین ناشر را با چندین رویداد اداره کند(handle کند).رویدادهایی که مشترک ندارند هرگز مطرحraise نمی شوند.رویدادها معمولاً برای سیگنال کردن اقدامات کاربر مانند کلیک دکمه یا انتخاب منو در رابط های گرافیکی کاربر استفاده می شوند.هنگامی که یک رویداد چندین مشترک دارد ، هنگام raise شدن یک رویداد ، به طور همزمان synchronously فراخوانی می شود. برای فراخوانی رویدادها به صورت asynchronously این Calling Synchronous Methods Asynchronously ببینید.در کتابخانه کلاس .NET Framework ، رویدادها بر اساس delegateنماینده EventHandler و کلاس پایه EventArgs انجام می شوند.بخش های مرتبطبرای اطلاعات بیشتر لینکهای زیر را ببینید:How to: Subscribe to and Unsubscribe from Events<br/>How to: Publish Events that Conform to .NET Framework Guidelines<br/>How to: Raise Base Class Events in Derived Classes<br/>How to: Implement Interface Events<br/>How to: Implement Custom Event Accessors<br/>منبعکلمه کلیدی event/رویداد برای اعلام یک رویداد در یک کلاس ناشر/publisher class استفاده می شود.مثال زیر نحوه اعلام و بالا بردن رویدادی را نشان می دهد که از EventHandler به عنوان نوع delegate/نماینده اصلی استفاده می کند.برای دیدن نحوه استفاده از نوع نماینده عمومی EventHandler&lt;TEventArgs&gt; (generic EventHandler&lt;TEventArgs&gt; delegate) و نحوه اشتراک در یک رویداد و ایجاد یک روش کنترل رویداد را نشان می دهد ، How to: Publish Events that Conform to .NET Framework Guidelines ببینید.public class SampleEventArgs { public SampleEventArgs(string s) { Text = s; } public String Text { get; } // readonly } public class Publisher { // Declare the delegate (if using non-generic pattern). public delegate void SampleEventHandler(object sender, SampleEventArgs e); // Declare the event. public event SampleEventHandler SampleEvent; // Wrap the event in a protected virtual method // to enable derived classes to raise the event. protected virtual void RaiseSampleEvent() { // Raise the event by using the () operator. if (SampleEvent != null) SampleEvent(this, new SampleEventArgs("Hello")); } }رویدادها نوع خاصی از نمایندگان چند مرحله ای (multicast delegate) هستند که فقط در داخل class یا struct در جایی که اعلام می شود می توان استناد کرد (منظور publisher class است).اگر class ها یا struct های دیگری مشترک در این رویداد باشند ، وقتی کلاس ناشر (publisher class) رویداد را بالا می برد (رویداد را raise می کند) ، event handler methods آنها فراخوانی می شود. برای اطلاعات بیشتر Events و Delegates ببینید.رویدادها می توانند به صورت عمومی public، خصوصیprivate ، محافظت شده protected، داخلیinternal ، محافظت شده داخلیprotected internal یا محافظت شده خصوصیprivate protected مشخص شوند.این access modifiers ها نحوه دسترسی کاربران کلاس به این رویداد را تعریف می کنند.برای اطلاعات بیشتر Access Modifiers ببینید.کلمات کلیدی و رویدادهاکلمات کلیدی زیر برای رویدادها اعمال می شود.ایستا static :این رویداد را در هر زمان در دسترس قرار می دهد ، حتی اگر نمونه ای از کلاس وجود نداشته باشد. برای اطلاعات بیشتر Static Classes and Static Class Members ببینید.مجازی virtual : به کلاسهای مشتق شده اجازه می دهد تا با استفاده از کلمه کلیدی override ، رفتار رویداد را override کنید.برای اطلاعات بیشتر وراثتInheritance را ببینید.مهر و موم شده sealed : مشخص می کند که برای کلاس های مشتق شده دیگر مجازی نیست(it is no longer virtual).مجرد abstract : کامپایلر بلوکهای دسترسی رویداد را اضافه add و حذف remove نمی کند و بنابراین کلاس های مشتق شده باید پیاده سازیimplementation خود را ارائه دهند.با استفاده از کلمه کلیدی static می توان یک رویداد به عنوان یک رویداد استاتیک اعلام کرد.این امر باعث می شود این رویداد در هر زمان در دسترس صدا زنندگان قرار گیرد ، حتی اگر نمونه ای از کلاس وجود نداشته باشد.برای اطلاعات بیشتر Static Classes and Static Class Members ببینید.با استفاده از کلیدی virtual می توان یک رویداد را به عنوان یک رویداد مجازی علامت گذاری کرد.این امر باعث می شود کلاسهای مشتق شده با استفاده از کلمه کلیدی override ، رفتار رویداد را override کرد.override کردن یک رویداد مجازی همچنین می تواند sealed باشد، که مشخص می کند که برای کلاسهای مشتق شده از آن دیگر مجازی نیست.در آخر اینکه ، یک رویداد می تواند abstract اعلام شود ، به این معنی که کامپایلر باعث ایجاد افزونه و حذف بلوکهای دسترسی رویداد نمی شود.بنابراین کلاسهای مشتق شده باید پیاده سازی خود را ارائه دهند.منبع