SlideShare a Scribd company logo
1 of 43
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 reportPocket 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-completePocket Pets
 
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 PassageLee 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 HereCheck I'm Here
 
Effective Presentations
Effective PresentationsEffective Presentations
Effective PresentationsLee Snow
 
Serving with Motivation
Serving with MotivationServing with Motivation
Serving with MotivationLee Snow
 

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 FPTMasterCode.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 hookjackjohn45
 
MVC
MVCMVC
MVCtkot
 
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 managementhoangnguyentien
 
Session 08 Final
Session 08 FinalSession 08 Final
Session 08 FinalSamQuiDaiBo
 

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

SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...Nguyen Thanh Tu Collection
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...hoangtuansinh1
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfVyTng986513
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...ThunTrn734461
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................TrnHoa46
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfTrnHoa46
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhvanhathvc
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líDr K-OGN
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxAnAn97022
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 

Recently uploaded (20)

SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptx
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 

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