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

Bài giảng Lập trình nâng cao: Bài 5 - Lý Anh Tuấn

36 28 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 36
Dung lượng 590,06 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng cung cấp cho người học các kiến thức: Cơ chế ủy quyền (delegate), cơ chế multicast delegate, sử dụng event với delegate. Đây là một tài liệu hữu ích dành cho các bạn sinh viên ngành Công nghệ thông tin và những ai quan tâm dùng làm tài liệu học tập và nghiên cứu.

Trang 1

Object-Oriented Programming Using C#

NGÔN NGỮ LẬP TRÌNH NÂNG CAO

Trang 2

Object-Oriented Programming Using C#

Trong phần này, chúng ta sẽ học:

Cơ chế ủy quyền(delegate)

Cơ chế multicast delegate

Sử dụng event với delegate

Mục đích

Trang 3

Object-Oriented Programming Using C#

Giới thiệu Delegate

Delegate trong C# cho phép thay đổi linh động tham chiếu của phương thức trong một class Một delegate là biến kiểu tham chiếu, lưu trữ tham chiếu tới phương thức

Delegate là một cơ chế để gọi phương thức gián tiếp trong khi chạy Nó thường được sử dụng để thực thi sự kiện (event) và các hàm callback cho chương trình

Để thực thi delegate trong ứng dụng, cần khai báo delegate, tạo thể hiện delegate và sử dụng delegate.

Trang 4

Object-Oriented Programming Using C#

Khai báo Delegates

Các phương thức có thể được tham chiếu bởi một delegate được xác định bằng khai báo

delegate.

Delegate có thể đại diện cho các phương thức có cùng chữ ký.

Trang 5

Object-Oriented Programming Using C#

Khai báo Delegates (tiếp.)

Cú pháp khai báo delegate:

[modifier] delegate<return name>(<parameter list>);

type><delegate-Ví dụ:

public delegate int DoSomething(int x, int y);

Trang 6

Object-Oriented Programming Using C#

Khởi tạo Delegates

Gán địa chỉ của phương thức yêu cầu cho đối tượng delegate.

Phương thức này có thể được thực thi bằng cách gọi hàm tạo của lớp delegate và truyền tên của phương thức

Trang 7

Object-Oriented Programming Using C#

Khởi tạo Delegates (tiếp)

{// Thực thi yêu cầu}

//Khai báo delegate

public void UseMethod(){

//Khởi tạo delegate

MyDelegate DelegateObject = new

MyDelegate(DelegateFunction);

}

Trang 8

Object-Oriented Programming Using C#

Có thể gọi delegate bằng cách đưa ra tên của delegate và truyền các tham số (nếu có).

Sử dụng delegates tương tự như gọi một phương thức.

Sử dụng Delegate

Trang 9

Object-Oriented Programming Using C#

Ví dụ 1:

using System;

delegate int NumberChanger(int n);

namespace DelegateCsharp{

class TestCsharp{

static int num = 10;

public static int AddNum(int p){

num += p;

return num;

}public static int MultNum(int q){

num *= q;

return num;

}public static int getNum(){

return num;

Sử dụng Delegate (tiếp)

Trang 10

Object-Oriented Programming Using C#

static void Main(string[] args){

//tao cac doi tuong delegateNumberChanger nc1 = new NumberChanger(AddNum); NumberChanger nc2 = new NumberChanger(MultNum);//goi cac phuong thuc boi su dung cac doi tuongdelegate

Sử dụng Delegate (tiếp)

Trang 11

Object-Oriented Programming Using C#

static StreamWriter SWriter;

//Định nghĩa một Delegate//Phương thức gửi chuỗi dữ liệu tới phương thứcpublic delegate void PrintData(String s);

Sử dụng Delegate (tiếp)

Trang 12

Object-Oriented Programming Using C#

//Phương thức in chuỗi ra màn hìnhpublic static void WriteConsole (string str){

Console.WriteLine("{0} Console", str);

}//Phương thức ghi chuỗi vào filepublic static void WriteFile (string s){

//Khởi tạo đối tượng streamFStream = new FileStream("D:\\StoreData.txt", FileMode.Append, FileAccess.Write);

SWriter = new StreamWriter(FStream);

s = s + " File";

//Ghi chuỗi xuống fileSWriter.WriteLine(s);

Sử dụng Delegate (tiếp)

Trang 13

Object-Oriented Programming Using C#

//Loại bỏ nội dung từ bộ đệmSWriter.Flush();

SWriter.Close();

FStream.Close();

}public static void DisplayData(PrintData PMethod)

{

PMethod("This should go to the");

}

Sử dụng Delegate (tiếp)

Trang 14

Object-Oriented Programming Using C#

public static void Main(){

//Khởi tạo đối tượng DelegatePrintData Cn = new PrintData(WriteConsole);

PrintData Fl = new PrintData(WriteFile);

//Gọi phương thức DisplayData với đối tượngDelegate như tham số

//Sử dụng DelegateDisplayData(Cn);

DisplayData(Fl);

Console.ReadLine();

}}}

Sử dụng Delegate (tiếp)

Trang 15

Object-Oriented Programming Using C#

Có hai kiểu delegate và phụ thuộc vào yêu cầu của ứng dụng để lựa chọn kiểu delegate phù hợp.

Hai kiểu delegate:

Single-cast delegateMulticast delegate

Các kiểu Delegates

Trang 16

Object-Oriented Programming Using C#

Single-cast delegate dẫn xuất từ lớp System.Delegate.

Nó chứa tham chiếu tới duy nhất một phương thức tại một thời điểm.

Single-Cast Delegate

Trang 17

Object-Oriented Programming Using C#

Multicast Delegate

Một multicast delegate dẫn xuất từ lớpSystem.MulticastDelegate

multicasting chúng ta tạo một delegate nhưng gọi nhiềuphương thức được đóng gói

Chúng ta cần chắc chắn rằng các kiểu trả về của tất cả

Multicast delegate giữ tham chiếu của nhiều hơn một phươngthức, do vậy nếu chúng ta gọi một multicast delegate nó sẽthực thi tất cả phương thức theo thứ tự được gọi

tiếp và chúng ta không thể đợi giá trị trả về từ mỗi phươngthức

Trang 18

Object-Oriented Programming Using C#

Ví dụ 1:

using System;

delegate int NumberChanger(int n);

namespace DelegateCsharp{

class TestCsharp{

static int num = 10;

public static int AddNum(int p){

num += p;

return num;

}public static int MultNum(int q){

num *= q;

return num;

}public static int getNum(){

return num;

Multicast Delegate

Trang 19

Object-Oriented Programming Using C#

static void Main(string[] args){

//tao cac doi tuong delegateNumberChanger nc1 = new NumberChanger(AddNum); NumberChanger nc2 = new NumberChanger(MultNum);

nc = nc1;

nc += nc2;

//goi multicastnc(5);

Console.WriteLine("Gia tri la: {0}", getNum());Console.ReadKey();

}}}

Multicast Delegate

Trang 20

Object-Oriented Programming Using C#

Ví dụ 2:

using System;

namespace DelegateDemo

{

public delegate void MyEventHandler(string msg);

public class Demo{

public static void Main(){

Demo d = new Demo();

MyEventHandler handler1 = new MyEventHandler(d.DisplayMsg);MyEventHandler handler2 = new MyEventHandler(d.ShowHello);MyEventHandler handler = handler1 + handler2;

handler("Test");

Console.ReadLine();

Multicast Delegate

Trang 21

Object-Oriented Programming Using C#

public void DisplayMsg(string msg)

{Console.WriteLine(msg);

}public void ShowHello(string name)

{Console.WriteLine("Hello " + name);

}}}

Ví dụ 2: Multicast Delegate

Trang 22

Object-Oriented Programming Using C#

Câu hỏi

Câu lệnh sau là đúng hay sai?

Multicast delegate kế thừa từ lớp System.Delegate.MulticastDelegate

Trả lời:

Sai

Trang 23

Object-Oriented Programming Using C#

Làm việc với Event

Một event là một hành động hoặc sự kiện như là kích, nhấn bàn phím, di chuyển chuột, hoặc thông báo của hệ thống

Ứng dụng có thể đáp ứng các event khi chúng xảy ra.

Trang 24

Object-Oriented Programming Using C#

Làm việc với Event (tiếp)

Hình sau chỉ ra sự kiện đồng hồ và xử lý sự kiện.

Trang 25

Object-Oriented Programming Using C#

Sử dụng Delegate với Event

Event được khai báo và phát sinh trong class và kết hợp với

xử lý event sử dụng delegate trong cùng một class hoặc class khác

Event là một phần của class và class này được sử dụng để

xử lý sự kiện

Tuy nhiên, các lớp khác có thể chấp nhận những event này hoặc có thể tập hợp những event này

Event sử dụng mô hình publisher và subscriber

publisher là một đối tượng chứa định nghĩa của event và delegate Sự kết hợp của event và delegate cũng được xác định trong lớp publisher.

subscriber là một đối tượng muốn chấp nhận event và cung cấp xử lý cho event Delegate của lớp publisher gọi phương thức của lớp subscriber.

Trang 26

Object-Oriented Programming Using C#

Sử dụng Delegates với Events (tiếp)

Hình sau chỉ ra cơ chế sử dụng bởi các đối tượng của publisher và subscriber

Chúng ta cùng tìm hiểu chi tiết về sử dụng delegate với

Trang 27

Object-Oriented Programming Using C#

Sử dụng Delegates với Events (tiếp)

Thực thi một event bao gồm:

Định nghĩa Events Đăng ký Events Thông báo Events

Trang 28

Object-Oriented Programming Using C#

Định nghĩa Event:

Định nghĩa event trong một lớp publisher bao gồm việc khai báo một delegate cũng như khai báo event dựa vào delegate Đoạn mã sau định nghĩa một delegate tên là TimeToRise và một event tên là RingAlarm, event này gọi delegate

TimeToRise khi nó phát sinh:

public delegate void TimeToRise();

private event TimeToRise RingAlarm;

Sử dụng Delegates với Events (tiếp)

Trang 29

Object-Oriented Programming Using C#

Đăng ký Event:

Event của lớp publisher cần kết hợp với việc xử lý nó.

Phương thức để xử lý event liên quan tới việc sử dụng delegate.

Khi đối tượng publisher phát sinh event, đối tượng đăng ký liên quan tới phương thức cần được gọi

Yêu cầu có thể được thực thi sử dụng events Đoạn mã sau miêu tả cách thức lớp Student đăng ký sự kiện tên là

RingAlarm:

Student PD= new Student();

RingAlarm += new TimeToRise(PD.WakeUp);

Sử dụng Delegates với Events (tiếp)

Trang 30

Object-Oriented Programming Using C#

Thông báo Subcriber tới Event:

Đối tượng subscriber thông báo cho đối tượng publisher

Event được phát sinh để thông báo xử lý.

Khối mã sau đặt tại vị trí chúng ta muốn thông báo event cho event của subscriber:

if (RingAlarm != null) {

RingAlarm( );

}

Sử dụng Delegate với Event (tiếp)

Trang 31

Object-Oriented Programming Using C#

Phương thức thông báo một event có thể mong muốn một vài tham số được truyền vào

Lớp event có thể có đầu vào này khi chạy trên phương thức đăng ký

Chúng ta cần định nghĩa một lớp sẽ truyền đầu vào cho event

Lớp dẫn xuất này từ System.EventArgs Để truyền giá trị cho phương thức đăng ký, chúng ta cần đính kèm các tham

Trang 32

Object-Oriented Programming Using C#

Trang 33

Object-Oriented Programming Using C#

Trang 34

Object-Oriented Programming Using C#

Trang 35

Object-Oriented Programming Using C#

Vấn đề đặt ra:

Trong một công ty điều hòa không khí, thời gian làm việc từ 9h sáng tới 6h chiều Quản lý công ty khá mềm dẻo và cho phép nhân viên đến làm muộn hơn 1h Thời gian vào làm việc được

hệ thống ghi vào tập tin khi nhân viên đến làm việc Ứng dụng

sử dụng cho việc ghi nhận nhân viên đến làm việc với thông tin thích hợp

Bạn hãy giúp công ty thiết kế ứng dụng để ghi nhận thời gian nhân viên tới làm việc.

Ví dụ: Ghi nhận thời gian làm việc

Trang 36

Object-Oriented Programming Using C#

Trong phần này, chúng ta đã học:

Delegate cho phép chúng ta ghi mã và có thể thay đổi linh hoạt phương thức mà nó gọi.

Có hai kiểu delegate: Single-cast delegate và Multicast delegate.

Một single-cast delegate chỉ có thể gọi một phương thức.

Multicast delegate giữ tham chiếu nhiều hơn một phương thức.

Single-cast delegate dẫn xuất từ lớp System.Delegate và Multicast delegate dẫn xuất từ lớp System.MulticastDelegate Event là thông điệp được gửi bởi một đối tượng để chỉ ra sự kiện của một event.

Event sử dụng mô hình publisher và subscriber.

Tổng kết

Ngày đăng: 15/05/2020, 22:47

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm