Các giải pháp lập trình CSharp- P76
Số trang: 10
Loại file: pdf
Dung lượng: 2.61 MB
Lượt xem: 3
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:
Các giải pháp lập trình CSharp- P76: Các giải pháp lập trình C# khảo sát chiều rộng của thư viện lớp .NET Framework và cung cấp giải pháp cụ thể cho các vấn đềthường gặp. Mỗi giải pháp được trình bày theo dạng “vấn đề/giải pháp” một cách ngắn gọn và kèm theo là các ví dụ mẫu.
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P76 641 Chương 16: Các giao diện và mẫu thông dụng • Hiện thực thêm các thuộc tính và các thành viên dữ liệu để hỗ trợ trạng thái sự kiện mà bạn cần truyền cho các phương thức thụ lý sự kiện. Tốt nhất là làm cho trạng thái sự kiện trở nên bất biến (immutable), như vậy bạn nên sử dụng các thành viên dữ liệu private readonly và sử dụng các thuộc tính public để cho phép truy xuất chỉ-đọc đến các thành viên dữ liệu này. • Hiện thực một phương thức khởi dựng public hỗ trợ cấu hình ban đầu của trạng thái sự kiện. • Làm cho lớp đối số sự kiện của bạn trở nên khả-tuần-tự-hóa (serializable) để bộ thực thi có thể marshal các thể hiện của nó qua các biên miền ứng dụng và biên máy. Áp dụng đặc tính System.SerializableAttribute thường là đã đủ cho các lớp đối số sự kiện. Tuy nhiên, nếu lớp đối số sự kiện có các yêu cầu tuần tự hóa đặc biệt, bạn phải hiện thực giao diện System.Runtime.Serialization.ISerializable (xem mục 16.1 để biết cách làm cho một lớp trở nên khả-tuần-tự-hóa).Đoạn mã dưới đây trình bày một lớp đối số sự kiện tùy biến có tên là MailReceivedEventArgs.Giả sử có một mail-server truyền các thể hiện của lớp MailReceivedEventArgs cho cácphương thức thụ lý sự kiện nhận một thông điệp e-mail. Lớp này chứa các thông tin về ngườigửi và chủ đề của thông điệp e-mail.using System;[Serializable]public sealed class MailReceivedEventArgs : EventArgs { // Các thành viên private readonly giữ trạng thái sự kiện // (được phân bổ cho tất cả các phương thức thụ lý sự kiện). // Lớp MailReceivedEventArgs sẽ cho biết ai đã gửi mail // và chủ đề là gì. private readonly string from; private readonly string subject; // Phương thức khởi dựng (khởi tạo trạng thái sự kiện). public MailReceivedEventArgs(string from, string subject) { this.from = from; this.subject = subject; } // Các thuộc tính chỉ-đọc cho phép truy xuất // trạng thái sự kiện. public string From { get { return from; } } 642 Chương 16: Các giao diện và mẫu thông dụng public string Subject { get { return subject; } }}9. Hiện thực mẫu Singleton Bạn cần bảo đảm chỉ có một thể hiện của một kiểu tồn tại ở một thời điểm cho trước và thể hiện đó là khả-truy-xuất đối với tất cả các phần tử của ứng dụng. Hiện thực kiểu này theo mẫu Singleton như sau: • Hiện thực một thành viên tĩnh private để giữ một tham chiếu đến thể hiện của kiểu. • Hiện thực một thuộc tính tĩnh khả-truy-xuất-công-khai để cho phép truy xuất chỉ-đọc đến thể hiện. • Hiện thực một phương thức khởi dựng private để mã lệnh không thể tạo thêm các thể hiện của kiểu.Trong tất cả các mẫu được biết đến, có lẽ mẫu Singleton được biết đến nhiều nhất và thườngđược sử dụng nhất. Mục đích của mẫu Singleton là bảo đảm chỉ có một thể hiện của một kiểutồn tại ở một thời điểm cho trước và cho phép truy xuất toàn cục đến các chức năng của thểhiện đó. Đoạn mã dưới đây trình bày một hiện thực của mẫu Singleton cho một lớp có tên làSingletonExample:public class SingletonExample { // Thành viên tĩnh dùng để giữ một tham chiếu đến thể hiện singleton. private static SingletonExample instance; // Phương thức khởi dựng tĩnh dùng để tạo thể hiện singleton. // Một cách khác là sử dụng Lazy Initialization trong // thuộc tính Instance. static SingletonExample () { instance = new SingletonExample(); } // Phương thức khởi dựng private dùng để ngăn mã lệnh tạo thêm // các thể hiện của kiểu singleton. private SingletonExample () {} // Thuộc tính public cho phép truy xuất đến thể hiện singleton. public static SingletonExample Instance { 643 Chương 16: Các giao diện và mẫu thông dụng get { return instance; } } // Các phương thức public cung cấp chức năng của singleton. public void SomeMethod1 () { /*..*/ } public void SomeMethod2 () { /*..*/ }}Để gọi các chức năng của lớp SingletonExample, bạn có thể lấy về một tham chiếu đếnsingleton bằng thuộc tính Instance và rồi gọi các phương thức của nó. Bạn cũng có thể trựctiếp thực thi các thành viên của singleton thông qua thuộc tính Instance. Đoạn mã dưới đâytrình bày cả hai cách này:// Thu lấy tham chiếu đến singleton và gọi một phương thức của nó.SingletonExample s = SingletonExample.Instance;s.SomeMethod1();// Thực thi chức năng của singleton mà không cần tham chiếu.SingletonExample.Instance.SomeMethod2();10. Hiện thực mẫu Observer Bạn cần hiện thực một cơ chế hiệu quả để một đối tượng (subject) báo với các đối tượng khác (observer) về những thay đổi trạng thái của nó. Hiện thực mẫu Observer bằng các kiểu ủy nhiệm (đóng vai trò là các con trỏ hàm an-toàn-về-kiểu-dữ-liệu—type-safe function pointer) và các kiểu sự kiện.Cách truyền thống khi hiện thực mẫu Observer là hiện thực hai giao diện: một để mô tảobserver (IObserver) và một để mô tả subject (ISubject). Các đối tượng có hiện thựcIObserver sẽ đăng ký với subject, cho biết chúng muốn được thông báo về các sự kiện quantrọng (như thay đổi trạng thái) tác động đến subject. Subject chịu trách nhiệm quản lý danhsách các observer đã đăng ký và thông báo với chúng khi đáp ứng các sự kiện tác động đếnsubject. Subject thường thông báo với observer bằn ...
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P76 641 Chương 16: Các giao diện và mẫu thông dụng • Hiện thực thêm các thuộc tính và các thành viên dữ liệu để hỗ trợ trạng thái sự kiện mà bạn cần truyền cho các phương thức thụ lý sự kiện. Tốt nhất là làm cho trạng thái sự kiện trở nên bất biến (immutable), như vậy bạn nên sử dụng các thành viên dữ liệu private readonly và sử dụng các thuộc tính public để cho phép truy xuất chỉ-đọc đến các thành viên dữ liệu này. • Hiện thực một phương thức khởi dựng public hỗ trợ cấu hình ban đầu của trạng thái sự kiện. • Làm cho lớp đối số sự kiện của bạn trở nên khả-tuần-tự-hóa (serializable) để bộ thực thi có thể marshal các thể hiện của nó qua các biên miền ứng dụng và biên máy. Áp dụng đặc tính System.SerializableAttribute thường là đã đủ cho các lớp đối số sự kiện. Tuy nhiên, nếu lớp đối số sự kiện có các yêu cầu tuần tự hóa đặc biệt, bạn phải hiện thực giao diện System.Runtime.Serialization.ISerializable (xem mục 16.1 để biết cách làm cho một lớp trở nên khả-tuần-tự-hóa).Đoạn mã dưới đây trình bày một lớp đối số sự kiện tùy biến có tên là MailReceivedEventArgs.Giả sử có một mail-server truyền các thể hiện của lớp MailReceivedEventArgs cho cácphương thức thụ lý sự kiện nhận một thông điệp e-mail. Lớp này chứa các thông tin về ngườigửi và chủ đề của thông điệp e-mail.using System;[Serializable]public sealed class MailReceivedEventArgs : EventArgs { // Các thành viên private readonly giữ trạng thái sự kiện // (được phân bổ cho tất cả các phương thức thụ lý sự kiện). // Lớp MailReceivedEventArgs sẽ cho biết ai đã gửi mail // và chủ đề là gì. private readonly string from; private readonly string subject; // Phương thức khởi dựng (khởi tạo trạng thái sự kiện). public MailReceivedEventArgs(string from, string subject) { this.from = from; this.subject = subject; } // Các thuộc tính chỉ-đọc cho phép truy xuất // trạng thái sự kiện. public string From { get { return from; } } 642 Chương 16: Các giao diện và mẫu thông dụng public string Subject { get { return subject; } }}9. Hiện thực mẫu Singleton Bạn cần bảo đảm chỉ có một thể hiện của một kiểu tồn tại ở một thời điểm cho trước và thể hiện đó là khả-truy-xuất đối với tất cả các phần tử của ứng dụng. Hiện thực kiểu này theo mẫu Singleton như sau: • Hiện thực một thành viên tĩnh private để giữ một tham chiếu đến thể hiện của kiểu. • Hiện thực một thuộc tính tĩnh khả-truy-xuất-công-khai để cho phép truy xuất chỉ-đọc đến thể hiện. • Hiện thực một phương thức khởi dựng private để mã lệnh không thể tạo thêm các thể hiện của kiểu.Trong tất cả các mẫu được biết đến, có lẽ mẫu Singleton được biết đến nhiều nhất và thườngđược sử dụng nhất. Mục đích của mẫu Singleton là bảo đảm chỉ có một thể hiện của một kiểutồn tại ở một thời điểm cho trước và cho phép truy xuất toàn cục đến các chức năng của thểhiện đó. Đoạn mã dưới đây trình bày một hiện thực của mẫu Singleton cho một lớp có tên làSingletonExample:public class SingletonExample { // Thành viên tĩnh dùng để giữ một tham chiếu đến thể hiện singleton. private static SingletonExample instance; // Phương thức khởi dựng tĩnh dùng để tạo thể hiện singleton. // Một cách khác là sử dụng Lazy Initialization trong // thuộc tính Instance. static SingletonExample () { instance = new SingletonExample(); } // Phương thức khởi dựng private dùng để ngăn mã lệnh tạo thêm // các thể hiện của kiểu singleton. private SingletonExample () {} // Thuộc tính public cho phép truy xuất đến thể hiện singleton. public static SingletonExample Instance { 643 Chương 16: Các giao diện và mẫu thông dụng get { return instance; } } // Các phương thức public cung cấp chức năng của singleton. public void SomeMethod1 () { /*..*/ } public void SomeMethod2 () { /*..*/ }}Để gọi các chức năng của lớp SingletonExample, bạn có thể lấy về một tham chiếu đếnsingleton bằng thuộc tính Instance và rồi gọi các phương thức của nó. Bạn cũng có thể trựctiếp thực thi các thành viên của singleton thông qua thuộc tính Instance. Đoạn mã dưới đâytrình bày cả hai cách này:// Thu lấy tham chiếu đến singleton và gọi một phương thức của nó.SingletonExample s = SingletonExample.Instance;s.SomeMethod1();// Thực thi chức năng của singleton mà không cần tham chiếu.SingletonExample.Instance.SomeMethod2();10. Hiện thực mẫu Observer Bạn cần hiện thực một cơ chế hiệu quả để một đối tượng (subject) báo với các đối tượng khác (observer) về những thay đổi trạng thái của nó. Hiện thực mẫu Observer bằng các kiểu ủy nhiệm (đóng vai trò là các con trỏ hàm an-toàn-về-kiểu-dữ-liệu—type-safe function pointer) và các kiểu sự kiện.Cách truyền thống khi hiện thực mẫu Observer là hiện thực hai giao diện: một để mô tảobserver (IObserver) và một để mô tả subject (ISubject). Các đối tượng có hiện thựcIObserver sẽ đăng ký với subject, cho biết chúng muốn được thông báo về các sự kiện quantrọng (như thay đổi trạng thái) tác động đến subject. Subject chịu trách nhiệm quản lý danhsách các observer đã đăng ký và thông báo với chúng khi đáp ứng các sự kiện tác động đếnsubject. Subject thường thông báo với observer bằn ...
Tìm kiếm theo từ khóa liên quan:
kinh nghiệm lập trình CSharp mẹo lập trình ngôn ngữ lập trình C giáo trình lập trình CSharp lập trình java lập trình căn bản CSharpGợi ý tài liệu liên quan:
-
Thủ thuật giúp giải phóng dung lượng ổ cứng
4 trang 210 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 202 0 0 -
101 trang 199 1 0
-
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 149 0 0 -
142 trang 129 0 0
-
161 trang 129 1 0
-
Giáo trình Vi điều khiển PIC: Phần 1
119 trang 116 0 0 -
Bài giảng Phương pháp lập trình: Chương 9 - GV. Từ Thị Xuân Hiền
36 trang 109 0 0 -
Excel add in development in c and c phần 9
0 trang 107 0 0 -
78 trang 101 0 0