CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 624

624
Chương 16: Các giao diện và mẫu thông dụng

public TeamMember(string name, string title) {

Name = name;

Title = title;

}

// Trả về chuỗi mô tả TeamMember.

public override string ToString() {

return string.Format("{0} ({1})", Name, Title);

}

}

Lớp

Team

(mô tả một đội) là một tập hợp các đối tượng

TeamMember

. Lớp này hiện thực giao

diện

IEnumerable

và khai báo một lớp có tên là

TeamMemberEnumerator

để cung cấp chức năng

liệt kê. Thông thường, các lớp tập hợp sẽ trực tiếp hiện thực cả giao diện

IEnumerable

IEnumerator

. Tuy nhiên, sử dụng một lớp enumerator riêng biệt là cách đơn giản nhất để cho

phép nhiều enumerator—và nhiều tiểu trình—liệt kê đồng thời các phần tử của

Team

.

Team

hiện thực mẫu Observer bằng cách sử dụng các thành viên sự kiện và ủy nhiệm để báo

cho tất cả các đối tượng

TeamMemberEnumerator

biết

Team

nằm dưới có thay đổi hay không

(xem mục 16.10 để có thêm thông tin về mẫu Observer). Lớp

TeamMemberEnumerator

là một

lớp

private

lồng bên trong nên bạn không thể tạo các thể hiện của nó, trừ khi thông qua

phương thức

Team.GetEnumerator

. Dưới đây là phần mã cho lớp

Team

TeamMemberEnumerator

:

// Lớp Team mô tả tập hợp các đối tượng TeamMember. Hiện thực giao diện

// IEnumerable để hỗ trợ việc liệt kê các đối tượng TeamMember.

public class Team : IEnumerable {

// TeamMemberEnumerator là một lớp private lồng bên trong, cung cấp

// chức năng liệt kê các đối tượng TeamMember trong tập hợp

// Team. Vì là lớp lồng bên trong nên TeamMemberEnumerator

// có thể truy xuất các thành viên private của lớp Team.

private class TeamMemberEnumerator : IEnumerator {

private Team sourceTeam;

// Giá trị luận lý cho biết Team nằm dưới có thay đổi hay không.

private bool teamInvalid = false;

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.