Megosztás a következőn keresztül:


Indexelők (C# programozási útmutató)

Az indexelők lehetővé teszik, hogy egy osztály vagy struktúra példányai ugyanúgy indexelhetők legyenek, mint a tömbök. Az indexelt érték beállítható vagy lekérhető anélkül, hogy explicit módon megad egy típust vagy példánytagot. Az indexelők a tulajdonságokra hasonlítanak, azzal a kivételével, hogy a tartozékaik paramétereket vesznek fel.

Az alábbi példa egy általános osztályt határoz meg egyszerű lekérési és beállítási kiegészítő metódusokkal az értékek hozzárendeléséhez és lekéréséhez. Az Program osztály létrehozza ennek az osztálynak egy példányát a sztringek tárolásához.

using System;

class SampleCollection<T>
{
   // Declare an array to store the data elements.
   private T[] arr = new T[100];

   // Define the indexer to allow client code to use [] notation.
   public T this[int i]
   {
      get { return arr[i]; }
      set { arr[i] = value; }
   }
}

class Program
{
   static void Main()
   {
      var stringCollection = new SampleCollection<string>();
      stringCollection[0] = "Hello, World";
      Console.WriteLine(stringCollection[0]);
   }
}
// The example displays the following output:
//       Hello, World.

Megjegyzés

További példákért lásd a kapcsolódó szakaszokat.

Kifejezéstörzs-definíciók

Gyakran előfordul, hogy egy indexelő get vagy set tartozéka egyetlen utasításból áll, amely visszaad vagy beállít egy értéket. A kifejezéstestű tagok egyszerűsített szintaxist biztosítanak a forgatókönyv támogatásához. A C# 6-tól kezdve egy írásvédett indexelő kifejezéstestű tagként valósítható meg, ahogy az alábbi példa mutatja.

using System;

class SampleCollection<T>
{
   // Declare an array to store the data elements.
   private T[] arr = new T[100];
   int nextIndex = 0;

   // Define the indexer to allow client code to use [] notation.
   public T this[int i] => arr[i];

   public void Add(T value)
   {
      if (nextIndex >= arr.Length)
         throw new IndexOutOfRangeException($"The collection can hold only {arr.Length} elements.");
      arr[nextIndex++] = value;
   }
}

class Program
{
   static void Main()
   {
      var stringCollection = new SampleCollection<string>();
      stringCollection.Add("Hello, World");
      System.Console.WriteLine(stringCollection[0]);
   }
}
// The example displays the following output:
//       Hello, World.

Vegye figyelembe, hogy => a kifejezés törzse be van adva, és hogy a get kulcsszó nincs használatban.

A C# 7.0-tól kezdve a get és a set kiegészítő is implementálható kifejezési testű tagként. Ebben az esetben mind a set kulcsszavakat, mind get a kulcsszavakat használni kell. Például:

using System;

class SampleCollection<T>
{
   // Declare an array to store the data elements.
   private T[] arr = new T[100];

   // Define the indexer to allow client code to use [] notation.
   public T this[int i]
   {
      get => arr[i];
      set => arr[i] = value;
   }
}

class Program
{
   static void Main()
   {
      var stringCollection = new SampleCollection<string>();
      stringCollection[0] = "Hello, World.";
      Console.WriteLine(stringCollection[0]);
   }
}
// The example displays the following output:
//       Hello, World.

Indexelők áttekintése

  • Az indexelők lehetővé teszik, hogy az objektumok a tömbökhöz hasonlóan indexelhetők legyenek.

  • A get tartozék egy értéket ad vissza. A set tartozék egy értéket rendel hozzá.

  • Ez a kulcsszó határozza meg az indexelőt.

  • Az érték kulcsszó a tartozék által set hozzárendelt érték meghatározására szolgál.

  • Az indexelőket nem kell egész számérték alapján indexelni; Ön határozza meg az adott keresési mechanizmust.

  • Az indexelők túlterhelhetők.

  • Az indexelők több formális paraméterrel is rendelkezhetnek, például kétdimenziós tömb elérésekor.

Kapcsolódó témakörök

C# nyelvspecifikáció

További információ: Indexelők a C#-nyelv specifikációjában. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.

Lásd még