Bài giảng Lập trình hướng đối tượng: Ủy thác và sự kiện

28 73 0
Bài giảng Lập trình hướng đối tượng: Ủy thác và sự kiện

Đ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 hướng đối tượng: Uỷ thác và sự kiện cung cấp cho người học các kiến thức: Cơ chế uỷ thác, kiểu delegate, tạo đối tượng và triệu gọi, ba bước sử dụng event, gửi thông báo event,... Mời các bạn cùng tham khảo.

Uỷ thác kiện v 1.0 - 11/2018 Lê Viết Mẫn - lvman@hce.edu.vn Uỷ thác kiện Nội dung Uỷ thác Sự kiện Lê Viết Mẫn - lvman@hce.edu.vn Uỷ thác kiện Uỷ thác Delegate Lê Viết Mẫn - lvman@hce.edu.vn Uỷ thác kiện Cơ chế Uỷ thác • Muốn thực thi phương thức đối tượng người lập trình chưa rõ lúc thiết kế • • • • Dịch vụ gọi báo thức • Lúc 2h sáng, gọi số điện thoại 0905xxxxxx để dậy coi đá banh Một Button Control lập trình Windows Form • • Khi nút nhấn, gọi hàm Click Form để hiển thị chữ “Hello World” lên hình Ví dụ: https://youtu.be/Vw05kQhh4tY?t=1773 Gồm phần: • • • Hàm gọi Việc hàm làm Sự kiện Uỷ thác chế tạo kiểu liệu cho phép lưu giữ hàm gọi Lê Viết Mẫn - lvman@hce.edu.vn Uỷ thác kiện Kiểu delegate • • • Windows API sử dụng trỏ hàm để hỗ trợ chế gọi ngược (callback mechanism) • • Một hàm gọi lại hàm khác Có thể xử lý kiện nhấn chuột, di chuyển chuột,… Trong NET, delegate đối tượng an toàn kiểu, tham chiếu đến hàm khác (hoặc danh sách hàm) mà triệu gọi cần thiết bước sử dụng delegate: • • • Định nghĩa Tạo đối tượng kiểu delegate, đăng ký hàm xử lý Triệu gọi Lê Viết Mẫn - lvman@hce.edu.vn Uỷ thác kiện Định nghĩa • Cú pháp khai báo nguyên mẫu hàm kèm với từ khoá delegate public delegate int BinaryOp(int x, int y); • • • delegate phải giống với nguyên mẫu hàm hàm mà trỏ tới Kiểu delegate trỏ đến hàm nhận vào số nguyên trả số nguyên NET tự động tạo lớp có tên tên delegate, có hàm: Invoke, BeginInvoke EndInvoke Lê Viết Mẫn - lvman@hce.edu.vn Uỷ thác kiện Tạo đối tượng triệu gọi static int Add(int x, int y) { return x + y; } Main() static int Subtract(int x, int y) { return x - y; } BinaryOp b = new BinaryOp(Add); // tạo đối tượng, đăng ký hàm // triệu gọi, gọi hàm Console.WriteLine("10 + 10 is {0}", b(10, 10)); Lê Viết Mẫn - lvman@hce.edu.vn Uỷ thác kiện Đăng ký huỷ đăng ký • Sử dụng toán tử += để đăng ký hàm xử lý • Biến kiểu delegate nhận nhiều hàm xử lý // Danh sách chứa hàm xử lý BinaryOp listOfHandlers; listOfHandlers += Add; listOfHandlers += Subtract; • Sử dụng toán tử -= để huỷ đăng ký listOfHandlers -= Add; Lê Viết Mẫn - lvman@hce.edu.vn Uỷ thác kiện Ví dụ - giám sát thay đổi liệu • • Viết hai lớp: • PointController - giám sát thay đổi liệu lớp Point Nếu có thay • Point - gửi thơng báo (triệu gọi hàm) cho lớp PointController (hoặc lớp khác có đăng ký) thơng qua kiểu delegate đổi làm (ví dụ: in thơng báo thay đổi) Lớp Point có: • • • Định nghĩa kiểu delegate • Tại nơi có thay đổi liệu, triệu gọi hàm lớp đăng ký Khai báo biến thành phần kiểu delegate Tạo hàm trợ giúp phép lớp, muốn giám sát thay đổi liệu lớp Point, đăng ký Lê Viết Mẫn - lvman@hce.edu.vn Uỷ thác kiện Ví dụ - giám sát thay đổi liệu • Lớp PointController có: • Hàm xử lý có thay đổi liệu, có nguyên mẫu hàm phù hợp với kiểu delegate lớp Point • Đăng ký hàm với lớp Point Lê Viết Mẫn - lvman@hce.edu.vn 10 Uỷ thác kiện Lớp Program class Program { static void Main(string[] args) { Point p = new Point(0, 0); PointController pc = new PointController(p); p.X = 1; p.Y = 1; Console.ReadKey(); } } Lê Viết Mẫn - lvman@hce.edu.vn 14 Uỷ thác kiện Sự kiện Event Lê Viết Mẫn - lvman@hce.edu.vn 15 Uỷ thác kiện Sự kiện • Ứng với thao tác người dùng có kiện phát sinh, chương trình phải đáp ứng cho kiện • • • • • Dịch vụ gọi báo thức • Lúc 2h sáng, gọi số điện thoại 0905xxxxxx để dậy coi đá banh Một Button Control lập trình Windows Form • Khi nút nhấn, gọi hàm Click Form để hiển thị chữ “Hello World” lên hình Sử dụng chế Uỷ thác để cài đặt Một kiểu liệu đặc biệt delegate Khái niệm Publishing Subcribing • • Publishing - lớp phát sinh kiện Subscribing - lớp đăng ký nhận thông báo kiện phát sinh thực thi để đáp ứng với kiện Lê Viết Mẫn - lvman@hce.edu.vn 16 Uỷ thác kiện Ba bước sử dụng event Định nghĩa event Đăng ký, huỷ đăng ký Gửi thông báo kiện xảy Lê Viết Mẫn - lvman@hce.edu.vn 17 Uỷ thác kiện Định nghĩa event • Hai bước: // Vẫn khai báo kiểu delegate public delegate void ChangedValueHandler(int newX, int newY); // Vẫn khai báo biến event kiểu delegate public event ChangedValueHandler ChangedValueEvent; • • Khi khai báo biến kiểu delegate có kèm từ khố event, trình biên dịch tự động cung cấp: • • Các hàm đăng ký huỷ đăng ký Các biến thành phần kiểu delegate (luôn private) Làm đơn giản q trình truyền thơng báo cho đối tượng Lê Viết Mẫn - lvman@hce.edu.vn 18 Uỷ thác kiện Đăng ký huỷ đăng ký static void ChangedValue(int newX, int newY) { Console.WriteLine("{0}-{1}", newX, newY); } • Sử dụng tốn tử += để đăng ký ChangedValueEvent += ChangedValue; • Sử dụng tốn tử -= để huỷ đăng ký ChangedValueEvent -= ChangedValue; Lê Viết Mẫn - lvman@hce.edu.vn 19 Uỷ thác kiện Gửi thông báo event • Giống gọi hàm class Point { int x; public int X { get { return x; } set { x = value; if (ChangedValueEvent != null) ChangedValueEvent.Invoke(value, y); } } … } ChangedValueEvent(value, y); Lê Viết Mẫn - lvman@hce.edu.vn 20 Uỷ thác kiện Ví dụ - giám sát thay đổi liệu • • Lớp Point có: • • • Định nghĩa kiểu delegate Định nghĩa event thuộc kiểu delegate Tại nơi có thay đổi liệu, gửi thông báo cách gọi event truyền tham số cần thiết Lớp PointController có: • Hàm xử lý có thay đổi liệu, có nguyên mẫu hàm phù hợp với kiểu delegate lớp Point • Đăng ký hàm với lớp Point Lê Viết Mẫn - lvman@hce.edu.vn 21 Uỷ thác kiện Lớp Point class Point { int x; public int X { get { return x; } set { x = value; if (ChangedValueEvent != null) ChangedValueEvent(value, y); // truyền thông báo } } int y; public int Y… public Point(int x, int y) { this.x = x; this.y = y; } // Kiểu kiện public delegate void ChangedValueHandler(int newX, int newY); public event ChangedValueHandler ChangedValueEvent; } Lê Viết Mẫn - lvman@hce.edu.vn 22 Uỷ thác kiện Lớp PointController class PointController { Point p; public PointController(Point p) { this.p = p; p.ChangedValueEvent += ChangedValueEvent; } ~PointController() { p.ChangedValueEvent -= ChangedValueEvent; } // Hàm xử lý kiện public static void ChangedValueEvent(int newX, int newY) { Console.WriteLine("{0}-{1}", newX, newY); } } Lê Viết Mẫn - lvman@hce.edu.vn 23 Uỷ thác kiện Lớp Program class Program { static void Main(string[] args) { Point p = new Point(0, 0); PointController pc = new PointController(p); p.X = 1; p.Y = 1; Console.ReadKey(); } } Lê Viết Mẫn - lvman@hce.edu.vn 24 Uỷ thác kiện Sử dụng tốn tử kiểm tra null • public int X { get { return x; } set { x = value; // kiểm tra khác null trước truyền thông báo if (ChangedValueEvent != null) ChangedValueEvent(value, y); // truyền thơng báo } } Sử dụng tốn tử kiểm tra null public int X { get { return x; } set { x = value; ChangedValueEvent?.Invoke(value, y); } } Lê Viết Mẫn - lvman@hce.edu.vn 25 Uỷ thác kiện Tuỳ biến đối số dịng lệnh event • Khi gửi thông báo, tham số cần truyền vấn đề lớn cần xử lý • Theo mẫu thiết kế kiện (event pattern) Microsoft, nên: • • Tạo lớp mới, thừa kế từ lớp System.EventArgs Lớp gói tất tham số cần truyền lại class PointEventArgs : System.EventArgs { public readonly int X; public readonly int Y; public PointEventArgs(int x, int y) { this.X = x; this.Y = x; } } Lê Viết Mẫn - lvman@hce.edu.vn 26 Uỷ thác kiện Những thay đổi • Định nghĩa event // Khai báo kiểu delegate public delegate void ChangedValueHandler (object sender, PointEventArgs e); // Khai báo biến event kiểu delegate public event ChangedValueHandler ChangedValueEvent; • Gửi thông báo kiện xảy ChangedValueEvent(this, new PointEventArgs(x, y)); Lê Viết Mẫn - lvman@hce.edu.vn 27 Uỷ thác kiện Cảm ơn ý Câu hỏi ? Lê Viết Mẫn - lvman@hce.edu.vn 28 Uỷ thác kiện ... dung Uỷ thác Sự kiện Lê Viết Mẫn - lvman@hce.edu.vn Uỷ thác kiện Uỷ thác Delegate Lê Viết Mẫn - lvman@hce.edu.vn Uỷ thác kiện Cơ chế Uỷ thác • Muốn thực thi phương thức đối tượng người lập trình. .. lvman@hce.edu.vn 14 Uỷ thác kiện Sự kiện Event Lê Viết Mẫn - lvman@hce.edu.vn 15 Uỷ thác kiện Sự kiện • Ứng với thao tác người dùng có kiện phát sinh, chương trình phải đáp ứng cho kiện • • • • • Dịch... lập trình Windows Form • • Khi nút nhấn, gọi hàm Click Form để hiển thị chữ “Hello World” lên hình Ví dụ: https://youtu.be/Vw05kQhh4tY?t=1773 Gồm phần: • • • Hàm gọi Việc hàm làm Sự kiện Uỷ thác

Ngày đăng: 14/10/2020, 22:32

Từ khóa liên quan

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

Tài liệu liên quan