Danh mục

Các giải pháp lập trình CSharp- P75

Số trang: 10      Loại file: pdf      Dung lượng: 2.62 MB      Lượt xem: 3      Lượt tải: 0    
thaipvcb

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- P75: 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- P75 631 Chương 16: Các giao diện và mẫu thông dụng // resourceHandle = ...}// Destructor/Finalizer.~DisposeExample() { // Gọi phiên bản nạp chồng protected của Dispose // và truyền giá trị false để cho biết rằng // Dispose đang được gọi trong quá trình thu gom rác, // chứ không phải bởi mã consumer. Dispose(false);}// Hiện thực public của phương thức IDisposable.Dispose, được gọi// bởi consumer của đối tượng để giải phóng các tài nguyên không-// được-quản-lý một cách tất định.public void Dispose() { // Gọi phiên bản nạp chồng protected của Dispose và truyền // giá trị true để cho biết rằng Dispose đang được gọi // bởi mã consumer, chứ không phải bởi bộ thu gom rác. Dispose(true); // Vì phương thức Dispose thực hiện tất cả việc dọn dẹp cần // thiết nên bảo đảm bộ thu gom rác không gọi destructor của lớp. GC.SuppressFinalize(this);}// Phiên bản nạp chồng protected của phương thức Dispose. Đối số// disposing cho biết phương thức được gọi bởi mã consumer (true),// hay bởi bộ thu gom rác (false).protected virtual void Dispose(bool disposing) { if (!isDisposed) { if (disposing) { // Phương thức này được gọi bởi mã consumer. Gọi632Chương 16: Các giao diện và mẫu thông dụng // phương thức Dispose của các thành viên dữ liệu // được-quản-lý có hiện thực giao diện IDisposable. // § } // Giải phóng tất cả các tài nguyên không-được-quản-lý // và thiết lập giá trị của các thành viên dữ liệu // được-quản-lý thành null. // Close(resourceHandle); } // Báo rằng đối tượng này đã bị hủy. isDisposed = true; } // Trước khi thực thi bất kỳ chức năng nào, bảo đảm rằng // Dispose chưa được thực thi trên đối tượng. public void SomeMethod() { // Ném một ngoại lệ nếu đối tượng đã bị hủy. if (isDisposed) { throw new ObjectDisposedException(DisposeExample); } // Thực thi chức năng của phương thức... // § } public static void Main() { // Lệnh using bảo đảm phương thức Dispose được gọi // cả khi ngoại lệ xảy ra. using (DisposeExample d = new DisposeExample()) { // Làm gì đó với d... 633 Chương 16: Các giao diện và mẫu thông dụng } }}6. Hiện thực kiểu khả-định-dạng (formattable type) Bạn cần hiện thực một kiểu có thể được sử dụng theo các format string, và có thể tạo ra những biểu diễn chuỗi khác nhau cho nội dung của nó dựa vào format specifier. Hiện thực giao diện System.IFormattable.Đoạn mã dưới đây minh họa cách sử dụng format specifier (phần in đậm) trong phương thứcWriteLine của lớp System.Console.double a = 345678.5678;uint b = 12000;byte c = 254;Console.WriteLine(a = {0}, b = {1}, and c = {2}, a, b, c);Console.WriteLine(a = {0:c0}, b = {1:n4}, and c = {2,10:x5}, a, b, c);Khi chạy trên máy với thiết lập bản địa là English (U.K.), đoạn mã này sẽ cho kết xuất nhưsau (thay đổi nội dung của format specifier sẽ thay đổi định dạng của kết xuất một cách đángkể mặc dù dữ liệu vẫn không thay đổi):a = 345678.5678, b = 12000, and c = 254a = £345,679, b = 12,000.0000, and c = 000feĐể kích hoạt việc hỗ trợ format specifier, bạn phải hiện thực giao diện IFormattable. Giaodiện này khai báo một phương thức có tên là ToString với chữ ký như sau:string ToString(string format, IFormatProvider formatProvider);Đối số format là một System.String chứa format string (chuỗi định dạng). Format string làphần format specifier phía sau dấu hai chấm. Ví dụ, trong format specifier {2,10:x5} (ở ví dụtrên), x5 là format string. Format string chứa những chỉ thị mà thể hiện IFormattable sẽ sửdụng khi tạo ra dạng chuỗi cho nội dung của nó. Tài liệu .NET Framework phát biểu rằng:những kiểu có hiện thực IFormattable thì phải hỗ trợ format string G (general), nhưngnhững format string được hỗ trợ khác thì phụ thuộc vào hiện thực. Đối số format là null nếuformat specifier không chứa phần format string, ví dụ {0} hay {1,20}.Đối số formatProvider là tham chiếu đến một thể hiện System.IFormatProvider (dùng để truyxuất các thông tin bản địa—bao gồm các dữ liệu như biểu tượng tiền tệ hay số lượng chữ sốthập phân). Theo mặc định, formatProvider là null, nghĩa là bạn sẽ sử dụng các thiết lập bảnđịa của tiểu trình hiện hành (có thể lấy được thông qua phương thức tĩnh CurrentCulture củalớp System.Globalization.CultureInfo)..NET Framework chủ yếu sử dụng IFormattable để hỗ trợ việc định dạng các kiểu giá trị,nhưng nó có thể được sử dụng cho bất kỳ kiểu nào. Ví dụ, lớp Person dưới đây có hiện thựcgiao diện IFormattable. Lớp này chứa danh hiệu và tên của một người, và sẽ trả về tên theo 634 Chương 16: Các giao diện và mẫu thông dụngcác định dạng khác nhau tùy vào format string. Lớp Person không sử dụng các thiết lập bảnđịa do đối số formatProvider cung cấp.using System;public class Person : IFormattable { // Các thành viên private dùng để lưu trữ danh hiệu // và tên của một người. private string title; private string[] names; // Phương thức khởi dựng dùng để thiết lập danh hiệu và tên. public Person(string title, params string[] names) { this.title = title; this.names = names; } // Chép đè phương thức Object.ToString để trả về // tên theo định dạng general. public override string ToString() { return ToString(G, null); } // Hiện thực phương thức IFormattable.ToString để trả về ...

Tài liệu được xem nhiều: