posts - 5,  comments - 5,  trackbacks - 0
          本節(jié)課將介紹C#的索引指示器,其目的包括:
          1.了解什么是索引指示器

          2.如何實現(xiàn)索引指示器

          3.重載索引指示器

          4.了解如何實現(xiàn)多參數(shù)的索引指示器

          索引指示器并不難使用。它們的用法跟數(shù)組相同。在一個類內(nèi)部,你可以按照你的意愿來管理一組數(shù)據(jù)的集合。這些對象可以是類成員的有限集合,也可以是另外一個數(shù)組,或者是一些復雜的數(shù)據(jù)結(jié)構(gòu)。不考慮類的內(nèi)部實現(xiàn),其數(shù)據(jù)可以通過使用索引指示器來獲得。如下是一個例子:

          1.清單 11-1. 索引指示器的例子:IntIndexer.cs

          using System;
          ///
          /// A simple indexer example.
          ///

          class IntIndexer
          {
          private string[] myData;

          public IntIndexer(int size)
          {
          myData = new string[size];
          for (int i=0; i < size; i++)
          {
          myData[i] = "empty";
          }
          }
          public string this[int pos]
          {
          get
          {
          return myData[pos];
          }
          set
          {
          myData[pos] = value;
          }
          }

          static void Main(string[] args)
          {
          int size = 10;
          IntIndexer myInd = new IntIndexer(size);
          myInd[9] = "Some Value";
          myInd[3] = "Another Value";
          myInd[5] = "Any Value";
          Console.WriteLine("\nIndexer Output\n");
          for (int i=0; i < size; i++)
          {
          Console.WriteLine("myInd[{0}]: {1}", i, myInd[i]);
          }
          }
          }

          說明

          1.清單 11-1演示了如何實現(xiàn)一個索引指示器, IntIndexer類有個名為myData的字符串數(shù)組,該數(shù)組是私有成員,因而其外部成員是看不見的。該數(shù)組是在構(gòu)造函數(shù)中進行初始化的,該構(gòu)造函數(shù)帶有一個整型size參數(shù),用來初始化myData數(shù)組,初始化時 把單詞"empty"作為每個數(shù)組元素的值。

          2.IntIndexer類的下一成員是索引指示器(Indexer),由關(guān)鍵字this和方括號[int pos]標識出來。該成員帶有一個位置參數(shù)pos。正如你已經(jīng)猜測到,Indexer的實現(xiàn)同屬性一樣。Indexer有g(shù)et 和set訪問操作,就同屬性中的用法一樣。索引指示器(indexer)返回一個字符串,在定義索引指示器時,string這個類型名標志著其返回類型為字符串類型。

          3.Main()方法完成如下事情:初始化一個新的IntIndexer對象,添加一些值,并且打印出結(jié)果。其輸出結(jié)果如下:

          Indexer Output

          myInd[0]: empty
          myInd[1]: empty
          myInd[2]: empty
          myInd[3]: Another Value
          myInd[4]: empty
          myInd[5]: Any Value
          myInd[6]: empty
          myInd[7]: empty
          myInd[8]: empty
          myInd[9]: Some Value

          4.在不少程序語言中,通常都是使用整數(shù)作為下標來訪問作為數(shù)組元素的,但C#的索引指示器不僅能夠做到這一點,而且還能夠更進一步。 定義索引指示器時,可以帶有多個參數(shù),每個參數(shù)的類型可以不同。添加的參數(shù)由逗號隔開,同方法中的的參數(shù)表一樣。索引指示器的合法的參數(shù)類型包括:整型,枚舉類型和字符串。另外,索引指示器也可以被重載。在清單 11-2中,我們修改了前面的程序,以便用來重載索引指示器 ,從而可以接受不同類型的參數(shù)。

          2.清單 11-2. 重載的索引指示器: OvrIndexer.cs

          using System;
          ///
          /// Implements overloaded indexers.
          ///

          class OvrIndexer
          {
          private string[] myData;
          private int arrSize;
          public OvrIndexer(int size)
          {
          arrSize = size;
          myData = new string[size];
          for (int i=0; i < size; i++)
          {
          myData[i] = "empty";
          }
          }

          public string this[int pos]
          {
          get
          {
          return myData[pos];
          }
          set
          {
          myData[pos] = value;
          }
          }

          public string this[string data]
          {
          get
          {
          int count = 0;
          for (int i=0; i < arrSize; i++)
          {
          if (myData[i] == data)
          {
          count++;
          }
          }
          return count.ToString();
          }
          set
          {
          for (int i=0; i < arrSize; i++)
          {
          if (myData[i] == data)
          {
          myData[i] = value;
          }
          }
          }
          }

          static void Main(string[] args)
          {
          int size = 10;
          OvrIndexer myInd = new OvrIndexer(size);
          myInd[9] = "Some Value";
          myInd[3] = "Another Value";
          myInd[5] = "Any Value";
          myInd["empty"] = "no value";
          Console.WriteLine("\nIndexer Output\n");
          for (int i=0; i < size; i++)
          {
          Console.WriteLine("myInd[{0}]: {1}", i, myInd[i]);
          }
          Console.WriteLine("\nNumber of \"no value\" entries: {0}", myInd["no value"]);
          }
          }

          說明

          1.清單 11-2 演示了如何重載索引指示器。

          帶有整型參數(shù)pos的第一個索引指示器同清單11-1中的一樣,但是,該程序中有個帶有字符串參數(shù)的新的索引指示器。對于這個新的索引指示器來說,其get操作返回的是同參數(shù)值data相匹配的成員的個數(shù)。 Set操作把數(shù)組中同參數(shù)值匹配的元素值該變?yōu)関alue值。

          2.在清單11-2的Main()方法中,演示了重載的索引指示器,它接受字符串參數(shù)。

          該重載的索引指示器調(diào)用了set操作,通過使用下列命令: myInd["empty"] = "no value"; set操作把"no value"值賦給myInd 類中所有的值為"empty"的成員。 myInd類的每個成員都已經(jīng)輸出之后,就把最后一個數(shù)據(jù)輸出到控制臺,該數(shù)據(jù)統(tǒng)計數(shù)組成員值為"no value"的個數(shù)。 使用如下命令:myInd["no value"],就可調(diào)用get操作。輸出結(jié)果如下:

          Indexer Output
          myInd[0]: no value
          myInd[1]: no value
          myInd[2]: no value
          myInd[3]: Another Value
          myInd[4]: no value
          myInd[5]: Any Value
          myInd[6]: no value
          myInd[7]: no value
          myInd[8]: no value
          myInd[9]: Some Value

          Number of "no value" entries: 7

          3.在清單 11-2中,兩個索引指示器共處在同一個類中, 這是可以的,因為它們有不同的特征。

          一個索引指示器的特征是通過索引指示器參數(shù)表中的參數(shù)個數(shù)和類型表現(xiàn)出來的。類能夠辨別出其特征,并調(diào)用相應的索引指示器。帶有多個參數(shù)的索引指示器可以用如下格式來實現(xiàn):

          public object this[int param1, ..., int paramN]
          {
          get
          {
          // process and return some class data
          }
          set
          {
          // process and assign some class data
          }
          }

          小結(jié)
          現(xiàn)在你已經(jīng)了解了索引指示器是用來做什么的,以及其用法。如同數(shù)組的用法一樣,你可以創(chuàng)建索引指示器來訪問類的成員。本文也提到了索引指示器的重載和多參數(shù)索引指示器。
          posted on 2007-03-29 11:08 曾科 閱讀(160) 評論(0)  編輯  收藏 所屬分類: C#
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          .net

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 普格县| 原平市| 云龙县| 安塞县| 乐至县| 黑河市| 凭祥市| 右玉县| 株洲市| 绥宁县| 丹棱县| 墨脱县| 贵港市| 南部县| 平邑县| 蚌埠市| 凌源市| 缙云县| 峨山| 蒲城县| 郑州市| 黄浦区| 普定县| 沁阳市| 固安县| 清镇市| 临猗县| 萍乡市| 江孜县| 鸡东县| 天峨县| 赞皇县| 昆山市| 监利县| 西吉县| 房山区| 墨玉县| 五常市| 东乌珠穆沁旗| 重庆市| 肃北|