Bài giảng Lập trình trên Windows Chương 2 Trần Minh Thái (Phần 3)

29 282 1
Bài giảng Lập trình trên Windows Chương 2  Trần Minh Thái (Phần 3)

Đ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

Bài giảng Lập trình trên Windows Chương 2 Ngôn ngữ lập trình C (phần 3) cung cấp cho người học các kiến thức Khái niệm delegate, tạo đối tượng delegate, gọi đối tượng delegate, ứng dụng delegate,.... Mời các bạn cùng tham khảo nội dung chi tiết.

Lập trình Windows Chương Ngơn ngữ lập trình C# Phần Nội dung • Delegate • Event 2 Delegate Khái niệm • Kiểu delegate cho phép khai báo biến (đối tượng) tham chiếu đến phương thức (có chữ ký delegate quy định) System.Delegate System.MulticastDelegate User-delegate User-delegate Các bước sử dụng delegate Bước 1: Khai báo kiểu delegate Bước 2: Tạo đối tượng delegate Bước 3: Gắn phương thức vào đối tượng delegate Bước 4: Gọi đối tượng delegate Khai báo kiểu delegate [attributes][modifiers] [attributes][modifiers] delegate (parameterlist); delegate (parameterlist);  Ví dụ void Method1(); void Method1(); int Method2(); int Method2(); double Method3(double x, double y); double Method3(double x, double y); void Method4(EventArgs e); void Method4(EventArgs e); delegate void DelegateType1(); delegate void DelegateType1(); delegate int DelegateType2(); delegate int DelegateType2(); delegate double DelegateType3(double x, double y); delegate double DelegateType3(double x, double y); delegate void EventHandler(EventArgs e); delegate void EventHandler(EventArgs e); Tạo đối tượng delegate DelegateName objD; DelegateName objD; objD = new DelegateName(obj.methodName); objD = new DelegateName(obj.methodName); objD = new DelegateName(methodName); objD = new DelegateName(methodName); objD = obj.methodName; objD = obj.methodName; objD = obj.methodName; objD = obj.methodName; Đối tượng delegate khai báo field, tham số phương thức, biến cục phương thức Tạo đối tượng delegate • Bất kỳ phương thức phù hợp với chữ ký delegate gán cho đối tượng delegate • Các phương thức lưu invocation list delegate • Mỗi delegate gán phương thức biến hoạt động phương thức Gọi đối tượng delegate objD(parameterList); objD(parameterList);    Một lời gọi đến delegate gọi tất phương thức invocation list theo thứ tự Nếu invocation list rỗng ném ngoại lệ NullReferenceException Nếu kiểu trả phương thức khác void kết trả delegate kết phương thức cuối Gọi đối tượng delegate namespace Delegate.Example1 { delegate int DelegateType(int x, int y); class Program { static void Main(string []args) { Program obj = new Program(); DelegateType a = new DelegateType(obj.TinhTong); int kq = a(3, 4); Console.WriteLine("Ket qua = {0}", kq); } int TinhTong(int a, int b) { return a + b; } } } 10 So sánh delegate event namespace Delegate.Example2 { delegate void DelegateType(); class ClassA delegate { public DelegateType objD; public void Method() { if (objD != null) objD(); } } } 15 So sánh delegate event class ClassB { public void Xuat1() { Console.WriteLine("Xuat 1"); } public void Xuat2() { Console.WriteLine("Xuat 2"); } public void Ham() { ClassA p = new ClassA(); p.objD = Xuat1; p.objD += Xuat2; p.objD(); p.Method(); } } 16 So sánh delegate event namespace Delegate.Event.Example { delegate void DelegateType(); Sự kiện class ClassA { public event DelegateType objE; public void Method() { if (objE != null) objE(); } } } 17 So sánh delegate event class ClassB { public void Xuat1() { Console.WriteLine("Xuat 1"); } public void Xuat2() { Console.WriteLine("Xuat 2"); } public void Ham() { ClassA p = new ClassA(); p.objE = Xuat1; //Error p.objE += Xuat1; p.objE += Xuat2; p.objE(); //Error p.Method(); } } So sánh delegate event • Nhận xét • Event trường hợp đặc biệt delegate • Khơng sử dụng phép gán = event • Chỉ dùng phép tốn += hay -= event • Event gọi bên lớp khai báo 19 Ứng dụng • Ngữ cảnh: Giả sử có lớp A, lớp X: Lớp A lớp tiện ích, lớp X lớp client • Lớp A có nhiệm vụ tập hợp thơng tin • Sau phân phối thơng tin đến lớp X • Làm nào? Client X Gởi thông tin User/Client cho client A Designer 20 Ứng dụng • Tiếp cận thứ – tiếp cận từ phía client: Kỹ thuật polling • X định kỳ kiểm tra bool property lớp A • Nếu giá trị true gọi phương thức lớp A để lấy liệu Kiể m Client X tra đ ị nh kỳ y Lấ g ôn th tin A User/Client Designer 21 Ứng dụng • Tiếp cận thứ – tiếp cận từ phía designer: Lớp A gọi phương thức lớp X Cung cấp tên phương thức M cho lớp A Client X A Gọi phương thức M cần thông báo cho client User/Client  Designer Event lớp A dùng cách để thông báo cho client dùng lớp A biết điều xảy đối tượng lớp A 22 Ứng dụng • Các bước tổng quát Lớp A định nghĩa kiện Lớp X định nghĩa phương thức để truyền cho kiện A (gọi phương thức event handler) Lớp X đăng ký event handler cho kiện A 23 Ứng dụng • Có nhiều cách tạo/sử dụng event, thơng thường theo cách chuẩn sau • Class designer • Khai báo kiểu delegate có hai tham số • Tham số thứ thuộc lớp object, chứa đối tượng phát sinh kiện (VD: Đối tượng lớp A) • Tham số thứ hai thuộc lớp dẫn xuất từ EventArgs, chứa thơng tin cần truyền cho client • Định nghĩa public event thuộc kiểu delegate • Gọi event có tác động xảy 24 Ứng dụng • Client • Định nghĩa phương thức event handler theo chữ ký kiểu delegate • Đăng ký event handler với kiện 25 Ứng dụng class MyClass class MyClass { { public event EventHandler InformationAlert; public event EventHandler InformationAlert; public void Method() public void Method() { { … … if (InformationAlert!= null) if (InformationAlert!= null) InformationAlert(this, new EventArgs()); InformationAlert(this, new EventArgs()); } } } } • Sự kiện: • Tên kiện InformationAlert • Thuộc kiểu delegate EventHandler định nghĩa trước NET 26 Ứng dụng • EventHandler định nghĩa Namespace System public delegate void EventHandler(object sender, EventArgs e);  EventArgs lớp định nghĩa namespace System, lớp dùng làm sở cho lớp dùng liên quan đến event 27 Ứng dụng class Client class Client { { void AlertMethod(object sender, EventArgs e) void AlertMethod(object sender, EventArgs e) { { // Xử lý event // Xử lý event } } public void MyMethod() public void MyMethod() { { MyClass a = new MyClass(); MyClass a = new MyClass(); a.InformationAlert += AlertMethod; a.InformationAlert += AlertMethod; } } } } 28 Q&A 29 29 ... a + b; } } } 10 Phép toán delegate objD1 = objD2 + objD3 objD1 = objD2 + objD3 objD1 += objD4 objD1 += objD4 objD1 = objD2 - objD3 objD1 = objD2 - objD3 objD1 -= objD4 objD1 -= objD4 11 Ứng dụng... Console.WriteLine("Xuat 1"); } public void Xuat2() { Console.WriteLine("Xuat 2" ); } public void Ham() { ClassA p = new ClassA(); p.objD = Xuat1; p.objD += Xuat2; p.objD(); p.Method(); } } 16 So sánh... Console.WriteLine("Xuat 1"); } public void Xuat2() { Console.WriteLine("Xuat 2" ); } public void Ham() { ClassA p = new ClassA(); p.objE = Xuat1; //Error p.objE += Xuat1; p.objE += Xuat2; p.objE(); //Error p.Method();

Ngày đăng: 15/05/2017, 10:13

Từ khóa liên quan

Mục lục

  • Slide 1

  • Nội dung

  • Slide 3

  • Khái niệm

  • Các bước sử dụng delegate

  • Khai báo kiểu delegate

  • Tạo đối tượng delegate

  • Tạo đối tượng delegate

  • Gọi đối tượng delegate

  • Gọi đối tượng delegate

  • Phép toán trên delegate

  • Ứng dụng

  • Slide 13

  • Khái niệm

  • So sánh delegate và event

  • So sánh delegate và event

  • So sánh delegate và event

  • So sánh delegate và event

  • So sánh delegate và event

  • Ứng dụng

  • Ứng dụng

  • Ứng dụng

  • Ứng dụng

  • Ứng dụng

  • Ứng dụng

  • Ứng dụng

  • Ứng dụng

  • Ứng dụng

  • Q&A

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

  • Đang cập nhật ...

Tài liệu liên quan