Bài giảng cung cấp cho người học các kiến thức: Cơ chế ủy quyền (delegate), cơ chế multicast delegate, sử dụng event với delegate. Đây là một tài liệu hữu ích dành cho các bạn sinh viên ngành Công nghệ thông tin và những ai quan tâm dùng làm tài liệu học tập và nghiên cứu.
Object-Oriented Programming Using C# NGƠN NGỮ LẬP TRÌNH NÂNG CAO Ver 1.0 Slide of 28 Object-Oriented Programming Using C# Mục đích Trong phần này, học: Cơ chế ủy quyền(delegate) Cơ chế multicast delegate Sử dụng event với delegate Ver 1.0 Slide of 28 Object-Oriented Programming Using C# Giới thiệu Delegate Delegate C# cho phép thay đổi linh động tham chiếu phương thức class Một delegate biến kiểu tham chiếu, lưu trữ tham chiếu tới phương thức Delegate chế để gọi phương thức gián tiếp chạy Nó thường sử dụng để thực thi kiện (event) hàm callback cho chương trình Để thực thi delegate ứng dụng, cần khai báo delegate, tạo thể delegate sử dụng delegate Ver 1.0 Slide of 28 Object-Oriented Programming Using C# Khai báo Delegates Các phương thức tham chiếu delegate xác định khai báo delegate Delegate đại diện cho phương thức có chữ ký Ver 1.0 Slide of 28 Object-Oriented Programming Using C# Khai báo Delegates (tiếp.) Cú pháp khai báo delegate: [modifier] delegate(); Ví dụ: public delegate int DoSomething(int x, int y); Ver 1.0 Slide of 28 Object-Oriented Programming Using C# Khởi tạo Delegates Gán địa phương thức yêu cầu cho đối tượng delegate Phương thức thực thi cách gọi hàm tạo lớp delegate truyền tên phương thức Ver 1.0 Slide of 28 Object-Oriented Programming Using C# Khởi tạo Delegates (tiếp) Ví dụ: Cách gán địa phương thức vào biến delegate: public void DelegateFunction(string PassValue) { // Thực thi yêu cầu } //Khai báo delegate public delegate void MyDelegate(string ArgValue); public void UseMethod() { //Khởi tạo delegate MyDelegate DelegateObject = new MyDelegate(DelegateFunction); } Ver 1.0 Slide of 28 Object-Oriented Programming Using C# Sử dụng Delegate Có thể gọi delegate cách đưa tên delegate truyền tham số (nếu có) Sử dụng delegates tương tự gọi phương thức Ver 1.0 Slide of 28 Object-Oriented Programming Using C# Sử dụng Delegate (tiếp) Ví dụ 1: using System; delegate int NumberChanger(int n); namespace DelegateCsharp { class TestCsharp{ static int num = 10; public static int AddNum(int p){ num += p; return num; } public static int MultNum(int q){ num *= q; return num; } public static int getNum(){ return num; } Ver 1.0 Slide of 28 Object-Oriented Programming Using C# Sử dụng Delegate (tiếp) static void Main(string[] args){ //tao cac doi tuong delegate NumberChanger nc1 = new NumberChanger(AddNum); NumberChanger nc2 = new NumberChanger(MultNum); //goi cac phuong thuc boi su dung cac doi tuong delegate nc1(25); Console.WriteLine("Gia tri la: {0}", getNum()); nc2(5); Console.WriteLine("Gia tri la: {0}", getNum()); Console.ReadKey(); } } } Ver 1.0 Slide 10 of 28 Object-Oriented Programming Using C# Câu hỏi Câu lệnh sau hay sai? Multicast delegate kế thừa từ lớp System.Delegate.MulticastDelegate Trả lời: Sai Ver 1.0 Slide 22 of 28 Object-Oriented Programming Using C# Làm việc với Event Một event hành động kiện kích, nhấn bàn phím, di chuyển chuột, thông báo hệ thống Ứng dụng đáp ứng event chúng xảy Ver 1.0 Slide 23 of 28 Object-Oriented Programming Using C# Làm việc với Event (tiếp) Hình sau kiện đồng hồ xử lý kiện Đồng hồ thời gian sáng Báo thức hàng ngày đồng hồ sáng Chúng ta nghe thấy báo thức Chúng ta thức dậy sẵn sàng tới trường Ver 1.0 Slide 24 of 28 Object-Oriented Programming Using C# Sử dụng Delegate với Event Event khai báo phát sinh class kết hợp với xử lý event sử dụng delegate class class khác Event phần class class sử dụng để xử lý kiện Tuy nhiên, lớp khác chấp nhận event tập hợp event Event sử dụng mơ hình publisher subscriber publisher đối tượng chứa định nghĩa event delegate Sự kết hợp event delegate xác định lớp publisher subscriber đối tượng muốn chấp nhận event cung cấp xử lý cho event Delegate lớp publisher gọi phương thức lớp subscriber Ver 1.0 Slide 25 of 28 Object-Oriented Programming Using C# Sử dụng Delegates với Events (tiếp) Hình sau chế sử dụng đối tượng publisher subscriber Chúng ta tìm hiểu chi tiết sử dụng delegate với event Ver 1.0 Slide 26 of 28 Object-Oriented Programming Using C# Sử dụng Delegates với Events (tiếp) Thực thi event bao gồm: Định nghĩa Events Đăng ký Events Thông báo Events Ver 1.0 Slide 27 of 28 Object-Oriented Programming Using C# Sử dụng Delegates với Events (tiếp) Định nghĩa Event: Định nghĩa event lớp publisher bao gồm việc khai báo delegate khai báo event dựa vào delegate Đoạn mã sau định nghĩa delegate tên TimeToRise event tên RingAlarm, event gọi delegate TimeToRise phát sinh: public delegate void TimeToRise(); private event TimeToRise RingAlarm; Ver 1.0 Slide 28 of 28 Object-Oriented Programming Using C# Sử dụng Delegates với Events (tiếp) Đăng ký Event: Event lớp publisher cần kết hợp với việc xử lý Phương thức để xử lý event liên quan tới việc sử dụng delegate Khi đối tượng publisher phát sinh event, đối tượng đăng ký liên quan tới phương thức cần gọi Yêu cầu thực thi sử dụng events Đoạn mã sau miêu tả cách thức lớp Student đăng ký kiện tên RingAlarm: Student PD= new Student(); RingAlarm += new TimeToRise(PD.WakeUp); Ver 1.0 Slide 29 of 28 Object-Oriented Programming Using C# Sử dụng Delegate với Event (tiếp) Thông báo Subcriber tới Event: Đối tượng subscriber thông báo cho đối tượng publisher Event phát sinh để thông báo xử lý Khối mã sau đặt vị trí muốn thơng báo event cho event subscriber: if (RingAlarm != null) { RingAlarm( ); } Ver 1.0 Slide 30 of 28 Object-Oriented Programming Using C# Truyền tham số Event Phương thức thông báo event mong muốn vài tham số truyền vào Lớp event có đầu vào chạy phương thức đăng ký Chúng ta cần định nghĩa lớp truyền đầu vào cho event Lớp dẫn xuất từ System.EventArgs Để truyền giá trị cho phương thức đăng ký, cần đính kèm tham số lớp đơn Lớp đơn áp dụng phương thức đặc biệt gọi phương thức truy cập để truy xuất giá trị Phương thức sử dụng để truy cập biến đổi thành viên lớp Ver 1.0 Slide 31 of 28 Object-Oriented Programming Using C# Ver 1.0 Slide 32 of 28 Object-Oriented Programming Using C# Ver 1.0 Slide 33 of 28 Object-Oriented Programming Using C# Ver 1.0 Slide 34 of 28 Object-Oriented Programming Using C# Ví dụ: Ghi nhận thời gian làm việc Vấn đề đặt ra: Trong công ty điều hịa khơng khí, thời gian làm việc từ 9h sáng tới 6h chiều Quản lý công ty mềm dẻo cho phép nhân viên đến làm muộn 1h Thời gian vào làm việc hệ thống ghi vào tập tin nhân viên đến làm việc Ứng dụng sử dụng cho việc ghi nhận nhân viên đến làm việc với thơng tin thích hợp Bạn giúp cơng ty thiết kế ứng dụng để ghi nhận thời gian nhân viên tới làm việc Ver 1.0 Slide 35 of 28 Object-Oriented Programming Using C# Tổng kết Trong phần này, học: Delegate cho phép ghi mã thay đổi linh hoạt phương thức mà gọi Có hai kiểu delegate: Single-cast delegate Multicast delegate Một single-cast delegate gọi phương thức Multicast delegate giữ tham chiếu nhiều phương thức Single-cast delegate dẫn xuất từ lớp System.Delegate Multicast delegate dẫn xuất từ lớp System.MulticastDelegate Event thông điệp gửi đối tượng để kiện event Event sử dụng mơ hình publisher subscriber Ver 1.0 Slide 36 of 28 ... delegate: Single-cast delegate Multicast delegate Ver 1.0 Slide 15 of 28 Object-Oriented Programming Using C# Single-Cast Delegate Single-cast delegate dẫn xuất từ lớp System.Delegate Nó chứa tham... Object-Oriented Programming Using C# Ver 1.0 Slide 32 of 28 Object-Oriented Programming Using C# Ver 1.0 Slide 33 of 28 Object-Oriented Programming Using C# Ver 1.0 Slide 34 of 28 Object-Oriented... Object-Oriented Programming Using C# Sử dụng Delegate với Event Event khai báo phát sinh class kết hợp với xử lý event sử dụng delegate class class khác Event phần class class sử dụng để xử lý kiện