Delegate và Event trong C# (Bài 9)

Bài học delegate và event trong c# sẽ giới thiệu đến bạn đọc cách gọi một phương thức thông qua cơ chế uỷ quyền (delegate) thay vì gọi trực tiếp thông qua tên lớp như chúng ta đã biết. Ngoài ra chúng tôi sẽ giải thích và demo cách hoạt động của một sự kiện (event) được phát sinh trong C# (Xử lý sự kiện là những xử lý của chương trình trước những thao tác của người dùng như sự kiện click chuột, sự kiện nhấn một phím trên bàn phím…)

Delegate và event trong c# – Cơ chế uỷ quyền (Delegate)

Delegate là một đối tượng chứa tham chiếu đến phương thức mà chúng ta cần thực thi. Bằng cách sử dụng delegate, các lập trình viên có thể gọi bất kỳ phương thức nào tại thời điểm thực thi.

Một delegate giống như một phương pháp chung đại diện cho nhiều phương thức khác nhau và sẽ gọi phương thức nào được yêu cầu ở thời gian chạy chương trình.

Để liên kết một delegate với một phương thức cụ thể thì phương thức và delegate phải giống nhau ở kiểu trả về và kiểu tham số.

Cú pháp khai báo delegate trong C#

access_modifier delegate return_type delegate_name(list_of_parameters);

Ví dụ khai báo một delegate tên Calc

public delegate float Calc(float n1, float n2);

Sử dụng delegate trong C#

Ví dụ sau sẽ trình bày cách sử dụng một delegate trong C# để gọi phương thức tính tổng (Addition)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication.lesson09
{
 class DelegateDemo
 {
  public delegate float Calc(float n1, float n2);

  float Addition(float n1, float n2)
  {
    return (n1 + n2);
  }

  static void Main(string[] args)
  {
    float n1 = 5.5F;
    float n2 = 15.5F;

    DelegateDemo dd = new DelegateDemo();
    Calc c = new Calc(dd.Addition);

    float ret = c(n1, n2);
    Console.WriteLine("{0} + {1} = {2}" ,n1, n2, ret);

    Console.Read();
  }
 }
}

Kết quả sau khi chạy chương trình

delegate va event trong c# 1

Delegate và event trong c# – Event

Hãy xem xét hành động đăng nhập vào facebook của người dùng, sau khi họ nhập thông tin đăng nhập và nhấn phím Enter, hệ thống facebook sẽ xác thực người dùng để biết rằng đó có phải là người dùng hợp lệ hay không.

Nếu xem tình huống ngày dưới góc độ của một lập trình viên, thì thao tác nhấn phím Enter sẽ tương ứng với một sự kiện được phát sinh.

Các bước xử lý sự kiện trong C#

Bước 1: Tạo một delegate

Bước 2: Tạo một event liên kết đến delegate

access_modifier event delegate_name event_name;

Bước 3: Đăng ký sự kiện

event_name += method_name;

Bước 4: Phát sinh sự kiện

event_name();

Delegate và event trong c# – Bài tập thực hành

Bài thực hành số 1: Viết chương trình tính tổng, hiệu, tích và thương sử dụng cơ chế ủy quyền (delegate).

Bài thực hành số 2: Kết hợp delegate, event và ArrayList để viết chương trình cho phép nhập và hiển thị nhiều số nguyên dương (số nguyên lớn hơn).

Menu chương trình

delegate va event trong c# 2

Khi người dùng nhập “add”: cho phép người dùng nhập vào một số nguyên dương. Nếu số vừa nhập không thoả điều kiện, chương trình sẽ hiển thị thông báo “Invalid number. Please try again!

delegate va event trong c# 3

Trường hợp người dùng nhập hợp lệ

delegate va event trong c# 4

Khi người dùng nhập “display”

delegate va event trong c# 5