Một người lập chỉ mục cho phép một đối tượng được lập chỉ mục chẳng hạn như một mảng. Khi bạn xác định một chỉ mục cho một lớp, lớp này hoạt động tương tự như mảng ảo. Sau đó, bạn có thể truy cập cá thể của lớp này bằng cách sử dụng toán tử truy cập mảng ([ ]).
Cú pháp
Trình lập chỉ mục một chiều có cú pháp sau:
element-type this[int index] {
// The get accessor.
get {
// return the value specified by index
}
// The set accessor.
set {
// set the value specified by index
}
}
Sử dụng trình chỉ mục
Tuyên bố về hành vi của một người lập chỉ mục ở một mức độ nào đó tương tự như một thuộc tính. tương tự như các thuộc tính, bạn sử dụng lấy và bộ người truy cập để xác định một trình lập chỉ mục. Tuy nhiên, các thuộc tính trả về hoặc đặt một thành viên dữ liệu cụ thể, trong khi các trình chỉ mục trả về hoặc đặt một giá trị cụ thể từ cá thể đối tượng. Nói cách khác, nó chia dữ liệu cá thể thành các phần nhỏ hơn và lập chỉ mục từng phần, lấy hoặc đặt từng phần.
Việc xác định thuộc tính liên quan đến việc cung cấp tên tài sản. Các chỉ mục không được xác định bằng tên, nhưng với đây từ khóa, đề cập đến cá thể đối tượng. Ví dụ sau minh họa khái niệm –
using System;
namespace IndexerApplication {
class IndexedNames {
private string[] namelist = new string[size];
static public int size = 10;
public IndexedNames() {
for (int i = 0; i < size; i++)
namelist[i] = "N. A.";
}
public string this[int index] {
get {
string tmp;
if( index >= 0 && index <= size-1 ) {
tmp = namelist[index];
} else {
tmp = "";
}
return ( tmp );
}
set {
if( index >= 0 && index <= size-1 ) {
namelist[index] = value;
}
}
}
static void Main(string[] args) {
IndexedNames names = new IndexedNames();
names[0] = "Zara";
names[1] = "Riz";
names[2] = "Nuha";
names[3] = "Asif";
names[4] = "Davinder";
names[5] = "Sunil";
names[6] = "Rubic";
for ( int i = 0; i < IndexedNames.size; i++ ) {
Console.WriteLine(names[i]);
}
Console.ReadKey();
}
}
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A.
Trình lập chỉ mục bị quá tải
Các chỉ mục có thể bị quá tải. Các chỉ mục cũng có thể được khai báo với nhiều tham số và mỗi tham số có thể là một kiểu khác nhau. Không nhất thiết các chỉ mục phải là số nguyên. C # cho phép các chỉ mục thuộc các kiểu khác, ví dụ, một chuỗi.
Ví dụ sau minh họa các trình chỉ mục bị quá tải:
using System;
namespace IndexerApplication {
class IndexedNames {
private string[] namelist = new string[size];
static public int size = 10;
public IndexedNames() {
for (int i = 0; i < size; i++) {
namelist[i] = "N. A.";
}
}
public string this[int index] {
get {
string tmp;
if( index >= 0 && index <= size-1 ) {
tmp = namelist[index];
} else {
tmp = "";
}
return ( tmp );
}
set {
if( index >= 0 && index <= size-1 ) {
namelist[index] = value;
}
}
}
public int this[string name] {
get {
int index = 0;
while(index < size) {
if (namelist[index] == name) {
return index;
}
index++;
}
return index;
}
}
static void Main(string[] args) {
IndexedNames names = new IndexedNames();
names[0] = "Zara";
names[1] = "Riz";
names[2] = "Nuha";
names[3] = "Asif";
names[4] = "Davinder";
names[5] = "Sunil";
names[6] = "Rubic";
//using the first indexer with int parameter
for (int i = 0; i < IndexedNames.size; i++) {
Console.WriteLine(names[i]);
}
//using the second indexer with the string parameter
Console.WriteLine(names["Nuha"]);
Console.ReadKey();
}
}
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A. 2
