Tải bản đầy đủ (.pdf) (4 trang)

Tìm hiểu Indexer trong C# pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (110.61 KB, 4 trang )

WWW.CSHARPVN.COM C# Cơ Bản

Biên tập:salomit Nguồn: Internet

Tìm hiểu Indexer trong C#

ðôi lúc, bạn muốn truy xuất một tập hợp nằm trong lòng một class xem bản thân class này như là 1 mảng. Ví
dụ, giả sử bạn tạo một ô liệt kê (listbox) mang tên myListBox, chứa một danh sách những chuỗi chữ ñược trữ
trên một mảng một chiều, và một biến thành viên private mang tên myStrings. Thông thường, một listbox
thường có một số phương thức và thuộc tính ngoài mảng chuỗi. Tuy nhiên, sẽ rất tiện lợi nếu ta có khả năng
truy xuất listbox với một chỉ mục, coi listbox như là một mảng. Ví dụ, một thuộc tính như thế cho phép ta viết
ra những câu lệnh sau:
Code:
1. string chuoiDau = myListBox[0];
2. string chuoiCuoi = myListBox[Length-1];
Nói tóm lại, indexer là một sáng tạo của C# cho phép bạn truy xuất những tập hợp nằm trong lòng một lớp, sử
dụng cú pháp [] thông dụng của mảng. Indexer ñược xem như là một thuộc tính khá ñặc biệt kèm theo những
phương thức get() và set(). Khai báo một indexer cho phép bạn tạo những class hoặc struct hoạt ñộng tương tự
như “mảng ảo”. Những thể hiện của lớp này có thể ñược truy sử dụng tác tử truy xuất mảng [].

Vậy ta phải khai báo Indexer như thế nào? Bạn khai báo một thuộc tính indexer trong lòng một class, sử dụng
cú pháp tựa như sau:

Code:
1. type this[type argument] { get; set; }

Kiểu dữ liệu type: ñược trả về xác ñịnh kiểu ñối tượng mà indexer sẽ trả về.
type argument: cho biết loại ñối mục nào sẽ ñược dùng ñến ñể chỉ mục trên tập hợp chứa các ñối tượng ñích.
Từ khóa this là một qui chiếu về ñối tượng theo ñấy indexer sẽ xuất hiện.
Phần thân get() của indexer cũng giống phần thân của một phương thức thông thường:


Code:
1. get
2. {
3. return myArray[index];
4. }

Phần thân set() của indexer cũng giống phần thân của phương thức thông thường


WWW.CSHARPVN.COM C# Cơ Bản

Biên tập:salomit Nguồn: Internet

Code:
1. set
2. {
3. myArray[index] = value;
4. }


Sau ñây là ví dụ về Indexer:

ðầu tiên, ta khai báo một class ListBoxTest


Code:
1. class ListBoxTest
2. {
3. //thuoc tinh
4. private string[] myStrings; //mảng chuỗi

5. private int myCtr = 0; //biến kiểm tra số chuỗi chữ
6. //constructor
7. public ListBoxTest(params string[] initialStrings)
8. {
9. //tạo 1 mảng 256 chuỗi
10. myStrings = new string[256];
11. //khởi gán giá trị cho các chuỗi ñó
12. foreach (string s in initialStrings)
13. {
14. myStrings[myCtr++] = s;
15. }
16. }
17. //phương thức này ñể thêm một chuỗi bất kỳ
18. //vào mảng các chuỗi của class ListBoxTest
19. public void Add(string sChuoi)
20. {
21. if (myCtr >= myStrings.Length)
22. {
23. //xử lý chỉ mục ở ñây
24. }
25. else
26. myStrings[myCtr++] = sChuoi;
27. }
28. //INDEXER:
29. public string this[int index]
30. {
31. get
32. {
33. if (index < 0 || index > myStrings.Length)
34. {

35. //xử lý chỉ mục
36. }
37. return myStrings[index];
38. }
WWW.CSHARPVN.COM C# Cơ Bản

Biên tập:salomit Nguồn: Internet

39. set
40. {
41. if (index >= myCtr)
42. {
43. //xử lý chỉ mục
44. }
45. else
46. myStrings[index] = value;
47. }
48. }
49. //phương thức này trả về chỉ mục kiểm soát của class
50. public int GetNumEntries()
51. {
52. return myCtr;
53. }
54. }

Bây giờ, trong thân phương thức Main, ta làm vài ñoạn code DEMO ñể ví dụ:

Code:
1. class Program
2. {

3. static void Main(string[] args)
4. {
5. //tạo một ñối tượng thể hiện của class ListBoxTest
6. //và khởi gán 4 chuỗi: "Xin","Chao","Ba","Con"
7. //như là ñối số
8. ListBoxTest lbt = new ListBoxTest("Xin", "Chao", "Ba", "Con");
9. //thêm 3 chuỗi nữa
10. lbt.Add("Moi nguoi");
11. lbt.Add("manh khoe chu?");
12. lbt[1] = "neverland87"; //myStrings[1] = "neverland87"
13. //ñi xuyên qua ñối tượng lbt
14. //và in ra các chuỗi mà nó nắm giữ
15. //dựa và chỉ mục
16. for (int i = 0; i < lbt.GetNumEntries(); i++)
17. {
18. Console.WriteLine("lbt[{0}]:{1}", i, lbt[i]);
19. }
20. }
21. }

ðiều ñầu tiên, bạn ñể ý là hai biến thành viên private:
Code:
1. private string[] myStrings; //mảng chuỗi
2. private int myCtr = 0; //biến kiểm soát chỉ mục

Trong chương trình này, listbox duy trì một mảng các chuỗi chữ myStrings. Thật ra, thực tế listbox có thể sẽ có
WWW.CSHARPVN.COM C# Cơ Bản

Biên tập:salomit Nguồn: Internet


một mảng linh ñộng chẳng hạn. Biến myCtr dùng theo dõi bao nhiêu chuỗi chữ ñã ñược ñưa vào.
Phương thức chủ chốt của ListBoxTest là indexer. Indexer sẽ không mang tên, do ñó bạn sử dụng từ khóa this:

Code:
1. public string this[int index]

×