Delagate là gì? Sử dụng delagate trong C# như thế nào?

14:37 09/06/2023

Delagate là gì? Sử dụng delagate trong C# như thế nào? Để trả lời những câu hỏi này, hãy theo dõi bài viết dưới đây nhé!

Delegate là một kiểu dữ liệu đặc biệt trong C# được sử dụng để khai báo tham chiếu tới các hàm hoặc phương thức (có thể hiểu là con trỏ trỏ tới hàm). Khi gán một hàm hoặc phương thức cho delegate thì delegate sẽ trỏ tham chiếu tới hàm, phương thức đó. Sau đó, thay vì ta gọi hàm trực tiếp, ta có thể thông qua delegate để gọi mà không cần biết rõ tên hàm đó. Delegate giúp cho việc gọi hàm trở nên linh hoạt hơn.

Ứng dụng Delegate trong C#

Sau đây là một số ví dụ về sử dụng Delegate trong C#:

  1. Khai báo Delagate:

// Khai báo delegate   

   delegate int CalculatorDelegate(int num1, int num2);

   internal class Program

   {

        static void Main(string[] args)

        {

            // Khởi tạo delegate

            CalculatorDelegate calDele = new CalculatorDelegate(MaxNumber);

            // Gọi phương thức thông qua delegate

            int result = calDele (10, 20);

            // In ra giá trị lớn nhất của hai số

            Console.WriteLine(“Max number: “ + result);

        }

        private static int MaxNumber(int num1, int num2)

        {

            return (num1 > num2) ? num1 : num2;

        }

}

Ở ví dụ trên thay vì gọi trực tiếp hàm MaxNumber để tìm số lớn nhất trong 2 số, ta gọi tới biến delegate calDele. Ví dụ trên sẽ ra kết quả: Max number: 20

2. Sử dụng delegate gọi tới các hàm khác nhau

// Khai báo delegate

    delegate int Calculator(int a, int b);

    internal class Program

    {

        static void Main(string[] args)

        {

            // Tạo instance của delegate, truyền phương thức Add vào delegate

            Calculator calculator = new Calculator(Add);

            // Sử dụng delegate để tính tổng của 2 số

            int result = calculator(10, 5);

            Console.WriteLine(“10 + 5 = “ + result);

            // Truyền phương thức Subtract vào delegate

            calculator = new Calculator(Subtract);

            // Sử dụng delegate để tính hiệu của 2 số

            result = calculator(10, 5);

            Console.WriteLine(“10 – 5 = “ + result);

            Console.ReadKey();

        }

        private static int Subtract(int a, int b)

        {

            return a – b;

        }

        private static int Add(int a, int b)

        {

            return a + b;

        }

    }

Ở ví dụ trên, ta sử dụng delegate calculator để gọi tới phương thức Add nếu gán calculator = new Calculator(Add); gọi tới phương thức Subtract nếu ta gán calculator = new Calculator(Subtract);.

Qua việc sử dụng cùng 1 delegate để gọi tới các hàm khác nhau ta thấy việc gọi hàm rất linh hoạt và dễ dàng.

Ví dụ trên sẽ ra kết quả:

10 + 5 = 15

10 – 5 = 5

3. Sử dụng delegate để tạo ra một callback

// Khai báo delegate

delegate void Callback(string message);

     internal class Program

     {

        static void Main(string[] args)

        {

            CallMethodWithCallback(“Hello, world!”, DisplayMessage);

        }

        private static void DisplayMessage(string message)

        {

            Console.WriteLine(“Callback called with message: “ + message);

        }

        private static void CallMethodWithCallback(string message, Callback callback)

        {

            Console.WriteLine(“Method called with message: “ + message);

            callback(message);

        }

}

Ở ví dụ trên ta thấy ta sẽ khai báo một callback với delegate delegate void Callback(string message); Khi ta gọi function CallMethodWithCallback ta có thể truyền function vào như một tham số: CallMethodWithCallback(“Hello, world!”, DisplayMessage);

Ví dụ trên sẽ ra kết quả:

Method called with message: Hello, world!

Callback called with message: Hello, world!

4. Sử dụng delegate trong Lambda Expression

    // Khai báo delegate

    delegate int Operation(int a, int b);

    internal class Program

    {

        static void Main(string[] args)

        {

            Console.OutputEncoding = Encoding.UTF8;

            // Sử dụng delegate trong lambda expression

            Operation sum = (a, b) => a + b;

            Operation product = (a, b) => a * b;

            int x = 5, y = 3;

// Kết quả: Tổng của 5 và 3 là 8

            Console.WriteLine($”Tổng của {x}{y}{sum(x, y)}); 

// Kết quả: Tích của 5 và 3 là 15

            Console.WriteLine($”Tích của {x}{y}{product(x, y)}); 

        }

    }

    internal class Program

    {

        static void Main(string[] args)

        {

            Func<int, int, int> add = Sum;

            int a = 10;

            int b = 20;

            int result = add(a, b);

            Console.WriteLine(“{0} + {1} = {2}”, a, b, result);

        }

        private static int Sum(int arg1, int arg2)

        {

            return arg1 + arg2;

        }

 }

Func<int, int, int> là một delegate có kiểu int với 2 tham số truyền vào kiểu int.

Tóm lại, còn rất nhiều cách sử dụng delegate trong C#. Để tìm hiểu rõ hơn về kiến thức, hãy cùng đón chờ nhiều bài viết trong thời gian tới nhé! 

Bộ môn Công nghệ thông tin
Trường Cao đẳng FPT Polytechnic cơ sở Hà Nội

Cùng chuyên mục

Đăng Kí học Fpoly 2024

  • Max. file size: 512 MB.
  • Max. file size: 512 MB.
  • Max. file size: 512 MB.

Bình Luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *