日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)編程開(kāi)發(fā)C#.NET → C#中的索引器詳細(xì)講解

      C#中的索引器詳細(xì)講解

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2012/5/31 19:40:19字體大小:A-A+

      作者:佚名點(diǎn)擊:313次評(píng)論:0次標(biāo)簽: 索引

      • 類型:網(wǎng)絡(luò)瀏覽大。8.6M語(yǔ)言:中文 評(píng)分:10.0
      • 標(biāo)簽:
      立即下載

      索引器:是C#引入的一個(gè)新型的類成員,它允許類或結(jié)構(gòu)的實(shí)例按照與數(shù)組相同的方式進(jìn)行索引。
      索引器類型于屬性,它們的不同之處在于索引器的訪問(wèn)器采用參數(shù)。
      定義了索引器之后,就可以像訪問(wèn)數(shù)組一樣,使用[]運(yùn)算符訪問(wèn)類的成員。

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

      [修飾符] 數(shù)據(jù)類型 this <[數(shù)據(jù)類型 標(biāo)識(shí)符]>
      {
      get{//獲得屬性的代碼}
      set{//設(shè)置屬性的代碼}
      }

      索引器概述:

      使用索引器可以用類似于數(shù)組的方式為對(duì)象建立索引。

      get accessor returns a value." data-guid="5e97def07fe15e931d526cafa5b97644">get 訪問(wèn)器返回值。 set accessor assigns a value." data-guid="66b9797a805b510e697d60c805140aeb">set 訪問(wèn)器分配值。

      this keyword is used to define the indexers." data-guid="c34f23e68daf270013978542591de397">this 關(guān)鍵字用于定義索引器。

      value keyword is used to define the value being assigned by the set indexer." data-guid="599578d2a780928307c04f6ca2b0f058">value 關(guān)鍵字用于定義由 set 索引器分配的值。

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

      索引器可被重載。

      索引器可以有多個(gè)形參,例如當(dāng)訪問(wèn)二維數(shù)組時(shí)。

      屬性與索引器的比較:

      屬性           索引器
      允許像調(diào)用公共數(shù)據(jù)成員一樣調(diào)用方法允許對(duì)一個(gè)對(duì)象本身使用數(shù)組表示法來(lái)訪問(wèn)該對(duì)象內(nèi)部集合中的元素
      可通過(guò)簡(jiǎn)單的名稱進(jìn)行訪問(wèn)可通過(guò)索引器進(jìn)行訪問(wèn)
      可以為靜態(tài)成員或?qū)嵗蓡T必須為實(shí)例成員
      get accessor of a property has no parameters." data-guid="a6cc8a328d7d6f37fe6726bef0a1e49b">屬性的 get 訪問(wèn)器沒(méi)有參數(shù)get accessor of an indexer has the same formal parameter list as the indexer." data-guid="d83df23e86b78dbdb4847d31d82a2337">索引器的 get 訪問(wèn)器具有與索引器相同的形參表
      set accessor of a property contains the implicit value parameter." data-guid="7b8d943b10ea3a65d99f8a3c0b284e05">屬性的 set 訪問(wèn)器包含隱式 value 參數(shù)set accessor of an indexer has the same formal parameter list as the indexer, and also to the value parameter." data-guid="61fa719a7490fc5fb284c6b5ef3c3c36">除了值參數(shù)外,索引器的 set 訪問(wèn)器還具有與索引器相同的形參表
      Auto-Implemented Properties (C# Programming Guide)." data-guid="0980783e25d81c644f0194104a5b78f1">支持對(duì)自動(dòng)實(shí)現(xiàn)的屬性(C# 編程指南)使用短語(yǔ)法不支持短語(yǔ)法

      get and set accessor methods as a means of assigning and retrieving values." data-guid="dd23dc3354d63d8f7d007da64625c804">      在下面的示例中,定義了一個(gè)泛型類,并為其提供了簡(jiǎn)單的 get 和 set 訪問(wèn)器方法(作為分配和檢索值的方法)。 Program class creates an instance of this class for storing strings." data-guid="6ddaa503e5fad577a85f10e9f502a5c1">Program 類為存儲(chǔ)字符串創(chuàng)建了此類的一個(gè)實(shí)例。

      class SampleCollection<T>
      {
          // Declare an array to store the data elements.
          private T[] arr = new T[100];
      
          // Define the indexer, which will allow client code
          // to use [] notation on the class instance itself.
          // (See line 2 of code in Main below.)        
          public T this[int i]
          {
              get
              {
                  // This indexer is very simple, and just returns or sets
                  // the corresponding element from the internal array.
                  return arr[i];
              }
              set
              {
                  arr[i] = value;
              }
          }
      }
      
      // This class shows how client code uses the indexer.
      class Program
      {
          static void Main(string[] args)
          {
              // Declare an instance of the SampleCollection type.
              SampleCollection<string> stringCollection = new SampleCollection<string>();
      
              // Use [] notation on the type.
              stringCollection[0] = "Hello, World";
              System.Console.WriteLine(stringCollection[0]);
          }
      }

      接口中的索引器:

      interface (C# Reference)." data-guid="9d8d9a82ccf82d740176b0fc9dbd9f72">索引器可在接口上聲明。 class indexers in the following ways:" data-guid="6f6aa5a1638e327697f0ddb85ba767e0">接口索引器的訪問(wèn)器與類索引器的訪問(wèn)器具有以下方面的不同:

      接口訪問(wèn)器不使用修飾符。

      接口訪問(wèn)器沒(méi)有體。

      因此,訪問(wèn)器的用途是指示索引器是讀寫、只讀還是只寫。

      以下是接口索引器訪問(wèn)器的示例:

      public interface ISomeInterface
      {
          //...

          // Indexer declaration:
          string this[int index]
          {
              get;
              set;
          }
      }

      一個(gè)索引器的簽名必須區(qū)別于在同一接口中聲明的其他所有索引器的簽名。

        下面的示例顯示如何實(shí)現(xiàn)接口索引器。

          // Indexer on an interface:
          public interface ISomeInterface
          {
              // Indexer declaration:
              int this[int index]
              {
                  get;
                  set;
              }
          }

          // Implementing the interface.
          class IndexerClass : ISomeInterface
          {
              private int[] arr = new int[100];
              public int this[int index]   // indexer declaration
              {
                  get
                  {
                      // The arr object will throw IndexOutOfRange exception.
                      return arr[index];
                  }
                  set
                  {
                      arr[index] = value;
                  }
              }
          }

          class MainClass
          {
              static void Main()
              {
                  IndexerClass test = new IndexerClass();
                  System.Random rand = new System.Random();
                  // Call the indexer to initialize its elements.
                  for (int i = 0; i < 10; i++)
                  {
                      test[i] = rand.Next();
                  }
                  for (int i = 0; i < 10; i++)
                  {
                      System.Console.WriteLine("Element #{0} = {1}", i, test[i]);
                  }

                  // Keep the console window open in debug mode.
                  System.Console.WriteLine("Press any key to exit.");
                  System.Console.ReadKey();
              }
          }
          /* Sample output:
              Element #0 = 360877544
              Element #1 = 327058047
              Element #2 = 1913480832
              Element #3 = 1519039937
              Element #4 = 601472233
              Element #5 = 323352310
              Element #6 = 1422639981
              Element #7 = 1797892494
              Element #8 = 875761049
              Element #9 = 393083859
           */

      在上例中,可以通過(guò)使用接口成員的完全限定名來(lái)使用顯式接口成員實(shí)現(xiàn)。 例如:

      public string ISomeInterface.this 
      { 
      } 

      但是,只有當(dāng)類使用同一索引器簽名實(shí)現(xiàn)一個(gè)以上的接口時(shí),為避免多義性才需要使用完全限定名。 Employee class is implementing two interfaces, ICitizen and IEmployee, and both interfaces have the same indexer signature, the explicit interface member implementation is necessary." data-guid="e374dc17743742840037ade58d9182f1">例如,如果 Employee 類實(shí)現(xiàn)的是兩個(gè)接口 ICitizen 和 IEmployee,并且這兩個(gè)接口具有相同的索引器簽名,則必須使用顯式接口成員實(shí)現(xiàn)。 即,以下索引器聲明:

      public string IEmployee.this 
      { 
      } 

      在 IEmployee 接口上實(shí)現(xiàn)索引器,而以下聲明:

      public string ICitizen.this 
      { 
      } 

      在 ICitizen 接口上實(shí)現(xiàn)索引器。

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)