Cơ chế ủy quyền và sự kiện phần cuối
Số trang: 15
Loại file: pdf
Dung lượng: 196.24 KB
Lượt xem: 19
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Phương thức Run tạo vòng lặp vô hạn để kiểm tra định kỳ thời gian hệ thống. Nếu thời gian thay đổi từ đối tượng Clock hiện hành, thì nó sẽ cảnh báo cho tất cả các subscriber và sau đó cập nhật lại những trạng thái của nó.
Nội dung trích xuất từ tài liệu:
Cơ chế ủy quyền và sự kiện phần cuốipublic 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 TimeInfoEventArgs timeInformation = new TimeInfoEventArgs( dt.Hour, dt.Minute, dt.Second); // nếu có bất cứ lớp nào đăng ký thì cảnh báo if ( OnSecondChange != null) { OnSecondChange( this, timeInformation); } } // cập nhật trạng thái this.second = dt.Second; this.minute = dt.Minute; this.hour = dt.Hour; } }Phương thức Run tạo vòng lặp vô hạn để kiểm tra định kỳ thời gian hệ thống. Nếuthời gian thay đổi từ đối tượng Clock hiện hành, thì nó sẽ cảnh báo cho tất cả cácsubscriber và sau đó cập nhật lại những trạng thái của nó.Bước đầu tiên là ngừng 10 giây: 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 đổivà 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 ramộ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) { OnSecondChange( this, timeInformation); }Nếu một sự kiện không có bất cứ lớp subscriber nào đăng ký thì nó ước lượng giá trị lànull. Phần kiểm tra bên trên xác định giá trị của sự kiện có phải là null hay không, để đảmbảo rằngcó tồn tại lớp đăng ký nhận sự kiện trước khi gọi sự kiện OnSecondChange.Chúng ta lưu ý rằng OnSecondChange lấy hai tham số: nguồn phát ra sự kiện và đốitượng dẫn xuất từ lớp EventArgs. Ở đây chúng ta có thể thấy rằng tham chiếu thiscủa lớp clock được truyền bởi vì clock là nguồn phát ra sự kiện. Tham số thứ hai làđối tượng TimeInfo- EventArgs được tạo ra ở dòng lệnh bên trên.Một sự kiện được phát ra thì sẽ gọi bất cứ phương thức nào được đăng ký với lớp Clockthông qua delegate, chúng ta sẽ kiểm tra điều này sau.Một khi mà sự kiện được phát ra, chúng ta sẽ cập nhật lại trạng thái của lớp Class: this.second = dt.Second; this.minute = dt.Minute; this.hour = dt.Hour;Sau cùng là chúng ta xây dựng những lớp có thể đăng ký vào các sự kiện này. Chúng tasẽ tạohai lớp. Lớp đầu tiên là lớp DisplayClock. Chức năng chính của lớp này không phải làlưu giữ thời gian mà chỉ để hiển thị thời gian hiện hành ra màn hình console. Để đơngiản chúng tachỉ tạo hai phương thức cho lớp này. Phương thức thứ nhất có tên là Subscribe,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()); } }Khi phương thức đầu tiên Subscribe được gọi, nó sẽ tạo ra một delegateSecondChange- Handler mới, và truyền vào phương thức xử lý sự kiệnTimeHasChanged của nó. Sau đó nó sẽ đăng ký delegate với sự kiện OnSecondChangecủa Clock.Lớp thứ hai mà chúng ta tạo cũng sẽ đáp ứng sự kiện này, tên là LogCurrentTime.Thông thường lớp này ghi lại sự kiện vào trong tập tin, nhưng với mục đích minh họacủa chúng ta, nó sẽ ghi ra màn hình console: public class LogCurrentTime { 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, Tim ...
Nội dung trích xuất từ tài liệu:
Cơ chế ủy quyền và sự kiện phần cuốipublic 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 TimeInfoEventArgs timeInformation = new TimeInfoEventArgs( dt.Hour, dt.Minute, dt.Second); // nếu có bất cứ lớp nào đăng ký thì cảnh báo if ( OnSecondChange != null) { OnSecondChange( this, timeInformation); } } // cập nhật trạng thái this.second = dt.Second; this.minute = dt.Minute; this.hour = dt.Hour; } }Phương thức Run tạo vòng lặp vô hạn để kiểm tra định kỳ thời gian hệ thống. Nếuthời gian thay đổi từ đối tượng Clock hiện hành, thì nó sẽ cảnh báo cho tất cả cácsubscriber và sau đó cập nhật lại những trạng thái của nó.Bước đầu tiên là ngừng 10 giây: 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 đổivà 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 ramộ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) { OnSecondChange( this, timeInformation); }Nếu một sự kiện không có bất cứ lớp subscriber nào đăng ký thì nó ước lượng giá trị lànull. Phần kiểm tra bên trên xác định giá trị của sự kiện có phải là null hay không, để đảmbảo rằngcó tồn tại lớp đăng ký nhận sự kiện trước khi gọi sự kiện OnSecondChange.Chúng ta lưu ý rằng OnSecondChange lấy hai tham số: nguồn phát ra sự kiện và đốitượng dẫn xuất từ lớp EventArgs. Ở đây chúng ta có thể thấy rằng tham chiếu thiscủa lớp clock được truyền bởi vì clock là nguồn phát ra sự kiện. Tham số thứ hai làđối tượng TimeInfo- EventArgs được tạo ra ở dòng lệnh bên trên.Một sự kiện được phát ra thì sẽ gọi bất cứ phương thức nào được đăng ký với lớp Clockthông qua delegate, chúng ta sẽ kiểm tra điều này sau.Một khi mà sự kiện được phát ra, chúng ta sẽ cập nhật lại trạng thái của lớp Class: this.second = dt.Second; this.minute = dt.Minute; this.hour = dt.Hour;Sau cùng là chúng ta xây dựng những lớp có thể đăng ký vào các sự kiện này. Chúng tasẽ tạohai lớp. Lớp đầu tiên là lớp DisplayClock. Chức năng chính của lớp này không phải làlưu giữ thời gian mà chỉ để hiển thị thời gian hiện hành ra màn hình console. Để đơngiản chúng tachỉ tạo hai phương thức cho lớp này. Phương thức thứ nhất có tên là Subscribe,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()); } }Khi phương thức đầu tiên Subscribe được gọi, nó sẽ tạo ra một delegateSecondChange- Handler mới, và truyền vào phương thức xử lý sự kiệnTimeHasChanged của nó. Sau đó nó sẽ đăng ký delegate với sự kiện OnSecondChangecủa Clock.Lớp thứ hai mà chúng ta tạo cũng sẽ đáp ứng sự kiện này, tên là LogCurrentTime.Thông thường lớp này ghi lại sự kiện vào trong tập tin, nhưng với mục đích minh họacủa chúng ta, nó sẽ ghi ra màn hình console: public class LogCurrentTime { 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, Tim ...
Tìm kiếm theo từ khóa liên quan:
Công nghệ thông tin kỹ thuật lập trình ngôn ngữ lập trình ngôn ngữ C# C# Cơ chế ủy quyền và sự kiện phần cuốiGợi ý tài liệu liên quan:
-
52 trang 430 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 313 0 0 -
74 trang 296 0 0
-
96 trang 292 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 289 0 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 280 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 275 0 0 -
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 273 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 269 1 0 -
Bài thuyết trình Ngôn ngữ lập trình: Hệ điều hành Window Mobile
30 trang 265 0 0