Danh mục

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

Số trang: 10      Loại file: pdf      Dung lượng: 2.62 MB      Lượt xem: 5      Lượt tải: 0    
Thư Viện Số

Hỗ trợ phí lưu trữ khi tải xuống: miễn phí Tải xuống file đầy đủ (10 trang) 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- P74: 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- P74 621 Chương 16: Các giao diện và mẫu thông dụng // Tính giá trị trả về bằng cách thực hiện phép so sánh // trường name (không phân biệt chữ hoa-thường). // Vì name là chuỗi nên cách dễ nhất là dựa vào khả năng // so sánh của lớp String (thực hiện phép so sánh chuỗi // có phân biệt bản địa). return string.Compare(this.name, other.name, true); } }}Phương thức Main minh họa phép so sánh và khả năng sắp xếp nhờ có hiện thực giao diệnIComparable và IComparer. Phương thức này sẽ tạo một tập hợpSystem.Collections.ArrayList chứa năm đối tượng Newspaper, sau đó sắp xếp ArrayList hailần bằng phương thức ArrayList.Sort. Lần đầu, thao tác Sort sử dụng cơ chế so sánh mặcđịnh của Newspaper (thông qua phương thức IComparable.CompareTo). Lần sau, thao tác Sortsử dụng đối tượng AscendingCirculationComparer (thông qua phương thứcIComparer.Compare).public static void Main() { ArrayList newspapers = new ArrayList(); newspapers.Add(new Newspaper(Tuoi Tre, 125780)); newspapers.Add(new Newspaper(Echip, 55230)); newspapers.Add(new Newspaper(Thanh Nien, 235950)); newspapers.Add(new Newspaper(Phu Nu, 88760)); newspapers.Add(new Newspaper(Tiep Thi, 5670)); Console.WriteLine(Unsorted newspaper list:); foreach (Newspaper n in newspapers) { Console.WriteLine(n); } Console.WriteLine(Environment.NewLine); Console.WriteLine(Newspaper list sorted by name (default order):); newspapers.Sort(); foreach (Newspaper n in newspapers) { Console.WriteLine(n); } 622 Chương 16: Các giao diện và mẫu thông dụng Console.WriteLine(Environment.NewLine); Console.WriteLine(Newspaper list sorted by circulation:); newspapers.Sort(Newspaper.CirculationSorter); foreach (Newspaper n in newspapers) { Console.WriteLine(n); }}Chạy phương thức Main sẽ sinh ra kết quả như sau:Unsorted newspaper list:Tuoi Tre: Circulation = 125780Echip: Circulation = 55230Thanh Nien: Circulation = 235950Phu Nu: Circulation = 88760Tiep Thi: Circulation = 5670Newspaper list sorted by name (default order):Echip: Circulation = 55230Phu Nu: Circulation = 88760Thanh Nien: Circulation = 235950Tiep Thi: Circulation = 5670Tuoi Tre: Circulation = 125780Newspaper list sorted by circulation:Tiep Thi: Circulation = 5670Echip: Circulation = 55230Phu Nu: Circulation = 88760Tuoi Tre: Circulation = 125780Thanh Nien: Circulation = 2359504. Hiện thực kiểu khả-liệt-kê (enumerable type) Bạn cần tạo một kiểu tập hợp sao cho nội dung của nó có thể được liệt kê bằng lệnh foreach. Hiện thực giao diện System.IEnumerable trong kiểu tập hợp của bạn. Phương thức GetEnumerator của giao diện IEnumerable trả về một enumerator—một đối 623 Chương 16: Các giao diện và mẫu thông dụng tượng có hiện thực giao diện System.IEnumerator. Giao diện IEnumerator định nghĩa các phương thức sẽ được lệnh foreach sử dụng để kiệt kê tập hợp.Một bộ chỉ mục bằng số (numerical indexer) cho phép bạn duyệt qua các phần tử của một tậphợp bằng vòng lặp for. Tuy nhiên, kỹ thuật này không cung cấp mức trừu tượng phù hợp vớicác cấu trúc dữ liệu phi tuyến, như cây và tập hợp đa chiều. Lệnh foreach cung cấp một cơchế duyệt qua các đối tượng của một tập hợp mà không quan tâm cấu trúc bên trong củachúng là gì.Để hỗ trợ ngữ nghĩa foreach, đối tượng chứa tập hợp phải hiện thực giao diệnSystem.IEnumerable. Giao diện này khai báo một phương thức có tên là GetEnumerator,phương thức này không nhận đối số và trả về một đối tượng System.IEnumerator:IEnumerator GetEnumerator();Đối tượng IEnumerator là đối tượng hỗ trợ việc liệt kê các phần tử của tập hợp. Giao diệnIEnumerator cung cấp một con chạy chỉ-đọc, chỉ-tiến (read-only, forward-only cursor) dùngđể truy xuất các thành viên của tập hợp nằm dưới. Bảng 16.1 mô tả các thành viên của giaodiện IEnumerator.Bảng 16.1 Các thành viên của giao diện IEnumerator Thành viên Mô tả Thuộc tính này trả về phần tử dữ liệu hiện tại. Khi enumerator được tạo ra, Current chỉ đến vị trí đứng trước phần tử dữ liệu đầu tiên, nghĩa là bạn phải gọi MoveNext trước khi sử dụng Current. Nếu Current được gọi và Current enumerator đang đứng trước phần tử đầu tiên hoặc sau phần tử cuối cùng trong tập hợp dữ liệu, Current sẽ ném ngoại lệ System.InvalidOperationException. Phương thức này dịch chuyển enumerator sang phần tử dữ liệu kế tiếp trong tập hợp; trả về true nếu còn phần tử, trả về false nếu không còn MoveNext phần tử. Nếu nguồn dữ liệu nằm dưới thay đổi trong thời gian sống của enumerator, MoveNext sẽ ném ngoại lệ InvalidOperationException. Phương thức này dịch chuyển enumerator về vị trí đứng trước phần tử đầu tiên trong tập hợp dữ liệu. Nếu nguồn dữ liệu nằm dưới thay đổi trong thời Reset gian sống của enumerator, Reset sẽ ném ngoại lệ InvalidOperationException.[Các lớp TeamMember, Team, và TeamMemberEnumerator minh họa việc hiện thực giao diệnIEnumerable và IEnumerator. Lớp TeamMember mô tả một thành viên của một đội:// Lớp TeamMember mô tả một thành viên trong đội.public class TeamMember { ...

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