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

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

Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn trang 1

Trang 1

Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn trang 2

Trang 2

Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn trang 3

Trang 3

Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn trang 4

Trang 4

Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn trang 5

Trang 5

Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn trang 6

Trang 6

Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn trang 7

Trang 7

Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn trang 8

Trang 8

Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn trang 9

Trang 9

Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 36 trang Danh Thịnh 09/01/2024 4640
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn

Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5 - Lý Anh Tuấn
Slide 1 of 28Ver. 1.0
Object-Oriented Programming Using C#
NGÔN NGỮ LẬP TRÌNH NÂNG CAO
Slide 2 of 28Ver. 1.0
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
Slide 3 of 28Ver. 1.0
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.
Slide 4 of 28Ver. 1.0
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ý.
Slide 5 of 28Ver. 1.0
Object-Oriented Programming Using C#
Khai báo Delegates (tiếp.)
Cú pháp khai báo delegate:
[modifier] delegate<delegate-
name>();
Ví dụ:
public delegate int DoSomething(int x, int y);
Slide 6 of 28Ver. 1.0
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. 
Slide 7 of 28Ver. 1.0
Object-Oriented Programming Using C#
Khởi tạo Delegates (tiếp)
Ví dụ: Cách gán địa chỉ của phương thức vào một biến delegate:
public void DelegateFunction(string PassValue)
{
// Thực thi yêu cầu
}
//Khai báo delegate
public delegate void MyDelegate(string ArgValue);
public void UseMethod()
{
//Khởi tạo delegate
MyDelegate DelegateObject = new
MyDelegate(DelegateFunction);
}
Slide 8 of 28Ver. 1.0
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 
Slide 9 of 28Ver. 1.0
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)
Slide 10 of 28Ver. 1.0
Object-Oriented Programming Using C#
static void Main(string[] args){
//tao cac doi tuong delegate
NumberChanger nc1 = new NumberChanger(AddNum); 
NumberChanger nc2 = new NumberChanger(MultNum);
//goi cac phuong thuc boi su dung cac doi tuong
delegate
nc1(25);
Console.WriteLine("Gia tri la: {0}", getNum());
nc2(5);
Console.WriteLine("Gia tri la: {0}", getNum());
Console.ReadKey();
}
}
}
Sử dụng Delegate (tiếp)
Slide 11 of 28Ver. 1.0
Object-Oriented Programming Using C#
Ví dụ 2:
using System;
using System.IO;
// Chương trình ghi dữ liệu ra màn hình và file
public class PrintToDevice
{
//Tạo biến của lớp Stream
static FileStream FStream;
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ức
public delegate void PrintData(String s);
Sử dụng Delegate (tiếp)
Slide 12 of 28Ver. 1.0
Object-Oriented Programming Using C#
//Phương thức in chuỗi ra màn hình
public static void WriteConsole (string str)
{
Console.WriteLine("{0} Console", str);
}
//Phương thức ghi chuỗi vào file
public static void WriteFile (string s)
{
//Khởi tạo đối tượng stream
FStream = new FileStream("D:\\StoreData.txt", 
FileMode.Append, FileAccess.Write);
SWriter = new StreamWriter(FStream);
s = s + " File";
//Ghi chuỗi xuống file
SWriter.WriteLine(s);
Sử dụng Delegate (tiếp)
Slide 13 of 28Ver. 1.0
Object-Oriented Programming Using C#
//Loại bỏ nội dung từ bộ đệm
SWriter.Flush();
SWriter.Close();
FStream.Close();
}
public static void DisplayData(PrintData 
PMethod)
{
PMethod("This should go to the");
}
Sử dụng Delegate (tiếp)
Slide 14 of 28Ver. 1.0
Object-Oriented Programming Using C#
public static void Main()
{
//Khởi tạo đối tượng Delegate
PrintData Cn = new PrintData(WriteConsole);
PrintData Fl = new PrintData(WriteFile);
//Gọi phương thức DisplayData với đối tượng
Delegate như tham số
//Sử dụng Delegate
DisplayData(Cn);
DisplayData(Fl);
Console.ReadLine();
}
}
}
Sử dụng Delegate (tiếp)
Slide 15 of 28Ver. 1.0
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 delegate
Multicast delegate
Các kiểu Delegates
Slide 16 of 28Ver. 1.0
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
Slide 17 of 28Ver. 1.0
Object-Oriented Programming Using C#
Multicast Delegate
Một multicast delegate dẫn xuất từ lớp
System.MulticastDelegate. 
Nó chứa lời gọi của một danh sách phương thức. Trong
multicasting chúng ta tạo một delegate nhưng gọi nhiều
phươ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ả
delegates này là giống nhau.
Multicast delegate giữ tham chiếu của nhiều hơn một phương
thứ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. 
Các phương thức được gọi bởi delegate trong trường hợp
này không nên trả về giá trị. Các phương thức được gọi liên
tiếp và chúng ta không thể đợi giá trị trả về từ mỗi phương
thức.
Slide 18 of 28Ver. 1.0
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;
}
pub

File đính kèm:

  • pdfbai_giang_ngon_ngu_lap_trinh_nang_cao_bai_5_ly_anh_tuan.pdf