Sự kiện (Event) trong C | 85 bài học lập trình C hay nhất PDF

7 139 0
Sự kiện (Event) trong C  | 85 bài học lập trình C  hay nhất PDF

Đang tải... (xem toàn văn)

Thông tin tài liệu

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Sự kiện (Event) C# Sự kiện (Event) hành động người dùng, ví dụ nhấn phím, click, di chuyển chuột, … Các Application cần phản hồi kiện chúng xuất Ví dụ, ngắt (interrupt) Các kiện (Event) sử dụng để giao tiếp bên tiến trình Sử dụng Delegate với Event C# Các Event khai báo tạo lớp liên kết với Event Handler sử dụng Delegate bên lớp số lớp khác Lớp mà chứa Event sử dụng để công bố event Điều gọi lớp Publisher Một số lớp khác mà chấp nhận Event gọi lớp Subscriber Các Event C# sử dụng mơ hình PublisherSubscriber Một Publisher C# đối tượng mà chứa định nghĩa event delegate Mối liên hệ event-delegate định nghĩa đối tượng Một đối tượng lớp Publisher triệu hồi Event thơng báo tới đối tượng khác Một Subscriber C# đối tượng mà chấp nhận event cung cấp Event Handler Delegate lớp Publisher triệu hồi phương thức (Event Handler) lớp Subscriber Khai báo Event C# Để khai báo Event bên lớp, kiểu delegate cho Event phải khai báo Ví dụ: public delegate void BoilerLogHandler(string status); Tiếp theo, Event khai báo, sử dụng từ khóa event C#: //Defining event based on the above delegate public event BoilerLogHandler BoilerEventLog; Code định nghĩa delegate với tên BoilerLogHandler Event với tên làBoilerEventLog, mà triệu hồi delegate tạo Ví dụ using System; namespace SimpleEvent http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com { 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(); } } http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com } public class MainClass { public static void Main() { EventTest e = new EventTest(5); e.SetValue(7); e.SetValue(11); Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: Event Fired! Event Fired! Event Fired! Ví dụ Ví dụ cung cấp application đơn giản để xử lý cố cho hệ thống nồi đun nước nóng Khi kỹ sư bảo dưỡng kiểm tra nồi hơi, nhiệt độ áp suất nồi tự động ghi lại vào log file với ghi kỹ sư bảo dưỡng using System; using System.IO; namespace BoilerEventAppl { // boiler class class Boiler { private int temp; private int pressure; http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com 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) { http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com 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() http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com { 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 } Khi code biên dịch thực thi, cho kết quả: Logging info: http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Temperature 100 Pressure 12 Message: O K http://vietjack.com/ Trang chia sẻ học online miễn phí Page ... > 150 || t < 80 || p < 12 || p > 15) { http://vietjack.com/ Trang chia sẻ h c online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com remarks = "Need Maintenance"; }... n; OnNumChanged(); } } http://vietjack.com/ Trang chia sẻ h c online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com } public class MainClass { public static void Main()... public void Close() http://vietjack.com/ Trang chia sẻ h c online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com { sw.Close(); fs.Close(); } } // The event subscriber

Ngày đăng: 02/12/2017, 20:00

Mục lục

  • Sự kiện (Event) trong C#

    • Sử dụng Delegate với Event trong C#

    • Khai báo Event trong C#

    • Ví dụ 1

    • Ví dụ 2

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan