1. Trang chủ
  2. » Công Nghệ Thông Tin

Tìm hiểu Indexer trong C# pps

4 387 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 110,61 KB

Nội dung

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 my

Trang 1

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

Trang 2

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 }

Trang 3

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ó

Trang 4

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]

Ngày đăng: 12/07/2014, 19:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w