Tài liệu Cơ chế ủy quyền và sự kiện phần cuối - Pdf 10

public void Run()

{for(;;)

{// ngừng 10 giây

Thread.Sleep( 10 ); // lấy thời gian hiện hành

System.DateTime dt = System.DateTime.Now;

// nếu giây thay đổi cảnh báo cho subscriber
if ( dt.Second != second)
{// tạo TimeInfoEventArgs để truyền

// cho subscriber


Thread.Sleep(10);
Ở đây chúng ta sử dụng phương thức tĩnh của lớp Thread từ System.Threading của .NET.
Sử dụng ph
ương thức Sleep() để kéo dài khoảng cách giữa hai lần thực hiện vòng lặp.
Sau khi ngừng 10 mili giây, phương thức sẽ kiểm tra thời gian hiện hành:

System.DateTime dt = System.DateTime.Now;
Cứ khoảng 100 lần kiểm tra, thì một giây sẽ được gia tăng. Phương thức ghi nhận sự
thay đổi
và cảnh báo đến những subscriber của nó. Để làm được điều này, đầu tiên phải tạo ra
một đối tượng TimeInfoEventArgs:
if ( dt.Second != second)

{// tạo TimeInfoEventArgs để truyền cho các subscriber

TimeInfoEventArgs timeInformation =

new TimeInfoEventArgs( dt.Hour, dt.Minute, dt.Second); }
Và để cảnh báo cho những subscriber bằng cách kích hoạt sự kiện OnSecondChange:
// cảnh báo cho các subscriber

if ( OnSecondChange != null)

{

phương thức chị
u trách nhiệm đăng ký một sự kiện OnSecondChange của lớp Clock.
Phương thức thứ hai được tạo ra là trình xứ lý sự kiện TimeHasChanged:
public class DisplayClock

{public void Subscrible(Clock theClock)

{theClock.OnSecondChange +=

new Clock.SecondChangeHandler(TimeHasChanged);

}public void TimeHasChanged( object theClock, TimeInfoEventArgs ti)

{Console.WriteLine(“Current Time:
{0]:{1}:{2}”, ti.hour.ToString(),
ti.minute.ToString(),
ti.Second.ToString());



}// thông thường phương thức này viết ra file

// nhưng trong minh họa này chúng ta chỉ xuất

// ra màn hình console mà thôi

public void WriteLogEntry( object theClock, TimeInfoEventArgs ti)

{Console.WriteLine(“Logging to file:
{0}:{1}:{2}”, ti.hour.ToString(),
ti.minute.ToString(),
ti.second.ToString());
}

}Ghi chú rằng những sự kiện được thêm vào bằng cách sử dụng toán tử +=. Điều này cho
phép những sự kiện mới được thêm vào sự kiện OnSecondChange của đối tượng Clock
mà không
có phá hủy bất cứ sự kiện nào đã được đăng ký. Khi LogCurrentTime đăng ký một
sự kiện OnSecondChange, chúng ta không muốn việc đăng ký này làm mất đi sự
đăng ký của lớp DisplayClock trước đó.

this.second = second;
}

public readonly int hour;
public readonly int minute;
public readonly int second;
}// khai báo lớp Clock lớp này sẽ phát ra các sự kiện
public class Clock
{// khai báo delegate mà các subscriber phải thực thi

public delegate void SecondChangeHandler(object
clock, TimeInfoEventArgs timeInformation);
// sự kiện mà chúng ta đưa ra

public event SecondChangeHandler OnSecondChange;

// thiết lập đồng hồ thực hiện, sẽ phát ra mỗi sự kiện trong mỗi giây
public void Run()
{for(;;)

{

OnSecondChange( this, timeInformation);

}

}// cập nhật trạng thái
this.second = dt.Second;
this.minute = dt.Minute;
this.hour = dt.Hour;
}

}private int hour;
private int minute;
private int second;
}// lớp DisplayClock đăng ký sự kiện của clock.

// thực thi xử lý sự kiện bằng cách hiện thời gian hiện hành
public class DisplayClock
{public void Subscrible(Clock theClock)


public void Subscribe(Clock theClock)

{theClock.OnSecondChange +=

new Clock.SecondChangeHandler(WriteLogEntry);

}// thông thường phương thức này viết ra file

// nhưng trong minh họa này chúng ta chỉ xuất

// ra màn hình console mà thôi

public void WriteLogEntry( object theClock, TimeInfoEventArgs ti)

{Console.WriteLine(“Logging to file:
{0}:{1}:{2}”, ti.hour.ToString(),
ti.minute.ToString(),
ti.second.ToString());
}



// bắt đầu thực hiện vòng lặp và phát sinh sự kiện

// trong mỗi giây đồng hồ
theClock.Run();
}

}

}
Kết quả thực hiện có
thể như sau:

Current Time: 11:54:20

Logging to file: 11:54:20

Current Time: 11:54:21

Logging to file: 11:54:21

Current Time: 11:54:22

Logging to file: 11:54:22

deleg
ate,
đây là
một
sự
mong
đợi
cao,

làm
cho

lện
h
lin
h
họ
at

mạ
nh
mẽ

n.
Lớ
p
Cl
oc
k


trả về xác định. Ủy
quyền cũng tương tự
như con trỏ hàm trong
ngôn ngữ C++. Tuy
nhiên, trong ngôn ngữ
C# ủy quyền là kiểu dữ
liệu hướng đối tượng,
an toàn
và bảo mật.
Câuhỏi
2: Con trỏ hàm là
gì?
Trả l ời 2
: Trong ngôn ngữ
như C hay C++, có một
chức năng gọi là con trỏ
hàm. Một con
trỏ hàm được sử dụng
để thiết lập cùng một
nhi
ệm
vụ
nh
ư
mộ
t
ủy
qu
yề
n.

những phương thức, ủy
quyền còn được sử
dụng
bởi những sự kiện.

Câu hỏi thêm

Câu hỏi 1
: Có thể sử dụng
ủy quyền như một thuộc
tính hay không? Nếu có
thể thì sử dụng như thế
nào? Cho biết ý nghĩa?
Câu hỏi 2
: Nếu có một số
hoạt động cần được thực
hiện theo một thứ tự nhất
định thì ta phải
làm thế nào để khi cần
thực hiện thì gọi lần lượt
thực hiện các hoạt động
đó?

Câu hỏi 3
: Công dụng của
việc khai báo ủy quyền
tĩnh? Khi nào thì nên khai
báo ủy quyền tĩnh khi nào
thì không nên?
Câu hỏi 4

các
ủy
quy
ền?
C
â
u
h

i
7
:

S


k
i

n

l
à

g
ì? Trong hệ thống
ứng dụng nào thì sự
kiện được sử dụng
nhiều?
Câuhỏi

điện
tử thể hiện giờ hiện hành
trên màn hình console.


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status