برمجة متقدمة سي شارب الأحداث C# - Events
برمجة متقدمة سي شارب الأحداث C# - Events
ماهي الاحداث؟
الاحداث هي تفاعل المستخدم مع الحاسوب أو البرنامج. فالضغط على لوحة المفاتيح يسمى بحدث الضغط . تحريك الفارة يسمى بحدث تحريك الفارة.فاي شيء من العتاد الحاسوبي الذي يمكن للمستخدم التفاعل معه ومع برنامج يسمى بالاحداث لانه نتيجة ذلك يتم وقوع الحدث وعلى سبيل المثال في حدث الضغط على مفاتيح لوحة المفاتيح نجد ان المستخدم قام بالحدث وهو الضغط وهناك حدث عكسه وهو رفع الضغط عن المفاتيح.
استخدام التفويض مع الاحداث
يصرح عن الاحداث وتطلق من الفئة بالتعاون مع مقبض الحدث event handler باستخدام التفويض اما من داخل الفئة نفسها او فئات اخرى.
الفئة التي تحتوي على الحدث تستخدم لنشر الحدث تسمى بالفئة الناشرة publisher class. والفئة التي تستخدم الحدث تسمى بالفئة المشتركة subscriber. الاحداث تستخدم النموذج الناشر المشترك.
الناشر عبارة عن كائن يحتوي على الاحداث والتفويضات. تفويض الحدث المساعد ايضا يعرف داخل الكائن. الفئة الناشرة تستدعي الحدث وتعلم الكائنات الاخرى.
المشترك عبارة عن كائن يستقبل الحدث وهو يزود بمقبض الحدث . التفويض في كائن الناشر يقوم باستدعاء مقبض الحدث من كائن المشترك.
الاعلان أو التصريح عن الاحداث
للتصريح عن الاحداث اولا يجب التصريح عن التفويض ونوعه والباراميتر الذي يمرره اي بمعنى يطابق الحدث او الاحداث.
التصريح عن التفويض للحدث.
public delegate void BoilerLogHandler(string status);
التصريح عن الاحداث باستخدام الكلمة المحجوزة event
//تعريف حدث مبني على التفويض السابق public event BoilerLogHandler BoilerEventLog;
مثال الاول على الاحداث
using System; namespace SimpleEvent { using System; public class EventTest { private int value; public delegate void NumManipulationHandler(); public event NumManipulationHandler ChangeNum; protected virtual void OnNumChanged() { if (ChangeNum != null) { ChangeNum(); } else { Console.WriteLine("Event fired!"); } } public EventTest(int n ) { SetValue(n); } public void SetValue(int n) { if (value != n) { value = n; OnNumChanged(); } } } public class MainClass { public static void Main() { EventTest e = new EventTest(5); e.SetValue(7); e.SetValue(11); Console.ReadKey(); } } }
ناتج مثال الاول على الاحداث
Event Fired! Event Fired! Event Fired!
مثال الثاني على الاحداث
using System; using System.IO; namespace BoilerEventAppl { // boiler class class Boiler { private int temp; private int pressure; public Boiler(int t, int p) { temp = t; pressure = p; } public int getTemp() { return temp; } public int getPressure() { return pressure; } } // event publisher class DelegateBoilerEvent { public delegate void BoilerLogHandler(string status); //Defining event based on the above delegate public event BoilerLogHandler BoilerEventLog; public void LogProcess() { string remarks = "O. K"; Boiler b = new Boiler(100, 12); int t = b.getTemp(); int p = b.getPressure(); if(t > 150 || t < 80 || p < 12 || p > 15) { remarks = "Need Maintenance"; } OnBoilerEventLog("Logging Info:\n"); OnBoilerEventLog("Temparature " + t + "\nPressure: " + p); OnBoilerEventLog("\nMessage: " + remarks); } protected void OnBoilerEventLog(string message) { if (BoilerEventLog != null) { BoilerEventLog(message); } } } // this class keeps a provision for writing into the log file class BoilerInfoLogger { FileStream fs; StreamWriter sw; public BoilerInfoLogger(string filename) { fs = new FileStream(filename, FileMode.Append, FileAccess.Write); sw = new StreamWriter(fs); } public void Logger(string info) { sw.WriteLine(info); } public void Close() { sw.Close(); fs.Close(); } } // The event subscriber public class RecordBoilerInfo { static void Logger(string info) { Console.WriteLine(info); }//end of Logger static void Main(string[] args) { BoilerInfoLogger filelog = new BoilerInfoLogger("e:\\boiler.txt"); DelegateBoilerEvent boilerEvent = new DelegateBoilerEvent(); boilerEvent.BoilerEventLog += new DelegateBoilerEvent.BoilerLogHandler(Logger); boilerEvent.BoilerEventLog += new DelegateBoilerEvent.BoilerLogHandler(filelog.Logger); boilerEvent.LogProcess(); Console.ReadLine(); filelog.Close(); }//end of main }//end of RecordBoilerInfo }
ناتج مثال الحدث
Logging info: Temperature 100 Pressure 12 Message: O. K
Ahmed Ata Almahallawi
Freelancer
IT Help Desk,
SEO experience,PHP,C#,ASPX,SQL
SEO experience,PHP,C#,ASPX,SQL
Al alami st
gaza -jabalia, Gaza Strip
Palestine
DOB: 05/10/1984
by +Ahmed Almahallawi
by +Ahmed Almahallawi
12/1/2014
التسميات: advance-csharp
<< الصفحة الرئيسية