Bài 13
Delegate và Event
Ôn tập lại bài cũ
• Kỹ thuật generic
• System.Collections.generic
• Generic class
• Generic method
• Generic interface
• Iterator
Delegate và Event
Nội dung trình bày
• Định nghĩa delegate
• Khai báo delegate
• Sử dụng delegate
• Multicast delegate
• Các đặc điểm của delegate
• Định nghĩa event
Subject name / Session# / 3 of Totalpage
• Khai báo và sử dụng event
Delegate và Event
•
namespace Akadia.NoDelegate
{
public class MyClass
{
public void Process()
{
Console.WriteLine("Process() begin");
Console.WriteLine("Process() end");
}
}
public class Test
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.Process();
}
}
}
Định nghĩa delegate using System;
Delegate và Event
Định nghĩa delegate
• Muốn gọi một phương thức chúng ta phải gọi thông qua đối tượng
hoặc thông quan lớp nếu phương thức là tĩnh(có từ khóa static đặt
trước).
• Chúng ta có thể gọi một phương thức một cách gián tiếp thông qua
delegate
• Delegate giống như khái niệm con trỏ hàm trong ngôn ngữ C và C+
+. Nó dùng để tham chiếu đến một phương thức.
• Đối tượng delegate chứa(bao gói) sự tham chiếu đến một phương
thức trong nó.
Delegate và Event
• delegate result-type identifier ([parameters]);
• Trong đó delegate là từ khóa
•
result-type là kiểu dữ liệu trả về, phải giống kiểu dữ liệu trả về của phương thức mà
delegate tham chiếu đến
•
identifier là tên delegate
• Parameters là các tham số, phải giống kiểu và số lượng đối số của phương thức mà
delegate định tham chiếu đến
• Ví dụ:
• public delegate void SimpleDelegate ()
(cid:0) Khai báo một delegate tên là SimpleDelegate, delegate này có thể tham chiếu đến
bất kỳ phương thức nào không có đối số và không có kiểu dữ liệu trả về.
• public delegate int ButtonClickHandler (object obj1, object obj2)
Khai báo delegate
Delegate và Event
Sử dụng delegate
(cid:0) Khai báo delegate
delegate result-type identifier ([parameters]);
(cid:0) Viết phương thức mà delegate sẽ tham chiếu đến
Phương thức mà delegate tham chiếu đến phải có nguyên mẫu giống
deletegate
(cid:0) Khởi tạo đối tượng delegate
(cid:0) Gọi đối tượng delegate
ObjectName(parameters);
• Gồm 3 bước:
Ví dụ DEMO
Delegate và Event
Multicast delegate
• Một delegate có thể tham chiếu đến nhiều hơn một phương thức tại
một thời điểm.
• Sử dụng toán tử +=
• Ví dụ DEMO
Delegate và Event
Tại sao cần delegate
• Dùng để tạo ra cơ chế truyền dữ liệu qua sự kiện trong mô hình lập
trình hướng sự kiện.
• Khi đối tượng A phát sinh một sự kiện, nó mu n truy n s ki n
ề ự ệ
ố
này sang B . Nh ng A
c vi
c (A là m t button ch ng
ư
đượ
t tr ế ướ
ẳ
ộ
h n)
c vi
c B (Ví d B là m t Form ch ng h n) nên A
ạ đượ
t tr ế ướ
ụ
ạ
ẳ
ộ
không th bi
t B có nh ng ph
g i . Nên c n
ể ế
ữ
ươ
ng th c nào ứ
để ọ
ầ
nh ngh a tr
c m t nguyên m u cho A r i implement trong B ,
đị
ĩ
ướ
ẫ
ồ
ộ
r i A g i B qua nguyên m u này . ồ
ẫ
ọ
Delegate và Event
Định nghĩa event
• Event(sự kiện) được tạo ra bởi người dùng hoặc hệ thống. Ví dụ khi người
dùng click lên một Button
Publisher là đối tượng
thực hiện công việc nào đó
Và tạo ra event
Subcribers là đối tượng đã
gược đăng ký(subscribed)
để nhận sự kiện
Delegate và Event
Khai báo và sử dụng event
• Khai báo bên trong một lớp hoặc interface
• Ví dụ:
//Khai báo delegate
public delegate void LogHandler(string message);
// Khai báo một event dựa trên delegate
public event LogHandler Log;
Delegate và Event
Delegate và Event
Khai báo và sử dụng event
• Khai báo delegate
• Khai báo event
• Gán kết event với delegate(listener) và phương thức xử lý
event(event handler)
• Tạo event(raise event)
Ví dụ DEMO
Delegate và Event
Kết luận
• Khái niệm và cách sử dụng delegate
• Multicast delegate
• Khái niệm event và cách khai báo
• Gán kết delegate với event(subcribing to event )