索引器就是特殊的屬性,以下是最簡單的索引器例子

          就是給定索引編號去找索引編號對應(yīng)的值,類似屬性的數(shù)組

           public string this[string configName]
                  {
                      get
                      {
                          return System.Configuration.ConfigurationManager.AppSettings[configName];
                      }

                  }

           

          索引器使得對象可按照與數(shù)組相似的方法進行索引。

          get 訪問器返回值。set 訪問器分配值。

          this 關(guān)鍵字用于定義索引器。

          value 關(guān)鍵字用于定義由 set 索引器分配的值。

          索引器不必根據(jù)整數(shù)值進行索引,由您決定如何定義特定的查找機制。

          索引器可被重載。

          索引器可以有多個形參,例如當訪問二維數(shù)組時。

          C#語言一個最令人感興趣的地方就是類的索引器(indexer)。簡單說來,所謂索引器就是一類特殊的屬性,通過它們你就可以像引用數(shù)組一樣引用自己的類。顯然,這一功能在創(chuàng)建集合類的場合特別有用,而在其他某些情況下,比如處理大型文件或者抽象某些有限資源等,能讓類具有類似數(shù)組的行為當然也是非常有用的。本文就會引領(lǐng)你設(shè)置類來采用索引器。但是,首先讓我們概述下屬性這個概念以便了解些必要的背景知識。

          屬性

            假如你曾經(jīng)用VB6編寫過程序,那么你應(yīng)該很熟悉屬性方法才對,所謂屬性方法其實就是特殊的類成員,它實現(xiàn)了對私有類域的受控訪問。在C#語言中有兩種屬性方法,其一是get,通過它可以返回私有域的值,其二是set,通過它就可以設(shè)置私有域的值。比如說,以下面的代碼為例,其間創(chuàng)建了一個FirstName屬性,由它控制對私有類成員firstname的訪問:

          class Person {
          private string firstname;
          public string FirstName {
          get {return firstname;}
          set {firstname = value;}
          }
          }

          屬性聲明可以如下編碼:
          Person p = new Person();
          p.FirstName = "Lamont";
          Console.WriteLine (p.FirstName);

            如你你所看到的那樣,屬性聲明倒更像是域聲明,只不過它還聲明了兩個特殊的成員,按照微軟的說法就是所謂的訪問函數(shù)(accessor)。當某一表達式的右邊調(diào)用屬性或者屬性用作其他子程序(或者函數(shù))的參數(shù)時即會調(diào)用get訪問函數(shù)。反之,當表達式左邊調(diào)用屬性并且通過隱式傳遞value參數(shù)設(shè)置私有域值的情況下就會調(diào)用set訪問函數(shù)。你可以創(chuàng)建只讀屬性,方法是省略set訪問函數(shù),這樣任何設(shè)置屬性的嘗試都會產(chǎn)生編譯錯誤。

          采用索引器的益處

            說了半天咱們轉(zhuǎn)到正題上來,那么為什么我要兜這個圈子呢?其實,這是因為類的索引器非常像屬性,從代碼上看也是這樣。以下是具有索引器的類示例,通過索引器會返回一個字符串:

          class Sample {
          public string this [int index] {
          get {return "You passed " + index; }
          }
          }

            注意,這里的屬性名是this,意思是回引類的當前實例,參數(shù)列表包含在方括號而非括號之內(nèi)。還有,這是一個只讀索引器。為了把它改成讀/寫類型,我又添加了一個set訪問函數(shù)。在定義索引器的時候,你不一定只采用一個參數(shù)。索引器參數(shù)可以采用任何類型,不過int是通常采用也是最為合理的類型。同一類中還可能擁有一個以上的索引器(重載)。

            如上定義了Sample類之后,我們就可以把索引器用作某種默認的屬性,如下所示:

          Sample s = new Sample();
          Console.WriteLine(s[55]);

          屬性和索引器

             屬性和索引器之間有好些差別:

            類的每一個屬性都必須擁有唯一的名稱,而類里定義的每一個索引器都必須擁有唯一的簽名(signature)或者參數(shù)列表(這樣就可以實現(xiàn)索引器重載)。

             屬性可以是static(靜態(tài)的)而索引器則必須是實例成員。

            為索引器定義的訪問函數(shù)可以訪問傳遞給索引器的參數(shù),而屬性訪問函數(shù)則沒有參數(shù)。

          接口

            類似數(shù)組的行為常受到程序?qū)崿F(xiàn)者的喜愛,所以你還可以為接口定義索引器,IList和 IDictionary集合接口都聲明了索引器以便訪問其存儲的項目。

            在為接口聲明索引器的時候,記住聲明只是表示索引器的存在。你只需要提供恰當?shù)脑L問函數(shù)即可,不必包括范圍修飾符。以下代碼把索引器聲明為接口IImplementMe的一部分:

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

            相應(yīng)實現(xiàn)的類則必須為IimplementMe的索引器具體定義get和set訪問函數(shù)。

            以上就是有關(guān)索引器的一些基本概述了。現(xiàn)在你應(yīng)該對索引器在你的開發(fā)中所具有的作用有了較深入的了解。

          索引器允許類或結(jié)構(gòu)的實例按照與數(shù)組相同的方式進行索引。索引器類似于屬性,不同之處在于它們的訪問器采用參數(shù)。

          在下面的示例中,定義了一個泛型類,并為其提供了簡單的 get 和 set 訪問器方法(作為分配和檢索值的方法)。Program 類為存儲字符串創(chuàng)建了此類的一個實例。

          class SampleCollection<T>
          {
              private T[] arr = new T[100];
              public T this[int i]
              {
                  get
                  {
                      return arr[i];
                  }
                  set
                  {
                      arr[i] = value;
                  }
              }
          }

          // This class shows how client code uses the indexer
          class Program
          {
              static void Main(string[] args)
              {
                  SampleCollection<string> stringCollection = new SampleCollection<string>();
                  stringCollection[0] = "Hello, World";
                  System.Console.WriteLine(stringCollection[0]);

          posted on 2009-03-20 11:22 sanmao 閱讀(691) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 兰州市| 克什克腾旗| 富平县| 姜堰市| 庆城县| 泌阳县| 长白| 弋阳县| 海林市| 咸宁市| 永宁县| 黑龙江省| 宁化县| 长沙县| 汤阴县| 通江县| 青川县| 贺州市| 崇州市| 东明县| 明溪县| 融水| 潼关县| 文登市| 常宁市| 磴口县| 温宿县| 南昌县| 原平市| 连州市| 高阳县| 桃江县| 富川| 西峡县| 南木林县| 山东省| 兴文县| 和田市| 车致| 石河子市| 高青县|