1. Trang chủ
  2. » Công Nghệ Thông Tin

Delegate & Event - Nguyen Ha Giang potx

52 280 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 52
Dung lượng 507,48 KB

Nội dung

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

w