Pengindeks (Panduan Pemrograman C#)

Pengindeks memungkinkan instans kelas atau struct diindeks seperti array. Nilai yang diindeks bisa diatur atau diambil tanpa secara eksplisit menentukan jenis atau anggota instans. Pengindeks menyerupai properti kecuali pengaksesnya mengambil parameter.

Contoh berikut ini mendefinisikan kelas generik dengan metode get dan set aksesor sederhana untuk menetapkan dan mengambil nilai. Kelas Program membuat instans kelas ini untuk menyimpan string.

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.

Catatan

Untuk contoh selengkapnya, lihat Bagian Terkait.

Definisi Isi Ekspresi

Biasanya pengindeks get atau set accessor terdiri dari satu pernyataan yang mengembalikan atau menetapkan nilai. Anggota yyang mengisi ekspresi menyediakan sintaks yang disederhanakan untuk mendukung skenario ini. Dimulai dengan C# 6, pengindeks baca-saja dapat diimplementasikan sebagai anggota bertubuh ekspresi, seperti yang ditunjukkan oleh contoh berikut.

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.

Perhatikan bahwa => memperkenalkan isi ekspresi, dan kata kunci get tidak digunakan.

Dimulai dengan C# 7.0, aksesori get dan set dapat diimplementasikan sebagai anggota berisi ekspresi. Dalam hal ini, kata kunci get dan set harus digunakan. Contohnya:

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.

Ringkasan Pengindeks

  • Pengindeks memungkinkan objek diindeks dengan cara yang mirip dengan array.

  • Aksesor get mengembalikan nilai. Aksesor set menetapkan nilai.

  • Kata kunci ini digunakan untuk menentukan pengindeks.

  • Kata kunci nilai digunakan untuk menentukan nilai yang ditetapkan oleh pengakses set.

  • Pengindeks tidak harus diindeks oleh nilai integer; segalanya tergantung pada bagaimana Anda menentukan mekanisme pencarian tertentu.

  • Pengindeks dapat kelebihan beban.

  • Pengindeks bisa memiliki lebih dari satu parameter formal, misalnya, saat mengakses array dua dimensi.

Bagian terkait

Spesifikasi Bahasa C#

Untuk informasi selengkapnya, lihat Pengindeks dalam Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.

Lihat juga