C # เหตุการณ์ (event)
อีเว้นท์ (event) โดยทั่วไปว่าคือการกระทำของผู้ใช้เช่นปุ่มคลิกเมาส์เคลื่อนไหว ฯลฯ หรือบางส่วนที่เกิดขึ้นใหม่เช่นการแจ้งเตือนระบบสร้างการประยุกต์ใช้ความต้องการที่จะตอบสนองต่อเหตุการณ์เมื่อมีเหตุการณ์เกิดขึ้น ยกตัวอย่างเช่นการขัดจังหวะ เหตุการณ์ที่จะใช้สำหรับการสื่อสารระหว่างกระบวนการ
โดยใช้เหตุการณ์ตัวแทน
และเหตุการณ์ที่เกิดขึ้นในการประกาศคลาสและโดยใช้คลาสเดียวกันผู้ร่วมประชุมที่เกี่ยวข้องกับการจัดการเหตุการณ์หรือชั้นเรียนอื่น ๆ ชั้นมีกิจกรรมสำหรับกิจกรรมการเผยแพร่นี้เรียกว่าสำนักพิมพ์ (Publisher) ระดับอื่น ๆยอมรับประเภทเหตุการณ์ที่เรียกว่าฟีดอ่าน (Subscriber) ระดับเหตุการณ์ที่เกิดขึ้นโดยใช้เผยแพร่ - สมัคร (ผู้เผยแพร่สมาชิก) รุ่น
สำนักพิมพ์ (สำนักพิมพ์) และมีการจัดกิจกรรมที่เป็นตัวแทนที่กำหนดวัตถุการติดต่อระหว่างเหตุการณ์และผู้ได้รับมอบหมายมีการกำหนดไว้ในวัตถุนี้ วัตถุ Publisher (สำนักพิมพ์) รุ่นที่เรียกเหตุการณ์นี้และแจ้งให้วัตถุอื่น ๆ
อุปกรณ์ฟีด (Subscriber) เป็นเหตุการณ์ที่ได้รับการยอมรับและให้วัตถุจัดการเหตุการณ์ในสำนักพิมพ์ (Publisher) ระดับผู้รับมอบสิทธิ์อ่านฟีดภาวนา (Subscriber) วิธีการเรียน (ตัวจัดการเหตุการณ์)
งบจัดกิจกรรม (event)
ในกรณีที่มีการประกาศภายในชั้นแรกคุณจะต้องประกาศประเภทผู้รับมอบสิทธิ์สำหรับเหตุการณ์ ตัวอย่างเช่น:
ผู้ร่วมประชุมสาธารณะ (Status String) เป็นโมฆะ BoilerLogHandler;
จากนั้นประกาศเหตุการณ์ที่ตัวเองใช้คำว่าเหตุการณ์:
// ตามคำจำกัดความข้างต้นของเหตุการณ์ที่ผู้ร่วมประชุมเหตุการณ์ที่ประชาชน BoilerLogHandler BoilerEventLog;
รหัสข้างต้นกำหนดเป็นตัวแทนและเหตุการณ์ชื่อBoilerEventLogชื่อBoilerLogHandler เหตุการณ์จะถูกสร้างขึ้นเมื่อผู้ร่วมประชุมจะเรียก
ตัวอย่างที่ 1
การใช้ระบบ SimpleEvent namespace { การใช้ระบบ EventTest เรียนสาธารณะ { ค่า int เอกชน ผู้ร่วมประชุมโมฆะสาธารณะ NumManipulationHandler (); เหตุการณ์ที่ประชาชน NumManipulationHandler ChangeNum; โมฆะป้องกันเสมือน OnNumChanged () { ถ้า (ChangeNum! = null) { ChangeNum (); } อื่น { Console.WriteLine ( "เหตุการณ์ยิง!"); } } ประชาชน EventTest (int n) { SetValue (n); } โมฆะสาธารณะ SetValue (int n) { ถ้า (ค่า! = n) { value = n; OnNumChanged (); } } } MainClass เรียนสาธารณะ { ประชาชนเป็นโมฆะคง Main () { EventTest E = EventTest ใหม่ (5) (7) e.SetValue; e.SetValue (11); Console.ReadKey (); } } }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
เหตุการณ์ยิง! เหตุการณ์ยิง! เหตุการณ์ยิง!
ตัวอย่างที่ 2
ตัวอย่างนี้ให้ระบบหม้อไอน้ำน้ำร้อนที่เรียบง่ายสำหรับการใช้งานการแก้ไขปัญหา เมื่อวิศวกรบำรุงรักษาเพื่อตรวจสอบหม้อไอน้ำ, หม้อไอน้ำที่อุณหภูมิและความดันจะเป็นบันทึกการบำรุงรักษาวิศวกรบันทึกลงในแฟ้มบันทึกโดยอัตโนมัติ
การใช้ระบบ โดยใช้ System.IO; BoilerEventAppl namespace { // บอยเลอร์บอยเลอร์คลาส { อุณหภูมิ int เอกชน ความดัน int เอกชน หม้อไอน้ำสาธารณะ (int T, int P) { อุณหภูมิ T =; ความดัน = p; } int สาธารณะ getTemp () { กลับอุณหภูมิ; } int สาธารณะ getPressure () { กลับดัน } } // DelegateBoilerEvent ระดับสำนักพิมพ์ที่จัดกิจกรรม { ผู้ร่วมประชุมสาธารณะ (Status String) เป็นโมฆะ BoilerLogHandler; // ตามคำจำกัดความข้างต้นของเหตุการณ์ที่ผู้ร่วมประชุมเหตุการณ์ที่ประชาชน BoilerLogHandler BoilerEventLog; โมฆะสาธารณะ LogProcess () { หมายเหตุสตริง = "โอเค"; หม้อไอน้ำ B = หม้อไอน้ำใหม่ (100, 12); int t = b.getTemp (); int p = b.getPressure (); ถ้า (T> 150 || T <80 || p <12 || p> 15) { หมายเหตุ = "จำเป็นต้องบำรุงรักษา"; } OnBoilerEventLog ( "การเข้าสู่ระบบข้อมูล: \ n"); OnBoilerEventLog ( "temparature" + T + "\ nPressure:" + P); OnBoilerEventLog ( "\ nMessage:" + หมายเหตุ); } โมฆะป้องกัน OnBoilerEventLog (ข้อความ String) { ถ้า (BoilerEventLog! = null) { BoilerEventLog (ข้อความ); } } } ข้อตกลงและเงื่อนไขการจองดังกล่าว // เขียนไป BoilerInfoLogger ระดับล็อกไฟล์ { FS FileStream; StreamWriter SW; ประชาชน BoilerInfoLogger (สตริงชื่อไฟล์) { FS = FileStream ใหม่ (ชื่อไฟล์ FileMode.Append, FileAccess.Write); SW = StreamWriter ใหม่ (FS); } โมฆะสาธารณะ Logger (ข้อมูล String) { sw.WriteLine (ข้อมูล); } ปิดโมฆะสาธารณะ () { sw.Close (); fs.Close (); } } // การสมัครสมาชิกเหตุการณ์เป็นชั้นสาธารณะ RecordBoilerInfo { เป็นโมฆะคง Logger (ข้อมูล String) { Console.WriteLine (ข้อมูล); } // สิ้นสุดของ Logger เป็นโมฆะคง main (String args []) { BoilerInfoLogger FileLog = ใหม่ BoilerInfoLogger ( "E: \\ boiler.txt"); DelegateBoilerEvent boilerEvent = DelegateBoilerEvent ใหม่ (); boilerEvent.BoilerEventLog + = ใหม่ DelegateBoilerEvent.BoilerLogHandler (Logger); boilerEvent.BoilerEventLog + = ใหม่ DelegateBoilerEvent.BoilerLogHandler (filelog.Logger); boilerEvent.LogProcess (); Console.ReadLine (); filelog.Close (); } // End หลัก } // สิ้นสุดของ RecordBoilerInfo }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
ข้อมูลการเข้าสู่ระบบ: อุณหภูมิ 100 ความดัน 12 ข้อความ: โอเค