Delegate & Event - Nguyen Ha Giang potx

52 280 0
Delegate & Event - Nguyen Ha Giang potx

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Delegate & Event Nguyen Ha Giang 1Nguyen Ha Giang -200909/09/2012 Table of Contents § Delegate § Definition of delegate § Working with delegates in C# § Multicast delegate § Problem & Solution for generic Sort method § Event § What is event § Event & delegate § Publishing & subscribing § Demo using event § Summary 2Nguyen Ha Giang -2009 09/09/2012 Definition of delegate • Class package some signature methods • Using in event-handling model of C# • Like C/C++ method pointers, but more specific – Type safe – Object-oriented mechanism • Delegates are classes – Can create instances of delegates – Delegates can refer one or more methods 3Nguyen Ha Giang -2009 09/09/2012 Definition of delegate • Delegates define a method signature – Return type – Sequence of parameter types • Any method has same signature can add to instance of delegate • Delegate instances have the list of method references – Using “ +=” for adding method to instance – Using “ -=” for removing method out of instance 4Nguyen Ha Giang -2009 09/09/2012 Working with delegates • Define a delegate in namespace or class 5Nguyen Ha Giang -2009 09/09/2012 public delegate void MyDelegate1(intx, inty); Delegate for methods: void ABC( int, int ) public delegate string MyDelegate2(float f); Delegate for methods: string XYZ( float ) Working with delegates • Instance of delegate 6Nguyen Ha Giang -2009 09/09/2012 class Test { public void Method1(inta, intb) { // body of method } … } Test t = new Test(); MyDelegate1 d1 = new MyDelegate1( t.Method1); public delegate void MyDelegate1(intx, inty); Working with delegate • Instance of delegate 7Nguyen Ha Giang -2009 09/09/2012 class Test { … public static string Method2(float f) { // body of method } } MyDelegate2 d2 = new MyDelegate2( Test.Method2); public delegate string MyDelegate2(float f); Working with delegate • Invoking delegates 8Nguyen Ha Giang -2009 09/09/2012 intx = 5, y = 10; d1(x, y); d1(10, 20); inty = 2; d1(100, y); d1 float f =0.5f; string s = d2(f); string s = d2(100); d2 Invoking multiple delegate • Using only for delegates with no return value 9Nguyen Ha Giang -2009 09/09/2012 class Test { public delegate voidMyDelegate3(intn1, intn2); static void Print(intx, inty) { Console.WriteLine("x={0}, y={1}", x, y); } static void Sum(inta, intb) { Console.WriteLine("Tong={0}", a + b); } // (cont)… } No return Invoking multiple delegate 10Nguyen Ha Giang -2009 09/09/2012 class Test { //… static void Main(string[] args) { MyDelegate3 md= new MyDelegate3(Print); md +=new MyDelegate3(Sum); md(5, 10); md -= new MyDelegate3(Print); md(50, 60); } } x=5, y=10 Tong=15 Tong=110 [...]... SecondChangeHandler(object clock, EventArgs info); Đối tượng phát sinh event Tham số kiểu EventArgs 09/09/2012 Nguyen Ha Giang - 2009 29 Minh h a • Khai báo event có hàm xử lý mô tả trên Kiểu delegate event SecondChangeHandler OnSecondChange; Tên của event Từ khóa event: thể hiện cơ chế publishing & subscribing 09/09/2012 Nguyen Ha Giang - 2009 30 Minh h a • Kích hoạt sự kiện Kiểm tra xem có hàm xử lý được đăng ký hay không?... 09/09/2012 Nguyen Ha Giang - 2009 27 Minh h a • 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 09/09/2012 Nguyen Ha Giang - 2009 28 Minh h a • Khai báo delegate xử lý event Tên delegate xử lý sự kiện delegate void SecondChangeHandler(object... kiện (event handler) 09/09/2012 Nguyen Ha Giang - 2009 24 Event & Delegate • 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! 09/09/2012 Nguyen Ha Giang - 2009 25 Event & Delegate • Khai... Person(“Ngoc Thao", 47, 1979); persons[3] = new Person( Ha Nam", 4, 2009); // create instance of delegate refer to Person.CompareName CompareObj cmp = new CompareObj(Person.CompareName); HaGLib.Sort( persons, cmp ); Class contains static Sort method 09/09/2012 Nguyen Ha Giang - 2009 18 09/09/2012 Nguyen Ha Giang - 2009 19 09/09/2012 Nguyen Ha Giang - 2009 20 Event • Cơ chế thông điệp giữa các lớp hay các... (OnSecondChange != null) OnSecondChange(this, new EventArgs()); Gọi hàm xử lý sự kiện đã đăng ký 09/09/2012 Nguyen Ha Giang - 2009 31 Minh h a 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());... mẫu trên! 09/09/2012 Nguyen Ha Giang - 2009 25 Event & Delegate • Khai báo delegate xử lý sự kiện public delegate void HandlerName(object obj, EventArgs arg); • 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 09/09/2012 Nguyen Ha Giang - 2009 26 Minh h a • Xây dựng 1 lớp thực hiện yêu cầu: “cứ mỗi giây sẽ phát... passed Nguyen Ha Giang - 2009 15 Solution Delegate will refer to compare method of class Definition of Sort method public static void Sort(object[] objs, CompareObj cmp) { for(int i=0; i < objs.Length-1; i++) for(int j=objs.Length-1; j>i; j ) if ( cmp( objs[j], objs[j-1] ) == -1 ) Swap( objs[j], objs[j-1] ); Invoking delegate (refer Compare method of class) } 09/09/2012 Nguyen Ha Giang - 2009 16 Solution...09/09/2012 Nguyen Ha Giang - 2009 11 Problem How to build the Sort method for array of objects of any data type? 09/09/2012 Nguyen Ha Giang - 2009 12 Problem • Survey – The objects are (primitive) data type such as: long, int, float, string…so easy to do! – In other case, object is complex data type, how to do? Which criteria for comparing? 09/09/2012 Nguyen Ha Giang - 2009 13 Solution • Objects have to... void Subscribe(Clock theClock) { theClock.OnSecondChange += new Clock.SecondChangeHandler(Show); } Ủy thác phương thức Show cho OnSecondChange 09/09/2012 Nguyen Ha Giang - 2009 35 Minh h a 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... Using delegate to pass “compare method” into Sort method void Sort(object[] list, CompareObj cmp) This delegate refers to Compare method of class which need to sort 09/09/2012 Nguyen Ha Giang - 2009 14 Solution • Define delegate CompareObj for Sort method Name of delegate type public delegate int CompareObj(object o1, object o2) -1 : 0 : 1 : 09/09/2012 o1 “” o2 Two objects passed Nguyen . Delegate & Event Nguyen Ha Giang 1Nguyen Ha Giang -2 00909/09/2012 Table of Contents § Delegate § Definition of delegate § Working with delegates in C# § Multicast delegate § Problem &. generic Sort method § Event § What is event § Event & delegate § Publishing & subscribing § Demo using event § Summary 2Nguyen Ha Giang -2 009 09/09/2012 Definition of delegate • Class package. Ha Giang -2 009 09/09/2012 public delegate int CompareObj(object o1, object o2) -1 : o1 “<“ o2 0 : o1 “=“ o2 1 : o1 “>” o2 Two objects passed Name of delegate type Solution 1 6Nguyen Ha Giang

Ngày đăng: 28/03/2014, 16:20

Từ khóa liên quan

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

Tài liệu liên quan