CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 645

645

Chương 16: Các giao diện và mẫu thông dụng

void

và nhận hai đối số: một đối tượng

Thermostat

và một đối tượng

TemperatureChangeEventArgs

. Trong quá trình thông báo, đối số

Thermostat

chỉ đến đối

tượng

Thermostat

đã dựng nên sự kiện, và đối số

TemperatureChangeEventArgs

chứa các dữ

liệu về nhiệt độ cũ và mới.

// Ủy nhiệm cho biết chữ ký mà tất cả các phương thức

// thụ lý sự kiện phải hiện thực.

public delegate void TemperatureEventHandler(Thermostat s,

TemperatureChangeEventArgs e);

Lớp

Thermostat

là đối tượng bị giám sát trong mẫu Observer (Event) này. Theo lý thuyết, một

thiết bị giám sát thiết lập nhiệt độ hiện tại bằng cách gọi thuộc tính

Temperature

trên một đối

tượng

Thermostat

. Khi đó, đối tượng

Thermostat

dựng nên sự kiện

TemperatureChange

và gửi

một đối tượng

TemperatureChangeEventArgs

đến mỗi observer. Dưới đây là mã lệnh cho lớp

Thermostat

:

// Lớp mô tả một bộ ổn nhiệt, là nguồn gốc của các sự kiện thay đổi

// nhiệt độ. Trong mẫu Observer, đối tượng Thermostat là subject.

public class Thermostat {

// Trường private dùng để giữ nhiệt độ hiện tại.

private int temperature = 0;

// Sự kiện dùng để duy trì danh sách các ủy nhiệm observer và

// dựng nên sự kiện thay đổi nhiệt độ.

public event TemperatureEventHandler TemperatureChange;

// Phương thức protected dùng để dựng nên sự kiện TemperatureChange.

// Vì sự kiện chỉ có thể được phát sinh bên trong kiểu chứa nó nên

// việc sử dụng phương thức protected cho phép các lớp dẫn xuất

// có cách hành xử tùy biến và vẫn có thể dựng nên sự kiện

// của lớp cơ sở.

virtual protected void RaiseTemperatureEvent

(TemperatureChangeEventArgs e) {

if (TemperatureChange != null) {

TemperatureChange(this, e);

}

}

// Thuộc tính public dùng để lấy và thiết lập nhiệt độ hiện tại.

// Phía "set" chịu trách nhiệm dựng nên sự kiện thay đổi nhiệt độ

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.