- vừa được xem lúc

Sử dụng delegate trong C#

0 0 7

Người đăng: Long Tiến

Theo Viblo Asia

Trong C#, delegate là một loại dữ liệu kiểu tham chiếu (reference type) cho phép bạn truyền các phương thức (methods) như một tham số, lưu trữ chúng trong biến, và gọi chúng tại các thời điểm sau này. Delegate thường được sử dụng trong các tình huống sau:

1. Sự kiện (Events): Delegate thường được sử dụng để triển khai sự kiện và xử lý sự kiện trong ứng dụng C#. Sự kiện là một trường hợp của delegate, cho phép các lớp khác đăng ký và phản hồi khi sự kiện xảy ra.

2. Multithreading: Trong lập trình đa luồng (multithreading), delegate có thể được sử dụng để gọi các phương thức trong các luồng khác nhau. Điều này giúp trong việc tạo các ứng dụng đa luồng an toàn và hiệu quả.

3. Callbacks: Delegate cũng thường được sử dụng để triển khai các hàm gọi lại (callbacks), nơi bạn truyền một phương thức cho một phương thức khác để thực hiện tác vụ cụ thể sau khi một điều kiện nào đó xảy ra.

4. Extension methods: Delegate có thể được sử dụng để triển khai các phương thức mở rộng (extension methods) để mở rộng chức năng của các lớp có sẵn.

5. Dependency Injection: Trong các thiết kế dựa trên nguyên tắc Dependency Injection, delegate có thể được sử dụng để chuyển các phương thức thực hiện chức năng cụ thể cho các lớp hoặc đối tượng khác.

Tóm lại, bạn nên sử dụng delegate khi cần truyền và thực thi các phương thức như một tham số, hoặc khi bạn cần triển khai các cơ chế xử lý sự kiện, đa luồng, hoặc gọi lại trong ứng dụng C#. Delegate giúp tạo ra mã linh hoạt và dễ bảo trì trong các tình huống này.

Dưới đây là một vài ví dụ cụ thể về việc sử dụng delegate trong C#:

Ví dụ 1: Sự kiện (Events)

using System; // Định nghĩa delegate cho sự kiện
public delegate void MyEventHandler(string message); // Đối tượng phát ra sự kiện
public class EventPublisher
{ // Sự kiện sử dụng delegate public event MyEventHandler OnMessageSent; public void SendMessage(string message) { Console.WriteLine($"Sending message: {message}"); // Gửi sự kiện khi có tin nhắn được gửi OnMessageSent?.Invoke(message); }
} // Đối tượng đăng ký và xử lý sự kiện
public class EventSubscriber
{ public void MessageHandler(string message) { Console.WriteLine($"Received message: {message}"); }
} class Program
{ static void Main() { EventPublisher publisher = new EventPublisher(); EventSubscriber subscriber = new EventSubscriber(); // Đăng ký sự kiện publisher.OnMessageSent += subscriber.MessageHandler; // Gửi tin nhắn và kích hoạt sự kiện publisher.SendMessage("Hello, World!"); Console.ReadLine(); }
}

Ví dụ 2: Multithreading

using System;
using System.Threading; public class Program
{ public delegate void MyDelegate(string message); public static void Main() { MyDelegate delegateInstance = DisplayMessage; // Tạo và chạy một luồng mới bằng delegate Thread thread = new Thread(() => delegateInstance("Hello from thread!")); thread.Start(); // Chờ cho đến khi luồng kết thúc thread.Join(); Console.WriteLine("Main thread completed."); } public static void DisplayMessage(string message) { Console.WriteLine(message); }
}

Trong ví dụ này, chúng ta sử dụng delegate để truyền một phương thức (DisplayMessage) vào một luồng mới để hiển thị một thông báo từ luồng đó. Các ví dụ này minh họa cách sử dụng delegate trong C# trong các tình huống khác nhau như sự kiện và đa luồng.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Các loại tham chiếu Nullable trong C# (Phần 1)

1. Giới thiệu. C# 8.0 giới thiệu kiểu tham chiếu nullable và kiểu tham chiếu non-nullable cho phép bạn đưa ra các lựa chọn quan trọng về thuộc tính cho các biến kiểu tham chiếu:.

0 0 36

- vừa được xem lúc

Command pattern qua ví dụ !

Command pattern là gì . Command pattern khá phổ biến trong C #, đặc biệt khi chúng ta muốn trì hoãn hoặc xếp hàng đợi việc thực hiện một yêu cầu hoặc khi chúng ta muốn theo dõi các hoạt động. Hơn nữa, chúng ta có thể hoàn tác tác chúng. .

0 0 178

- vừa được xem lúc

Hiểu Liskov Substitution Principle qua ví dụ !

Liskov Substitution Principle là gì . Nguyên tắc đóng mở xác đinh rằng các instance của lớp con có thể thay thế được instance lớp cha mà vẫn đảm bảo tính đúng đắn của chương trình.

0 0 24

- vừa được xem lúc

Creating custom Controls Wpf

Introduction. Wpf/winforms provides various controls like Buttons, Textbox, TextBlock, Labels etc.

0 0 41

- vừa được xem lúc

[P1] Chọn công nghệ nào để xây dựng website?

Hiện nay nhu cầu phát triển website, app tăng rất cao do xu hướng "số hóa 4.0" trong và ngoài nước.

0 0 71

- vừa được xem lúc

Kiểu dữ liệu trong C#

Dẫn nhập. Ở bài BIẾN TRONG C# chúng ta đã tìm hiểu về biến và có một thành phần không thể thiếu khi khai báo biến – Đó là kiểu dữ liệu.

0 0 24