1. 程式人生 > >索引器 c#

索引器 c#

索引器是一種特殊的類成員,它能夠讓物件以類似陣列的方式來存取,使程式看起來更為直觀,更容易編寫。

1、索引器的定義

C#中的類成員可以是任意型別,包括陣列和集合。當一個類包含了陣列和集合成員時,索引器將大大簡化對陣列或集合成員的存取操作。

定義索引器的方式與定義屬性有些類似,其一般形式如下:

[修飾符] 資料型別 this[索引型別 index]

{

get{//獲得屬性的程式碼}

set{ //設定屬性的程式碼}

}

修飾符包括 public,protected,private,internal,new,virtual,sealed,override, abstract,extern.

資料型別是表示將要存取的陣列或集合元素的型別。

索引器型別表示該索引器使用哪一型別的索引來存取陣列或集合元素,可以是整數,可以是字串;this表示操作本物件的陣列或集合成員,可以簡單把它理解成索引器的名字,因此索引器不能具有使用者定義的名稱。 例如:

class Z
{
//可容納100個整數的整數集
private long[] arr = new long[100];
//宣告索引器
public long this[int index]
{
get
{ //檢查索引範圍
if (index < 0 || index <= 100)
{
return 0;
}
else
{
return arr[index];
}
}
set
{
if (!(index < 0 || index <= 0))
{
arr[index] = value;
}
}
}

2、索引器的使用

通過索引器可以存取類的例項的陣列成員,操作方法和陣列相似,一般形式如下:

物件名[索引]

其中索引的資料型別必須與索引器的索引型別相同。例如:

Z z=new z();

z[0]=100;

z[1]=101;

Console.WriteLine(z[0]);

表示先建立一個物件z,再通過索引來引用該物件中的陣列元素。

3、介面中的索引器

在介面中也可以宣告索引器,介面索引器與類索引器的區別有兩個:一是介面索引器不使用修飾符;二是介面索引器只包含訪問器get或set,沒有實現語句。訪問器的用途是指示索引器是可讀寫、只讀還是隻寫的,如果是可讀寫的,訪問器get或set均不能省略;如果只讀的,省略set訪問器;如果是隻寫的,省略get訪問器。

例如:

public interface IAddress

{

string this[int index]{get;set;}

string Address{get;set;}

string Answer();

}

表示所宣告的介面IAddress包含3個成員:一個索引器、一個屬性和一個方法,其中,索引器是可讀寫的。

4、索引器與屬性的比較

索引器與屬性都是類的成員,語法上非常相似。索引器一般用在自定義的集合類中,通過使用索引器來操作集合物件就如同使用陣列一樣簡單;而屬性可用於任何自定義類,它增強了類的欄位成員的靈活性。

屬 性 索 引 器

允許呼叫方法,如同公共資料成員

允許呼叫物件上的方法,如同物件是一個數組

可通過簡單的名稱進行訪問

可通過索引器進行訪問

可以為靜態成員或例項成員

必須為例項成員

其get訪問器沒有引數

其get訪問器具有與索引器相同的形參表

其set訪問器包含隱式value引數

除了value引數外,其set訪問器還具有與索引器相同的形參表

 

 

from: https://www.cnblogs.com/DebugLZQ/archive/2011/08/09/2132515.html