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

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ập
hợ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ới

cá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ủa
chú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ện

System.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ện

IEnumerator

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 giao
diện

IEnumerator

.

Bảng 16.1 Các thành viên của giao diện IEnumerator

Thành viên

Mô tả

Current

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à

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

.

MoveNext

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

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

.

Reset

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
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ện

IEnumerable

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 {

public string Name;

public string Title;

// Phương thức khởi dựng đơn giản.

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.