Bài giảng Lập trình nâng cao: Bài 5 - Lý Anh Tuấn
lượt xem 4
download
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.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình nâng cao: Bài 5 - Lý Anh Tuấn
- Object-Oriented Programming Using C# NGÔN NGỮ LẬP TRÌNH NÂNG CAO Ver. 1.0 Slide 1 of 28
- Object-Oriented Programming Using C# Mục đích 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 Ver. 1.0 Slide 2 of 28
- 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. Ver. 1.0 Slide 3 of 28
- 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ý. Ver. 1.0 Slide 4 of 28
- Object-Oriented Programming Using C# Khai báo Delegates (tiếp.) Cú pháp khai báo delegate: [modifier] delegate(); Ví dụ: public delegate int DoSomething(int x, int y); Ver. 1.0 Slide 5 of 28
- 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. Ver. 1.0 Slide 6 of 28
- 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); } Ver. 1.0 Slide 7 of 28
- Object-Oriented Programming Using C# Sử dụng Delegate 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. Ver. 1.0 Slide 8 of 28
- Object-Oriented Programming Using C# Sử dụng Delegate (tiếp) 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; } Ver. 1.0 Slide 9 of 28
- Object-Oriented Programming Using C# Sử dụng Delegate (tiếp) 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(); } } } Ver. 1.0 Slide 10 of 28
- Object-Oriented Programming Using C# Sử dụng Delegate (tiếp) 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); Ver. 1.0 Slide 11 of 28
- Object-Oriented Programming Using C# Sử dụng Delegate (tiếp) //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); Ver. 1.0 Slide 12 of 28
- Object-Oriented Programming Using C# Sử dụng Delegate (tiếp) //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"); } Ver. 1.0 Slide 13 of 28
- Object-Oriented Programming Using C# Sử dụng Delegate (tiếp) 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(); } } } Ver. 1.0 Slide 14 of 28
- Object-Oriented Programming Using C# Các kiểu Delegates 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 Ver. 1.0 Slide 15 of 28
- Object-Oriented Programming Using C# Single-Cast Delegate 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. Ver. 1.0 Slide 16 of 28
- 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. Ver. 1.0 Slide 17 of 28
- Object-Oriented Programming Using C# Multicast Delegate 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; } Ver. 1.0 Slide 18 of 28
- Object-Oriented Programming Using C# Multicast Delegate static void Main(string[] args){ //tao cac doi tuong delegate NumberChanger nc1 = new NumberChanger(AddNum); NumberChanger nc2 = new NumberChanger(MultNum); nc = nc1; nc += nc2; //goi multicast nc(5); Console.WriteLine("Gia tri la: {0}", getNum()); Console.ReadKey(); } } } Ver. 1.0 Slide 19 of 28
- Object-Oriented Programming Using C# Multicast Delegate 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(); } Ver. 1.0 Slide 20 of 28
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình nâng cao với Java
170 p | 98 | 14
-
Bài giảng Lập trình nâng cao: Giới thiệu môn học - Trần Quốc Long
16 p | 74 | 7
-
Bài giảng Lập trình nâng cao: Hàm - Trần Quốc Long
34 p | 63 | 6
-
Bài giảng Lập trình nâng cao: Phát triển chương trình - Trần Quốc Long
38 p | 78 | 6
-
Bài giảng Lập trình nâng cao: Hoạt hình, tách file - Trần Quốc Long
28 p | 66 | 6
-
Bài giảng Lập trình nâng cao: Hướng đối tượng - Nguyễn Thị Tú Mi
117 p | 65 | 5
-
Bài giảng Lập trình nâng cao: Bài 7 - Lý Anh Tuấn
33 p | 67 | 5
-
Bài giảng Lập trình nâng cao: Tìm kiếm và đếm - Trần Quốc Long
54 p | 70 | 5
-
Bài giảng Lập trình nâng cao - Chương 0: Giới thiệu môn học
6 p | 80 | 4
-
Bài giảng Lập trình nâng cao: Bài 6 - Lý Anh Tuấn
28 p | 48 | 4
-
Bài giảng Lập trình nâng cao: Bài 4+5+6 - Trương Xuân Nam
25 p | 33 | 4
-
Bài giảng Lập trình nâng cao: Bài 0 - Hoàng Thị Điệp
7 p | 83 | 3
-
Bài giảng Lập trình nâng cao: Chương 5 - Lý Anh Tuấn
54 p | 27 | 2
-
Bài giảng Lập trình nâng cao: Chương 1 - Lý Anh Tuấn
26 p | 35 | 2
-
Bài giảng Lập trình nâng cao - Chương 0: Giới thiệu môn học, Warm up Game over
16 p | 5 | 1
-
Bài giảng Lập trình nâng cao - Chương 1: Simple Calculator (Ôn tập)
18 p | 5 | 1
-
Bài giảng Lập trình nâng cao - Chương 2: Game Guess it (Hàm)
34 p | 3 | 1
-
Bài giảng Lập trình nâng cao - Chương 3: Game Hangman (Phát triển chương trình)
38 p | 3 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn