Giao diện tập hợp

9 209 0
Giao diện tập hợp

Đang tải... (xem toàn văn)

Thông tin tài liệu

Giao diện tập hợp Giao diện tập hợp Bởi: Khuyet Danh Môi trường NET cung cấp giao diện chuẩn cho việc liệt kê, so sánh, tạo tập hợp Một số giao diện số liệt kê bảng 9.2 sau: Giao diện cho tập hợp Giao diện Mục đích IEnumerable Liệt kê thông qua tập hợp cách sử dụngforeach ICollection Thực thi tất tập hợp để cung cấp phương thức CopyTo() thuộc tính Count,ISReadOnly, ISSynchronized, SyncRoot IComparer So sánh hai đối tượng lưu giữ tập hợp đểsắp xếp đối tượng tập hợp IList Sử dụng tập hợp mảng mục IDictionary Dùng tập hợp dựa khóa giá trị nhưHashtable SortedList IDictionaryEnumerator Cho phép liệt kê dùng câu lệnh foreach qua tập hợphỗ trợ IDictionary Giao diện Ienumerable Chúng ta hỗ trợ cú pháp foreach lớp ListBoxTest việc thực thi giao diện IEnumerator Giao diện có phương thức GetEnumerator(), công việc phương thức trả thực thi đặc biệt IEnumerator Do vậy, ngữ nghĩa lớp Enumerable cung cấp Enumerator: public IEnumerator GetEnumerator() { return (IEnumerator) new ListBoxEnumerator(this); } Enumerator phải thực thi phương thức thuộc tính IEnumerator Chúng thực thi trực tiếp lớp chứa (trong trường hợp lớp ListBoxTest) hay 1/9 Giao diện tập hợp lớp phân biệt khác Cách tiếp cận thứ hai thường sử dụng nhiều hơn, chúng đóng gói lớp Enumerator việc phân vào lớp chứa Do lớp Enumerator xác định cho lớp chứa, theo lớp ListBoxEnumerator phải biết nhiều lớp ListBoxTest Nên phải tạo cho thực thi riêng chứa bên lớp ListBoxTest Lưu ý phương thức GetEnumerator truyền đối tượng List- BoxTest thời (this) cho enumerator Điều cho phép enumerator liệt kê thành phần tập hợp đối tượng ListBoxTest Ở lớp thực thi Enumerator ListBoxEnumerator, lớp private định nghĩa bên lớp ListBoxTest Lớp thực thi đơn giản bao gồm thuộc tính public, hai phương thức public MoveNext(), Reset() Đối tượng ListBoxTest truyền vào đối mục khởi tạo Ở gán cho biến thành viên myLBT Trong hàm khởi tạo thực thiết lập giá trị biến thành viên index -1, chưa bắt đầu thực việc enumerator đối tượng: public ListBoxEnumerator(ListBoxTest lbt) { this.lbt = lbt; index = -1; } Phương thức MoveNext() gia tăng index sau kiểm tra để đảm bảo việc thực không vượt số phần tử tập hợp đối tượng: public bool MoveNext() { index++; if (index >= lbt.strings.Length) return false; else return true; } Phương thức IEnumerator.Reset() không làm thiết lập lại giá trị index -1 Thuộc tính Current trả đối tượng chuỗi hành Đó tất việc cần làm cho lớp ListBoxTest thực thi giao diện IEnumerator Câu lệnh foreach gọi để đem enumerator, sử dụng để liệt kê qua thành phần mảng Sau toàn chương trình minh họa cho việc thực thi Tạo lớp ListBox hỗ trợ enumerator namespace Programming_CSharp { using System; using System.Collections; 2/9 Giao diện tập hợp // tạo control đơn giản public class ListBoxTest: IEnumerable { // lớp thực thi riêng ListBoxEnumerator private class ListBoxEnumerator : IEnumerator { public ListBoxEnumerator(ListBoxTest lbt) { this.lbt = lbt; index = -1; } // gia tăng index đảm bảo giá trị hợp lệ public bool MoveNext() { index++; if (index >= lbt.strings.Length) return false; else return true; } public void Reset() { 3/9 Giao diện tập hợp index = -1; } public object Current { get { return( lbt[index]); } } private ListBoxTest lbt; private int index; } // trả Enumerator public IEnumerator GetEnumerator() { return (IEnumerator) new ListBoxEnumerator(this); } // khởi tạo listbox với chuỗi public ListBoxTest (params string[] initStr) { strings = new String[10]; // copy từ mảng chuỗi tham số 4/9 Giao diện tập hợp foreach (string s in initStr) { strings[ctr++] = s; } } public void Add(string theString) { strings[ctr] = theString; ctr++; } // cho phép truy cập giống mảng public string this[int index] { get { if ( index < || index >= strings.Length) { // xử lý index sai } return strings[index]; } set 5/9 Giao diện tập hợp { strings[index] = value; } } // số chuỗi nắm giữ public int GetNumEntries() { return ctr; } private string[] strings; private int ctr = 0; } public class Tester { static void Main() { ListBoxTest lbt = new ListBoxTest("Hello", "World"); lbt.Add("What"); lbt.Add("Is"); lbt.Add("The"); lbt.Add("C"); lbt.Add("Sharp"); 6/9 Giao diện tập hợp string subst = "Universe"; lbt[1] = subst; // truy cập tất chuỗi int count =1; foreach (string s in lbt) { Console.WriteLine("Value {0}: {1}",count, s); count++; } } } } Kết quả: Value 1: Hello Value 2: Universe Value 3: What Value 4: Is Value 5: The Value 6: C Value 7: Sharp Value 8: Value 9: 7/9 Giao diện tập hợp Value 10: Chương trình thực cách tạo đối tượng ListBoxTest truyền hai chuỗi vào cho khởi dựng Khi đối tượng tạo mảng chuỗi định nghĩa có kích thước 10 chuỗi Năm chuỗi sau đưa vào phương thức Add() Và chuỗi thứ hai sau cập nhật lại giá trị Sự thay đổi lớn chương trình phiên câu lệnh foreach gọi để truy cập chuỗi ListBox Vòng lặp foreach tự động sử dụng giao diện IEnumerator cách gọi phương thức GetEnumerator() Một đối tượng ListBoxEnumerator tạo giá trị index = -1 thiết lập khởi tạo Vòng lặp foreach sau gọi phương thức MoveNext(), index gia tăng đến trả true Khi foreach sử dụng thuộc tính Current để nhận lại chuỗi hành Thuộc tính Current gọi mục ListBox nhận lại chuỗi lưu trữ vị trí Chuỗi gán cho biến s định nghĩa vòng lặp, chuỗi hiển thị hình console Vòng lặp tiếp tục thực từngt bước: MoveNext(), Current(), hiển thị chuỗi tất chuỗi list box hiển thị Trong minh họa khai báo mảng chuỗi có 10 phần tử, nên kết ta thấy chuỗi vị trí 8, 9, 10 nội dung Giao diện ICollection Một giao diện quan trọng khác cho mảng cho tất tập hợp cung cấp NET Framework ICollection ICollection cung cấp bốn thuộc tính: Count, IsReadOnly, IsSynchronized, SyncRoot Ngoài ICollection cung cấp phương thức CopyTo() Thuộc tính thường sử dụng Count, thuộc tính trả số thành phần tập hợp: for(int i = 0; i < myIntArray.Count; i++) { // } Ở sử dụng thuộc tính Count myIntArray để xác định số đối tượng sử dụng mảng Giao diện IComparer Giao diện IComparer cung cấp phương thức Compare(), để so sánh hai phần tử tập hợp có thứ tự Phương thức Compare() thường thực thi cách gọi phương thức CompareTo() đối tượng CompareTo() phương thức có tất đối tượng thực thi IComparable Nếu muốn tạo lớp xếp bên tập hợp cần thiết phải thực thi IComparable 8/9 Giao diện tập hợp NET Framework cung cấp lớp Comparer thực thi IComparable cung cấp số thực thi cần thiết Phần danh sách mảng sau vào chi tiết việc thực thi IComparable 9/9 ... 10 phần tử, nên kết ta thấy chuỗi vị trí 8, 9, 10 nội dung Giao diện ICollection Một giao diện quan trọng khác cho mảng cho tất tập hợp cung cấp NET Framework ICollection ICollection cung cấp... trả số thành phần tập hợp: for(int i = 0; i < myIntArray.Count; i++) { // } Ở sử dụng thuộc tính Count myIntArray để xác định số đối tượng sử dụng mảng Giao diện IComparer Giao diện IComparer cung... index đảm bảo giá trị hợp lệ public bool MoveNext() { index++; if (index >= lbt.strings.Length) return false; else return true; } public void Reset() { 3/9 Giao diện tập hợp index = -1; } public

Ngày đăng: 31/12/2015, 21:44

Từ khóa liên quan

Mục lục

  • Giao diện tập hợp

  • Giao diện Ienumerable

  • Giao diện ICollection

  • Giao diện IComparer

Tài liệu cùng người dùng

Tài liệu liên quan