2 Sự kiện (Event)

Một phần của tài liệu BÀI GIẢNG TÓM TẮT LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ppsx (Trang 83 - 86)

83

Mặc dù delegate cho phép gọi bất kì số phương thức gián tiếp, nhưng chúng ta phải gọi các delegate tường minh. Trong nhiều trường hợp, sẽ rất hữu ích nếu delegate chạy tựđộng khi có một cái gì đó đặc biệt xảy ra. Trong .Net cho phép chúng ta định nghĩa và bẫy các hành động đặc biệt và sắp xếp để gọi một delegate để quản lý tình huống. Nhiều lớp trong .NET đưa ra sự kiện. Hầu hết các điều khiển đặt trên form dùng sự

kiện cho phép chạy mã chương trình tương ứng như: khi người dùng nhấp chuột nào nút lệnh hay nhập gì đó trên một trường. Bạn có thểđịnh nghĩa riêng sự kiện.

Khai báo sự kiện

Bạn khai báo một sự kiện trong một lớp để nhắm đến một hành động là nguồn của sự

kiện. Nguồn sự kiện thường là một lớp quan sát môi trường và phát trinh sự kiện khi có một dấu hiệu đặc biệt xảy ra. Một sự kiện chứa danh sách các phương thức để gọi khi sự kiện được tạo.

Vì sự kiện thường được dùng với delegate nên kiểu của sự kiện phải là delegate và bắt

đầu với từ khóa event.

public delegate void BatCongTac(bool state);

public class CongTac

{

public event BatCongTac OnBatCongTac;

Trong ví dụ trên, sự kiện OnBatCongTac cung cấp một giao tiếp cho phép theo giỏi trạng thái của công tác để thực hiện thao tác tắt mở bóng đèn tương ứng. Một sự kiện quản lý riêng các delegate của nó và không cần quản lý thủ công biến delegate.

Gán một sự kiện

Giống delegate, sự kiện có thểđược gán với toán tử += .

c.OnBatCongTac += new BatCongTac(d.TrangThaiDen);

Bỏ gán sự kiện

Bạn có thể dùng toán tử -= để xóa phương thức từ tập hợp delegate bên trong.

Tạo một sự kiện

Một sự kiện có thểđược tạo giống delegate bằng cách gọi nó như là một phương thức. Khi bạn gọi một sự kiện, tất cả các delegate gắn với nó được gọi tuần tự. Ví dụ:

public class CongTac

{

public event BatCongTac OnBatCongTac;

public bool state;

public void KhiBatCongTac()

{

if(OnBatCongTac!=null)

{

84

state = state ? false: true;

} } } (adsbygoogle = window.adsbygoogle || []).push({});

Kiểm tra null là cần thiết vì trường sự kiện ngầm định là null và nó khác null khi ta thực hiện gán một phương thức dùng toán tử +=. Nếu bạn tạo một sự kiện null, bạn sẽ

có một ngoại lệ NullReferenceException. Chúng ta cũng phải truyền các tham số

tương ứng khi bạn tạo sự kiện ứng với các delegate đã định nghĩa. Ví dụ sử dụng sự kiện và ủy nhiệm:

using System;

using System.Collections.Generic; using System.Text;

using System.Windows.Forms; namespace SuDungDelegate {

public delegate void BatCongTac(bool state);

public class CongTac

{

public event BatCongTac OnBatCongTac;

public bool state;

public void KhiBatCongTac()

{

OnBatCongTac(state);

state = state ? false: true;

} }

public class BongDen

{

public void TrangThaiDen(bool state)

{

if (state)

Console.WriteLine("Den Sang"); else

Console.WriteLine("Den tat"); }

}

public class TV

{

public void TrangThaiTV(bool state)

85

if (state)

Console.WriteLine("Mo TV"); else (adsbygoogle = window.adsbygoogle || []).push({});

Console.WriteLine("Tat tivi"); }

}

class Program

{

static CongTac c = new CongTac();

static BongDen d = new BongDen();

static TV t = new TV();

static void Main(string []args)

{

c.OnBatCongTac += new BatCongTac(d.TrangThaiDen);

c.OnBatCongTac += new BatCongTac(d.TrangThaiDen);

c.KhiBatCongTac();

c.KhiBatCongTac();

} } }

Một phần của tài liệu BÀI GIẢNG TÓM TẮT LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ppsx (Trang 83 - 86)