C # - Trình lập chỉ mục
An indexercho 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ưvirtual array. Sau đó, bạn có thể truy cập cá thể của lớp này bằ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 indexer ở 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 get và setngười truy cập để xác định một trình chỉ mục. Tuy nhiên, các thuộc tính trả về hoặc thiết lập 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ớithistừ khóa, đề cập đến cá thể đối tượng. Ví dụ sau thể hiện 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