回覆列表
  • 1 # 使用者834195712159

    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 >= 100))

    {

    arr[index] = value;

    }

    }

    }

    2、索引器的使用

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

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

    Z z=new z();

    z[0]=100;

    z[1]=101;

    Console.WriteLine(z[0]);

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

    C#中並不將索引器的型別限制為整數。例如,可以對索引器使用字串。透過搜尋集合內的字串並返回相應的值,可以實現此類的索引器。由於訪問器可以被過載,字串和整數版本可以共存。

    class DayCollection

    {

    string[] days={"Sun","Mon","Tues","Wed","Thurs","Fri","Sat"};

    private int GetDay(string testDay)

    {

    int i=0;

    foreach(string day in days)

    {

    if(day==testDay)

    return i;

    i++;

    }

    return -1;

    }

    public int this[string day]

    {

    get{return (GetDay(day))}

    }

    }

    static void Main(string[] args)

    {

    DayCollection week=new DayCollection();

    Console.WriteLine("Fri:{0}",week["Fri"]);

    Console.WriteLine("ABC:{0}",week["ABC"]);

    }

  • 中秋節和大豐收的關聯?
  • 吃雞的揹包該如何拾取物品?