SlideShare a Scribd company logo
Cơ chế Delegate & Event
2 
NNộộii dduunngg 
 Delegate 
 Khái niệm delegate 
 Thực thi delegate 
 Multicast delegate 
 Giải pháp cho hàm Sort tổng quát 
 Event 
 Khái niệm event 
 Event & delegate 
 Cơ chế publishing & subscribing 
 Minh họa cơ chế event
3 
DDeelleeggaattee 
 Là một con trỏ, tham chiếu đến một hoặc nhiều hàm 
 Dùng trong event-handling model của C# 
 Đặc tính 
 Type safe 
 Object oriented mechanism
4 
DDeelleeggaattee 
 Một delegate định nghĩa một signature 
 Return type 
 Sequence of parameter types 
 Tất cả các method có cùng signature có thể được add vào 
thể hiện của delegate 
 Delegate instance có một danh sách các tham chiếu 
method 
 Cho phép add (+) các method 
 Có thể remove (-) các method
5 
DDeeffiinnee ddeelleeggaattee 
public delegate void MyDelegate1(int x, int y) 
Delegate cho dạng hàm: 
void Method( int, int ) 
public delegate string MyDelegate2(float f) 
Delegate cho dạng hàm: 
string Method( float )
6 
IInnssttaannccee ddeelleeggaattee 
public void Method1(int x, int y) 
{ 
… 
} 
… 
MyDelegate1 del1 = new MyDelegate1(Method1); 
public string Method2(float f) 
{ 
… 
} 
…MyDelegate2 del2 = new MyDelegate2(Method2);
7 
CCaallll DDeelleeggaattee 
iinntt xx == 55, yy == 1100;; 
ddeell11((xx, yy));; ddeell11((1100, 2200));; 
iinntt yy == 22;; 
ddeell11((110000, yy));; 
GGọọii ddeell11 
ffllooaatt ff ==00..55ff;; 
ssttrriinngg ss;; 
ss == ddeell22((ff));; 
ssttrriinngg ss == ddeell22((110000ff));; 
GGọọii ddeell22
8 
MMuullttii CCaasstt 
vvooiidd PPrriinntt((iinntt xx,iinntt yy)) {{ 
CCoonnssoollee..WWrriitteeLLiinnee((““xx == {{00}}, yy == {{11}}””, xx, yy));; 
}} 
vvooiidd SSuumm((iinntt xx, iinntt yy)) {{ 
CCoonnssoollee..WWrriitteeLLiinnee((““TToonngg == {{00}}””, xx++yy));; 
}} 
MMyyDDeelleeggaattee11 mmuullDDeell == nneeww MMyyDDeelleeggaattee11((PPrriinntt));; 
mmuullDDeell ++== nneeww MMyyDDeelleeggaattee11((SSuumm));; 
mmuullDDeell((55, 1100));; 
mmuullDDeell --== nneeww MMyyDDeelleeggaattee11((PPrriinntt));; 
mmuullDDeell((55,1100));;
9
10 
PPrroobblleemm 
Xây dựng hàm Sort 
tổng quát cho mảng 
đối tượng có kiểu 
bất kỳ
11 
SSoolluuttiioonn 
 Phân tích 
 Nếu đối tượng là kiểu số như int, long, float thì ko có vấn đề 
 Trường hợp đối tượng phức khác? 
SSoo ssáánnhh tthheeoo 
qquuyy ttắắcc nnààoo
12 
SSoolluuttiioonn 
 Giải pháp: 
 Cho phép đối tượng tự quy định thứ tự của chúng 
 Sử dụng delegate để truyền phương thức so sánh này vào 
hàm Sort 
void Sort(object[] list, CompareObj cmp) 
Delegate này sẽ tham chiếu tới hàm Compare 
của lớp MyClass. Chính lớp MyClass sẽ quy 
định thứ tự của các đối tượng
13 
SSoolluuttiioonn 
 Mô tả delegate CompareObj cho hàm Sort: 
Tên của delegate 
public delegate bool CompareObj(object o1,object o2) 
Trả về true: nếu o1 “trước” o2 
false: ngược lại 
2 đối tượng cần so 
sánh
14 
SSoolluuttiioonn 
Định nghĩa hàm Sort tổng 
quát cho các lớp 
ppuubblliicc ssttaattiicc vvooiidd SSoorrtt((oobbjjeecctt[[]] oobbjjss,, CCoommppaarreeOObbjj ccmmpp)) 
{{ 
ffoorr((iinntt ii==00;; ii << oobbjjss..LLeennggtthh--11;; ii++++)) 
ffoorr((iinntt jj==oobbjjss..LLeennggtthh--11;; jj>>ii;; jj----)) 
iiff (( ccmmpp(( oobbjjss[[jj]],, oobbjjss[[jj--11]] )) )) 
{{ 
SSwwaapp(( oobbjjss[[jj]],, oobbjjss[[jj--11]] ));; 
}} 
}} 
DDeelleeggaattee ssẽẽ ttrrỏỏ ttớớii hhààmm 
CCoommppaarree rriiêênngg ccủủaa llớớpp 
ttưươơnngg ứứnngg 
Yêu cầu lớp tự 
so sánh
15 
SSoolluuttiioonn 
 Các lớp hỗ trợ Sort thì phải 
 Cung cấp hàm Compare riêng 
 Signature phải thoả delegate CompareObj 
ccllaassss PPeerrssoonn {{ 
CCùùnngg 
pprriivvaattee ssttrriinngg nnaammee;; 
ssiiggnnaattuurree 
pprriivvaattee iinntt wweeiigghhtt;; 
pprriivvaattee iinntt yyeeaarrOOffBBiirrtthh;; 
ppuubblliicc ssttaattiicc bbooooll CCoommppaarreeNNaammee((oobbjjeecctt pp11,, oobbjjeecctt pp22)) {{ 
iiff ((ssttrriinngg..CCoommppaarree((((((PPeerrssoonn))pp11))..nnaammee,, ((((PPeerrssoonn))pp22))..nnaammee))<<00)) 
rreettuurrnn ttrruuee;; 
rreettuurrnn ffaallssee;; 
}} 
}}
16 
SSoolluuttiioonn 
public delegate bool CompareObj(object o1,object o2); 
… 
Person[ ] persons = new Person[4]; 
persons[0] = new Person(“Quy Mui", 2, 2004); 
persons[1] = new Person(“Ha Lam", 65, 1978); 
persons[2] = new Person(“Ngoc Thao", 47, 1979); 
persons[3] = new Person(“Quoc Trung", 65, 1932); 
CompareObj cmp = new CompareObj(Person.CompareName); 
Lib.Sort( persons, cmp ); 
Gọi hàm Sort 
Lớp chứa hàm Sort
17 
EEvveenntt
18 
EEvveenntt 
 Cơ chế trao đổi thông điệp giữa các đối tượng 
 Có thể thông báo cho lớp khác biết được khi một lớp có 
phát sinh điều gì đó 
 Publisher: lớp phát sinh sự kiện 
 Subscriber: lớp nhận hay xử lý khi sự kiện xảy ra
19 
EEvveenntt 
 Trong môi trường giao diện GUIs (Graphical User 
Interfaces: GUIs): 
 Button đưa ra sự kiện “Click”, cho phép lớp khác có thể đáp 
ứng (xử lý) khi sự kiện này xảy ra. 
 VD: Button “Add” trong Form, khi sự kiện click xảy ra thì 
Form thực hiện lấy dữ liệu từ các TextBox đưa vào 
ListBox…
20 
Publishing && SSuubbssccrriibbiinngg 
 Một lớp có publish một tập các event cho phép các lớp 
khác subscribe 
 Button là lớp publish đưa ra event: click 
 Form là lớp subscribe có phần xử lý riêng khi “click” của 
Button kích hoạt. 
AA 
BB 
CC 
eevveenntt 
ppuubblliisshh 
ssuubbssccrriibbee 
Thông báo 
Đăng ký
21 
EEvveenntt && DDeelleeggaattee 
 Sự kiện trong C# được thực thi nhờ uỷ thác 
 Lớp publishing định nghĩa ủy thác 
 Những lớp subscribing phải thực thi 
 Khi sự kiện xuất hiện thì phương thức của lớp subscribing 
được gọi thông qua uỷ thác. 
 Phương thức để xử lý sự kiện gọi là trình xử lý sự kiện 
(event handler)
22 
EEvveenntt && DDeelleeggaattee 
 Trình xử lý sự kiện trong .NET Framework được mô tả như 
sau: 
 Trả về giá trị void 
 Tham số 1: nguồn phát sinh sự kiện, đây chính là đối tượng 
publisher 
 Tham số 2: là đối tượng thuộc lớp dẫn xuất từ EventArgs 
 Phải thực hiện trình xử lý sự kiện theo đúng mẫu trên!
ppuubblliicc ddeelleeggaattee vvooiidd HHaannddlleerrNNaammee((oobbjjeecctt oobbjj,, EEvveennttAArrggss aarrgg));; 
23 
EEvveenntt && DDeelleeggaattee 
 Khai báo delegate xử lý sự kiện 
 Khai báo event 
public event HandlerName OnEventName; 
 Các lớp muốn xử lý khi sự kiện OnEventName phát sinh 
thì phải thực thi event handler
24 
MMiinnhh hhọọaa 11 
 Xây dựng 1 lớp thực hiện yêu cầu: “cứ mỗi giây sẽ phát 
sinh 1 sự kiện” 
 Cho phép 2 lớp khác đăng ký xử lý sự kiện này, mỗi lớp có 
cách xử lý riêng: 
 Lớp A: hiển thị thời gian theo “mô phỏng đồng hồ analog” 
 Lớp B: hiển thị thời gian theo “mô phỏng đồng hồ digital”
25 
MMiinnhh hhọọaa 11 
 Tạo một lớp Clock: 
 Khai báo một event: OnSecondChange 
 Một phương thức Run: cứ 1s thì phát sinh sự kiện 
OnSecondChange 
 Tạo 2 lớp: AnalogClock và DigitalClock nhận xử lý sự kiện 
OnSecondChange của lớp Clock
26 
MMiinnhh hhọọaa 11 
 Khai báo delegate xử lý event 
TTêênn ddeelleeggaattee xxửử llýý ssựự kkiiệệnn 
ddeelleeggaattee vvooiidd SSeeccoonnddCChhaannggeeHHaannddlleerr((oobbjjeecctt cclloocckk,, EEvveennttAArrggss iinnffoo));; 
ĐĐốốii ttưượợnngg pphháátt ssiinnhh eevveenntt 
TThhaamm ssốố kkiiểểuu EEvveennttAArrggss
27 
MMiinnhh hhọọaa 11 
 Khai báo event có hàm xử lý mô tả trên 
KKiiểểuu ddeelleeggaattee 
eevveenntt SSeeccoonnddCChhaannggeeHHaannddlleerr OOnnSSeeccoonnddCChhaannggee;; 
TTêênn ccủủaa eevveenntt 
TTừừ kkhhóóaa eevveenntt:: tthhểể hhiiệệnn ccơơ cchhếế ppuubblliisshhiinngg && ssuubbssccrriibbiinngg
28 
MMiinnhh hhọọaa 11 
 Kích hoạt sự kiện 
Kiểm tra xem có hàm xử lý 
được đăng ký hay không? 
if (OnSecondChange != null) 
OnSecondChange(this, new EventArgs()); 
Gọi hàm xử lý sự kiện đã đăng ký
29 
MMiinnhh hhọọaa 11 
public class Clock { 
public delegate void 
SecondChangeHandler(object clock, EventArgs info); 
public event SecondChangeHandler OnSecondChange; 
public void Run() { 
while (true) { 
Thread.Sleep(1000); 
if (OnSecondChange != null) 
OnSecondChange(this, new EventArgs()); 
} 
} 
}
30 
MMiinnhh hhọọaa 11 
 Lớp DigitalClock 
 Định nghĩa trình xử lý sự kiện của Clock 
 Đúng mô tả delegate hàm xử lý của lớp Clock 
 Thực hiện một số thao tác riêng của DigitalClock 
 Đăng ký xử lý với trình xử lý sự kiện trên khi có sự kiện 
OnSecondChange của Clock 
 Chức năng đăng ký với lớp Clock là có xử lý khi sự kiện 
OnSencondChange của Clock phát sinh 
 Ủy thác cho lớp Clock sẽ gọi trình xử lý định nghĩa bên trên của 
DigitalClock
Tên của trình xử lý Đối tượng phát sinh sự kiện 
31 
MMiinnhh hhọọaa 11 
 Trình xử lý của DigitalClock 
public void Show(object obj, EventArgs args) 
{ 
DateTime date = DateTime.Now; 
Console.WriteLine("Digital Clock: {0}:{1}:{2}", 
date.Hour, date.Minute, date.Second); 
}
32 
MMiinnhh hhọọaa 11 
 Đăng ký xử lý sự kiện 
ppuubblliicc vvooiidd SSuubbssccrriibbee((CClloocckk tthheeCClloocckk)) 
{{ 
tthheeCClloocckk..OOnnSSeeccoonnddCChhaannggee ++== 
nneeww CClloocckk..SSeeccoonnddCChhaannggeeHHaannddlleerr((SShhooww));; 
}} 
ĐĐốốii ttưượợnngg nnààyy ssẽẽ 
pphháátt ssiinnhh ssựự kkiiệệnn 
ỦỦyy tthháácc pphhưươơnngg tthhứứcc SShhooww cchhoo 
OOnnSSeeccoonnddCChhaannggee
33 
MMiinnhh hhọọaa 11 
public class DigitalClock 
{ 
public void Subscribe(Clock theClock) 
{ 
theClock.OnSecondChange += 
new Clock.SecondChangeHandler(Show); 
} 
public void Show(object obj, EventArgs args) 
{ 
DateTime date = DateTime.Now; 
Console.WriteLine("Digital Clock: {0}:{1}:{2}", 
date.Hour, date.Minute, date.Second); 
} 
}
34 
MMiinnhh hhọọaa 11 
 Lớp AnalogClock 
 Định nghĩa trình xử lý sự kiện của Clock 
 Đúng mô tả delegate hàm xử lý của lớp Clock 
 Thực hiện một số thao tác riêng của AnalogClock 
 Đăng ký xử lý với trình xử lý sự kiện trên khi có sự kiện 
OnSecondChange của Clock 
 Chức năng đăng ký với lớp Clock là có xử lý khi sự kiện 
OnSencondChange của Clock phát sinh 
 Ủy thác cho lớp Clock sẽ gọi trình xử lý định nghĩa bên trên của 
AnalogClock
35 
MMiinnhh hhọọaa 11 
public class AnalogClock 
{ 
public void Subscribe(Clock theClock) 
{ 
theClock.OnSecondChange += 
new 
Clock.SecondChangeHandler(Show); 
} 
public void Show(object obj, EventArgs args) 
{ 
DateTime date = DateTime.Now; 
Console.WriteLine("Analog Clock: {0}:{1}:{2}", 
date.Hour,date.Minute,date.Second); 
} 
}
36 
MMiinnhh hhọọaa 11 
 Minh họa cơ chế event 
public class Tester { 
public static void Main() { 
Clock myClock = new Clock(); 
AnalogClock c1 = new AnalogClock(); 
DigitalClock c2 = new DigitalClock(); 
c1.Subscribe(myClock); 
c2.Subscribe(myClock); 
myClock.Run(); 
} 
} 
ĐĐăănngg kkýý xxửử llýý ssựự kkiiệệnn ccủủaa đđốốii 
ttưượợnngg mmyyCClloocckk!! 
Phát sinh sự kiện
37 
MMiinnhh hhọọaa 11 
public static void Main( ) { 
Clock myClock = new Clock(); 
AnalogClock c1 = new AnalogClock(); 
DigitalClock c2 = new DigitalClock(); 
myClock.OnSecondChange += new 
Clock.SecondChangeHandler(c1.Show); 
myClock.OnSecondChange += new 
Clock.SecondChangeHandler(c2.Show); 
myClock.Run(); 
} 
ĐĐưượợcc kkoo??
38
39 
MMiinnhh hhọọaa EEvveennttAArrggss 
 Hạn chế: 
 Mỗi lớp subscibing phải lấy giờ hiện hành riêng Þ trùng 
 Nên truyền tham số từ lớp publishing ngay khi phát sinh sự 
kiện 
 Giải pháp: 
 Khi phát sinh sự kiện, truyền thời gian hiện hành Þ lớp 
subscribing sẽ sử dụng tham số này 
 Tạo một lớp TimeEventArgs kế thừa từ EventArgs: chứa thời 
gian sẽ truyền đi
40 
EEvveenntt 
 Bài tập 
Viết một chương trình đơn giản minh họa 
quản lý tài khoản ATM: khi rút tiền hoặc 
chuyển tiền thì hệ thống sẽ gởi tự động tin 
nhắn đến handphone của chủ tài khoản. 
Hướng dẫn: 
- Khi rút tiền hoặc chuyển tiền xong: phát 
sinh sự kiện “đã rút tiền” hoặc “đã chuyển 
tiền”
41 
TTóómm ttắắtt 
 Delegate 
 Cho phép tạo thể hiện 
 Tham chiếu đến một phương thức 
 Multi cast delegate tham chiếu đến nhiều phương thức 
 Multi cast là delegate có giá trị trả về phải là void 
 Các phương thức được ủy quyền phải thoả signature method 
của delegate 
 Khi delegate được gọi nó sẽ thực thi tất cả các phương thức 
được ủy quyền
42 
TTóómm ttắắtt 
 Event 
 Event được thực thi thông qua delegate 
 Thể hiện sự truyền thông qua lại 
 Lớp phát sinh sự kiện: publishing 
 Những lớp xử lý sự kiện: sucsribing 
 Thành phần quan trọng trong GUIs
43

More Related Content

Viewers also liked

Neutering report
Neutering reportNeutering report
Neutering report
Pocket Pets
 
Escapee report
Escapee reportEscapee report
Escapee report
Pocket Pets
 
Diverses images, animaux, curiosités
Diverses images, animaux, curiositésDiverses images, animaux, curiosités
Diverses images, animaux, curiositésMartin Gagnon
 
Exotic dvm-11-3-complete
Exotic dvm-11-3-completeExotic dvm-11-3-complete
Exotic dvm-11-3-complete
Pocket Pets
 
Images sublimes 11
Images sublimes 11Images sublimes 11
Images sublimes 11
Martin Gagnon
 
What Must I Do? - The Preacher's Favorite Passage
What Must I Do? - The Preacher's Favorite PassageWhat Must I Do? - The Preacher's Favorite Passage
What Must I Do? - The Preacher's Favorite Passage
Lee Snow
 
Introducing Forms, From Check I'm Here
Introducing Forms, From Check I'm HereIntroducing Forms, From Check I'm Here
Introducing Forms, From Check I'm Here
Check I'm Here
 
Effective Presentations
Effective PresentationsEffective Presentations
Effective Presentations
Lee Snow
 
Serving with Motivation
Serving with MotivationServing with Motivation
Serving with Motivation
Lee Snow
 
Vet info
Vet infoVet info
Vet info
Pocket Pets
 

Viewers also liked (11)

Neutering report
Neutering reportNeutering report
Neutering report
 
Escapee report
Escapee reportEscapee report
Escapee report
 
El moghni physique mécanique
El moghni physique mécaniqueEl moghni physique mécanique
El moghni physique mécanique
 
Diverses images, animaux, curiosités
Diverses images, animaux, curiositésDiverses images, animaux, curiosités
Diverses images, animaux, curiosités
 
Exotic dvm-11-3-complete
Exotic dvm-11-3-completeExotic dvm-11-3-complete
Exotic dvm-11-3-complete
 
Images sublimes 11
Images sublimes 11Images sublimes 11
Images sublimes 11
 
What Must I Do? - The Preacher's Favorite Passage
What Must I Do? - The Preacher's Favorite PassageWhat Must I Do? - The Preacher's Favorite Passage
What Must I Do? - The Preacher's Favorite Passage
 
Introducing Forms, From Check I'm Here
Introducing Forms, From Check I'm HereIntroducing Forms, From Check I'm Here
Introducing Forms, From Check I'm Here
 
Effective Presentations
Effective PresentationsEffective Presentations
Effective Presentations
 
Serving with Motivation
Serving with MotivationServing with Motivation
Serving with Motivation
 
Vet info
Vet infoVet info
Vet info
 

Similar to W3 p5 delegate & eventb

P05 delegate & event 2009
P05 delegate & event 2009P05 delegate & event 2009
P05 delegate & event 2009Hà Ngọc
 
Bài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPT
Bài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPTBài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPT
Bài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPT
MasterCode.vn
 
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...
MasterCode.vn
 
Bài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hookBài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hook
jackjohn45
 
MVC
MVCMVC
MVC
tkot
 
Android report
Android reportAndroid report
Android reportMinh Đệ
 
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state management
hoangnguyentien
 
Session 08 Final
Session 08 FinalSession 08 Final
Session 08 FinalSamQuiDaiBo
 
Lập trình hướng đối tượng - p3
Lập trình hướng đối tượng - p3Lập trình hướng đối tượng - p3
Lập trình hướng đối tượng - p3
Học viện đào tạo CNTT NIIT iNET
 

Similar to W3 p5 delegate & eventb (11)

P05 delegate & event 2009
P05 delegate & event 2009P05 delegate & event 2009
P05 delegate & event 2009
 
Bài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPT
Bài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPTBài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPT
Bài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPT
 
User Control
User ControlUser Control
User Control
 
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...
 
Bài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hookBài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hook
 
MVC
MVCMVC
MVC
 
Android report
Android reportAndroid report
Android report
 
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state management
 
Session 08 Final
Session 08 FinalSession 08 Final
Session 08 Final
 
Lập trình hướng đối tượng - p3
Lập trình hướng đối tượng - p3Lập trình hướng đối tượng - p3
Lập trình hướng đối tượng - p3
 
Ung dung web chuong 5
Ung dung web  chuong 5Ung dung web  chuong 5
Ung dung web chuong 5
 

Recently uploaded

YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủYHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
duyanh05052004
 
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docxBÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
HngL891608
 
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
khanhthy3000
 
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdfDANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
thanhluan21
 
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang ThiềuBiểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
lamluanvan.net Viết thuê luận văn
 
trắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxdddddddddddddddddtrắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxddddddddddddddddd
my21xn0084
 
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
Nguyen Thanh Tu Collection
 
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
NamNguynHi23
 
bài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docxbài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docx
HiYnThTh
 
Smartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024juneSmartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024june
SmartBiz
 
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thươngPLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
hieutrinhvan27052005
 
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docxVăn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
metamngoc123
 
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdfTHONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
QucHHunhnh
 
Halloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary schoolHalloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary school
AnhPhm265031
 
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
Nguyen Thanh Tu Collection
 
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
Nguyen Thanh Tu Collection
 
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdfTừ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Man_Ebook
 

Recently uploaded (17)

YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủYHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
 
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docxBÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
 
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
 
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdfDANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
 
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang ThiềuBiểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
 
trắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxdddddddddddddddddtrắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxddddddddddddddddd
 
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
 
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
 
bài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docxbài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docx
 
Smartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024juneSmartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024june
 
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thươngPLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
 
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docxVăn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
 
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdfTHONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
 
Halloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary schoolHalloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary school
 
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
 
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
 
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdfTừ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
 

W3 p5 delegate & eventb

  • 2. 2 NNộộii dduunngg  Delegate  Khái niệm delegate  Thực thi delegate  Multicast delegate  Giải pháp cho hàm Sort tổng quát  Event  Khái niệm event  Event & delegate  Cơ chế publishing & subscribing  Minh họa cơ chế event
  • 3. 3 DDeelleeggaattee  Là một con trỏ, tham chiếu đến một hoặc nhiều hàm  Dùng trong event-handling model của C#  Đặc tính  Type safe  Object oriented mechanism
  • 4. 4 DDeelleeggaattee  Một delegate định nghĩa một signature  Return type  Sequence of parameter types  Tất cả các method có cùng signature có thể được add vào thể hiện của delegate  Delegate instance có một danh sách các tham chiếu method  Cho phép add (+) các method  Có thể remove (-) các method
  • 5. 5 DDeeffiinnee ddeelleeggaattee public delegate void MyDelegate1(int x, int y) Delegate cho dạng hàm: void Method( int, int ) public delegate string MyDelegate2(float f) Delegate cho dạng hàm: string Method( float )
  • 6. 6 IInnssttaannccee ddeelleeggaattee public void Method1(int x, int y) { … } … MyDelegate1 del1 = new MyDelegate1(Method1); public string Method2(float f) { … } …MyDelegate2 del2 = new MyDelegate2(Method2);
  • 7. 7 CCaallll DDeelleeggaattee iinntt xx == 55, yy == 1100;; ddeell11((xx, yy));; ddeell11((1100, 2200));; iinntt yy == 22;; ddeell11((110000, yy));; GGọọii ddeell11 ffllooaatt ff ==00..55ff;; ssttrriinngg ss;; ss == ddeell22((ff));; ssttrriinngg ss == ddeell22((110000ff));; GGọọii ddeell22
  • 8. 8 MMuullttii CCaasstt vvooiidd PPrriinntt((iinntt xx,iinntt yy)) {{ CCoonnssoollee..WWrriitteeLLiinnee((““xx == {{00}}, yy == {{11}}””, xx, yy));; }} vvooiidd SSuumm((iinntt xx, iinntt yy)) {{ CCoonnssoollee..WWrriitteeLLiinnee((““TToonngg == {{00}}””, xx++yy));; }} MMyyDDeelleeggaattee11 mmuullDDeell == nneeww MMyyDDeelleeggaattee11((PPrriinntt));; mmuullDDeell ++== nneeww MMyyDDeelleeggaattee11((SSuumm));; mmuullDDeell((55, 1100));; mmuullDDeell --== nneeww MMyyDDeelleeggaattee11((PPrriinntt));; mmuullDDeell((55,1100));;
  • 9. 9
  • 10. 10 PPrroobblleemm Xây dựng hàm Sort tổng quát cho mảng đối tượng có kiểu bất kỳ
  • 11. 11 SSoolluuttiioonn  Phân tích  Nếu đối tượng là kiểu số như int, long, float thì ko có vấn đề  Trường hợp đối tượng phức khác? SSoo ssáánnhh tthheeoo qquuyy ttắắcc nnààoo
  • 12. 12 SSoolluuttiioonn  Giải pháp:  Cho phép đối tượng tự quy định thứ tự của chúng  Sử dụng delegate để truyền phương thức so sánh này vào hàm Sort void Sort(object[] list, CompareObj cmp) Delegate này sẽ tham chiếu tới hàm Compare của lớp MyClass. Chính lớp MyClass sẽ quy định thứ tự của các đối tượng
  • 13. 13 SSoolluuttiioonn  Mô tả delegate CompareObj cho hàm Sort: Tên của delegate public delegate bool CompareObj(object o1,object o2) Trả về true: nếu o1 “trước” o2 false: ngược lại 2 đối tượng cần so sánh
  • 14. 14 SSoolluuttiioonn Định nghĩa hàm Sort tổng quát cho các lớp ppuubblliicc ssttaattiicc vvooiidd SSoorrtt((oobbjjeecctt[[]] oobbjjss,, CCoommppaarreeOObbjj ccmmpp)) {{ ffoorr((iinntt ii==00;; ii << oobbjjss..LLeennggtthh--11;; ii++++)) ffoorr((iinntt jj==oobbjjss..LLeennggtthh--11;; jj>>ii;; jj----)) iiff (( ccmmpp(( oobbjjss[[jj]],, oobbjjss[[jj--11]] )) )) {{ SSwwaapp(( oobbjjss[[jj]],, oobbjjss[[jj--11]] ));; }} }} DDeelleeggaattee ssẽẽ ttrrỏỏ ttớớii hhààmm CCoommppaarree rriiêênngg ccủủaa llớớpp ttưươơnngg ứứnngg Yêu cầu lớp tự so sánh
  • 15. 15 SSoolluuttiioonn  Các lớp hỗ trợ Sort thì phải  Cung cấp hàm Compare riêng  Signature phải thoả delegate CompareObj ccllaassss PPeerrssoonn {{ CCùùnngg pprriivvaattee ssttrriinngg nnaammee;; ssiiggnnaattuurree pprriivvaattee iinntt wweeiigghhtt;; pprriivvaattee iinntt yyeeaarrOOffBBiirrtthh;; ppuubblliicc ssttaattiicc bbooooll CCoommppaarreeNNaammee((oobbjjeecctt pp11,, oobbjjeecctt pp22)) {{ iiff ((ssttrriinngg..CCoommppaarree((((((PPeerrssoonn))pp11))..nnaammee,, ((((PPeerrssoonn))pp22))..nnaammee))<<00)) rreettuurrnn ttrruuee;; rreettuurrnn ffaallssee;; }} }}
  • 16. 16 SSoolluuttiioonn public delegate bool CompareObj(object o1,object o2); … Person[ ] persons = new Person[4]; persons[0] = new Person(“Quy Mui", 2, 2004); persons[1] = new Person(“Ha Lam", 65, 1978); persons[2] = new Person(“Ngoc Thao", 47, 1979); persons[3] = new Person(“Quoc Trung", 65, 1932); CompareObj cmp = new CompareObj(Person.CompareName); Lib.Sort( persons, cmp ); Gọi hàm Sort Lớp chứa hàm Sort
  • 18. 18 EEvveenntt  Cơ chế trao đổi thông điệp giữa các đối tượng  Có thể thông báo cho lớp khác biết được khi một lớp có phát sinh điều gì đó  Publisher: lớp phát sinh sự kiện  Subscriber: lớp nhận hay xử lý khi sự kiện xảy ra
  • 19. 19 EEvveenntt  Trong môi trường giao diện GUIs (Graphical User Interfaces: GUIs):  Button đưa ra sự kiện “Click”, cho phép lớp khác có thể đáp ứng (xử lý) khi sự kiện này xảy ra.  VD: Button “Add” trong Form, khi sự kiện click xảy ra thì Form thực hiện lấy dữ liệu từ các TextBox đưa vào ListBox…
  • 20. 20 Publishing && SSuubbssccrriibbiinngg  Một lớp có publish một tập các event cho phép các lớp khác subscribe  Button là lớp publish đưa ra event: click  Form là lớp subscribe có phần xử lý riêng khi “click” của Button kích hoạt. AA BB CC eevveenntt ppuubblliisshh ssuubbssccrriibbee Thông báo Đăng ký
  • 21. 21 EEvveenntt && DDeelleeggaattee  Sự kiện trong C# được thực thi nhờ uỷ thác  Lớp publishing định nghĩa ủy thác  Những lớp subscribing phải thực thi  Khi sự kiện xuất hiện thì phương thức của lớp subscribing được gọi thông qua uỷ thác.  Phương thức để xử lý sự kiện gọi là trình xử lý sự kiện (event handler)
  • 22. 22 EEvveenntt && DDeelleeggaattee  Trình xử lý sự kiện trong .NET Framework được mô tả như sau:  Trả về giá trị void  Tham số 1: nguồn phát sinh sự kiện, đây chính là đối tượng publisher  Tham số 2: là đối tượng thuộc lớp dẫn xuất từ EventArgs  Phải thực hiện trình xử lý sự kiện theo đúng mẫu trên!
  • 23. ppuubblliicc ddeelleeggaattee vvooiidd HHaannddlleerrNNaammee((oobbjjeecctt oobbjj,, EEvveennttAArrggss aarrgg));; 23 EEvveenntt && DDeelleeggaattee  Khai báo delegate xử lý sự kiện  Khai báo event public event HandlerName OnEventName;  Các lớp muốn xử lý khi sự kiện OnEventName phát sinh thì phải thực thi event handler
  • 24. 24 MMiinnhh hhọọaa 11  Xây dựng 1 lớp thực hiện yêu cầu: “cứ mỗi giây sẽ phát sinh 1 sự kiện”  Cho phép 2 lớp khác đăng ký xử lý sự kiện này, mỗi lớp có cách xử lý riêng:  Lớp A: hiển thị thời gian theo “mô phỏng đồng hồ analog”  Lớp B: hiển thị thời gian theo “mô phỏng đồng hồ digital”
  • 25. 25 MMiinnhh hhọọaa 11  Tạo một lớp Clock:  Khai báo một event: OnSecondChange  Một phương thức Run: cứ 1s thì phát sinh sự kiện OnSecondChange  Tạo 2 lớp: AnalogClock và DigitalClock nhận xử lý sự kiện OnSecondChange của lớp Clock
  • 26. 26 MMiinnhh hhọọaa 11  Khai báo delegate xử lý event TTêênn ddeelleeggaattee xxửử llýý ssựự kkiiệệnn ddeelleeggaattee vvooiidd SSeeccoonnddCChhaannggeeHHaannddlleerr((oobbjjeecctt cclloocckk,, EEvveennttAArrggss iinnffoo));; ĐĐốốii ttưượợnngg pphháátt ssiinnhh eevveenntt TThhaamm ssốố kkiiểểuu EEvveennttAArrggss
  • 27. 27 MMiinnhh hhọọaa 11  Khai báo event có hàm xử lý mô tả trên KKiiểểuu ddeelleeggaattee eevveenntt SSeeccoonnddCChhaannggeeHHaannddlleerr OOnnSSeeccoonnddCChhaannggee;; TTêênn ccủủaa eevveenntt TTừừ kkhhóóaa eevveenntt:: tthhểể hhiiệệnn ccơơ cchhếế ppuubblliisshhiinngg && ssuubbssccrriibbiinngg
  • 28. 28 MMiinnhh hhọọaa 11  Kích hoạt sự kiện Kiểm tra xem có hàm xử lý được đăng ký hay không? if (OnSecondChange != null) OnSecondChange(this, new EventArgs()); Gọi hàm xử lý sự kiện đã đăng ký
  • 29. 29 MMiinnhh hhọọaa 11 public class Clock { public delegate void SecondChangeHandler(object clock, EventArgs info); public event SecondChangeHandler OnSecondChange; public void Run() { while (true) { Thread.Sleep(1000); if (OnSecondChange != null) OnSecondChange(this, new EventArgs()); } } }
  • 30. 30 MMiinnhh hhọọaa 11  Lớp DigitalClock  Định nghĩa trình xử lý sự kiện của Clock  Đúng mô tả delegate hàm xử lý của lớp Clock  Thực hiện một số thao tác riêng của DigitalClock  Đăng ký xử lý với trình xử lý sự kiện trên khi có sự kiện OnSecondChange của Clock  Chức năng đăng ký với lớp Clock là có xử lý khi sự kiện OnSencondChange của Clock phát sinh  Ủy thác cho lớp Clock sẽ gọi trình xử lý định nghĩa bên trên của DigitalClock
  • 31. Tên của trình xử lý Đối tượng phát sinh sự kiện 31 MMiinnhh hhọọaa 11  Trình xử lý của DigitalClock public void Show(object obj, EventArgs args) { DateTime date = DateTime.Now; Console.WriteLine("Digital Clock: {0}:{1}:{2}", date.Hour, date.Minute, date.Second); }
  • 32. 32 MMiinnhh hhọọaa 11  Đăng ký xử lý sự kiện ppuubblliicc vvooiidd SSuubbssccrriibbee((CClloocckk tthheeCClloocckk)) {{ tthheeCClloocckk..OOnnSSeeccoonnddCChhaannggee ++== nneeww CClloocckk..SSeeccoonnddCChhaannggeeHHaannddlleerr((SShhooww));; }} ĐĐốốii ttưượợnngg nnààyy ssẽẽ pphháátt ssiinnhh ssựự kkiiệệnn ỦỦyy tthháácc pphhưươơnngg tthhứứcc SShhooww cchhoo OOnnSSeeccoonnddCChhaannggee
  • 33. 33 MMiinnhh hhọọaa 11 public class DigitalClock { public void Subscribe(Clock theClock) { theClock.OnSecondChange += new Clock.SecondChangeHandler(Show); } public void Show(object obj, EventArgs args) { DateTime date = DateTime.Now; Console.WriteLine("Digital Clock: {0}:{1}:{2}", date.Hour, date.Minute, date.Second); } }
  • 34. 34 MMiinnhh hhọọaa 11  Lớp AnalogClock  Định nghĩa trình xử lý sự kiện của Clock  Đúng mô tả delegate hàm xử lý của lớp Clock  Thực hiện một số thao tác riêng của AnalogClock  Đăng ký xử lý với trình xử lý sự kiện trên khi có sự kiện OnSecondChange của Clock  Chức năng đăng ký với lớp Clock là có xử lý khi sự kiện OnSencondChange của Clock phát sinh  Ủy thác cho lớp Clock sẽ gọi trình xử lý định nghĩa bên trên của AnalogClock
  • 35. 35 MMiinnhh hhọọaa 11 public class AnalogClock { public void Subscribe(Clock theClock) { theClock.OnSecondChange += new Clock.SecondChangeHandler(Show); } public void Show(object obj, EventArgs args) { DateTime date = DateTime.Now; Console.WriteLine("Analog Clock: {0}:{1}:{2}", date.Hour,date.Minute,date.Second); } }
  • 36. 36 MMiinnhh hhọọaa 11  Minh họa cơ chế event public class Tester { public static void Main() { Clock myClock = new Clock(); AnalogClock c1 = new AnalogClock(); DigitalClock c2 = new DigitalClock(); c1.Subscribe(myClock); c2.Subscribe(myClock); myClock.Run(); } } ĐĐăănngg kkýý xxửử llýý ssựự kkiiệệnn ccủủaa đđốốii ttưượợnngg mmyyCClloocckk!! Phát sinh sự kiện
  • 37. 37 MMiinnhh hhọọaa 11 public static void Main( ) { Clock myClock = new Clock(); AnalogClock c1 = new AnalogClock(); DigitalClock c2 = new DigitalClock(); myClock.OnSecondChange += new Clock.SecondChangeHandler(c1.Show); myClock.OnSecondChange += new Clock.SecondChangeHandler(c2.Show); myClock.Run(); } ĐĐưượợcc kkoo??
  • 38. 38
  • 39. 39 MMiinnhh hhọọaa EEvveennttAArrggss  Hạn chế:  Mỗi lớp subscibing phải lấy giờ hiện hành riêng Þ trùng  Nên truyền tham số từ lớp publishing ngay khi phát sinh sự kiện  Giải pháp:  Khi phát sinh sự kiện, truyền thời gian hiện hành Þ lớp subscribing sẽ sử dụng tham số này  Tạo một lớp TimeEventArgs kế thừa từ EventArgs: chứa thời gian sẽ truyền đi
  • 40. 40 EEvveenntt  Bài tập Viết một chương trình đơn giản minh họa quản lý tài khoản ATM: khi rút tiền hoặc chuyển tiền thì hệ thống sẽ gởi tự động tin nhắn đến handphone của chủ tài khoản. Hướng dẫn: - Khi rút tiền hoặc chuyển tiền xong: phát sinh sự kiện “đã rút tiền” hoặc “đã chuyển tiền”
  • 41. 41 TTóómm ttắắtt  Delegate  Cho phép tạo thể hiện  Tham chiếu đến một phương thức  Multi cast delegate tham chiếu đến nhiều phương thức  Multi cast là delegate có giá trị trả về phải là void  Các phương thức được ủy quyền phải thoả signature method của delegate  Khi delegate được gọi nó sẽ thực thi tất cả các phương thức được ủy quyền
  • 42. 42 TTóómm ttắắtt  Event  Event được thực thi thông qua delegate  Thể hiện sự truyền thông qua lại  Lớp phát sinh sự kiện: publishing  Những lớp xử lý sự kiện: sucsribing  Thành phần quan trọng trong GUIs
  • 43. 43

Editor's Notes

  1. Delegate xem hàm như một đối tượng và truyền tham chiếu phương thức như là tham số bình thương, khong sử Dụng kiểu con trỏ hàm như C/C++
  2. Vấn đề của bài toán này: Giải pháp dùng delegate cho mỗi lớp
  3. Chúng ta có thể khai báo trình xử lý sự kiện này như chúng ta đã làm với bất cứ delegate khác.
  4. Từ khóa event có thể ko có cũng ko sao