Bagaimana bekerja dengan pengindeks di C #

Bahasa pemrograman C # menyertakan dukungan untuk pengindeks - fitur yang memungkinkan Anda menggunakan objek hanya sebagai array. Pengindeks juga dikenal sebagai array pintar dan dapat didefinisikan mirip dengan bagaimana properti didefinisikan. MSDN menyatakan: "Pengindeks memungkinkan instance kelas atau struct diindeks seperti array. Pengindeks menyerupai properti kecuali bahwa pengakses mengambil parameter."

Meskipun pengindeks dan properti memiliki kesamaan dalam lebih dari satu cara, ada perbedaan halus di antara keduanya. Tidak seperti properti, Anda dapat mengakses pengindeks menggunakan indeks. Ingatlah bahwa Anda perlu mengakses properti dengan menggunakan namanya. Juga, pengindeks adalah anggota instance dari sebuah kelas dan karenanya mereka tidak bisa statis. Anda dapat memiliki properti statis dan non-statis.

Cuplikan kode berikut menggambarkan bagaimana pengindeks dideklarasikan:

this [argument list]

{

  get

  {

  }

  Set

  {

  }

}

Perhatikan bahwa pengubah seperti yang ditunjukkan dalam deklarasi sintaksis pengindeks dapat bersifat pribadi, publik, dilindungi, atau internal.

Pertimbangkan kelas berikut:

public class Contact

    {

        private string[] address = new string[3];

        public string this[int index]

        {

            get

            {

                return address[index];

            }

            set

            {

                address[index] = value;

            }

        }

    }

Kelas Kontak berisi alamat bernama anggota pribadi dan mendefinisikan pengindeks. Anggota alamat adalah larik tipe string. Berikut cara membuat instance kelas Kontak dan menggunakan pengindeks.

Contact contact = new Contact();

 contact[0] = "Begumpet";

 contact[1] = "Hyderabad";

 contact[2] = "Telengana";

for (int i = 0; i < 3; i++)

Console.WriteLine (contact[i]);

Perlu dicatat bahwa Anda perlu menggunakan kata kunci "ini" untuk mendefinisikan pengindeks. Perhatikan bahwa Anda tidak dibatasi untuk hanya menggunakan bilangan bulat sebagai indeks untuk mengakses pengindeks - Anda bahkan dapat menggunakan mekanisme pencarian lain juga. Pengindeks biasanya digunakan ketika kelas Anda mewakili sebuah koleksi atau objek. Anda kemudian dapat menggunakan pengindeks untuk mengakses elemen tertentu menggunakan index.

Mari coba contoh. Pertimbangkan kelas berikut bernama Pelanggan.

public class Customer

    {

       public List Orders

        {

            get; set;

        }

       public Order this[int orderID]

        {

            get

            {

                return (from o in Orders

                        where o.OrderID == orderID

                        select o).First();

            }

        }

    }

Kelas Pelanggan mendefinisikan pengindeks dari tipe Order. Ini juga berisi properti publik yang merupakan daftar tipe Order. Berikut kelas Order untuk referensi Anda.

public class Order

    {

        public int OrderID

        {

            get; set;

        }

    }

Potongan kode berikut mengilustrasikan bagaimana Anda dapat mengakses pengindeks kelas Pelanggan untuk mengambil pesanan tertentu.

   List lstOrder = new List();

  Order o1 = new Order();

  o1.OrderID = 1;

  Order o2 = new Order();

  o2.OrderID = 2;           

  lstOrder.Add(o1);

  lstOrder.Add(o2);

  Customer customer = new Customer();

  customer.Orders = lstOrder;

  Order o = customer[1];

Lihat cuplikan kode di atas. Perhatikan bagaimana daftar umum tipe Order telah dibuat dan ditetapkan ke properti Orders dari instance kelas Pelanggan. Selanjutnya, Anda hanya meneruskan OrderId sebagai parameter untuk mengambil contoh pesanan tertentu.

Pengindeks mendukung pewarisan, bisa polimorfik dan juga bisa abstrak. Pertimbangkan kelas berikut ini yang mendefinisikan pengindeks yang virtual. Kelas ContactBase adalah versi modifikasi dari kelas Kontak yang telah kita diskusikan sebelumnya di artikel ini.

 public class ContactBase

    {

        protected string[] address = new string[3];

        public virtual string this[int index]

        {

            get

            {

                return address[index];

            }

            set

            {

                address[index] = value;

            }

        }

    }

Anda sekarang dapat memperoleh kelas dari kelas ContactBase dan mengganti pengindeks seperti yang ditunjukkan di bawah ini.

public class ConcreteContact: ContactBase

    {

       public override string this[int index]

        {

            get

            {

                return address[index];

            }

            set

            {

                address[index] = value;

            }

        }

    }

Jadi, dalam contoh kode di atas, kita mempelajari bagaimana pengindeks dapat digunakan saat mewarisi tipe dan bagaimana mereka dapat menunjukkan perilaku polimorfik.

Anda bisa juga mendefinisikan pengindeks sebagai abstrak. Untuk melakukan ini, Anda perlu membuat kelas abstrak dan kemudian mendefinisikan pengindeks sebagai abstrak di dalamnya. Mari memodifikasi kelas ContactBase dan mendefinisikan pengindeks sebagai abstrak. Berikut tampilan kelas ContactBase yang dimodifikasi sekarang:

 public abstract class ContactBase

    {

        protected string[] address = new string[3];

        public abstract string this[int index]

        {

            get; set;

        }

}

Anda tidak perlu mengubah kelas ConcreteContact. Anda sekarang dapat memanfaatkan pengindeks untuk menetapkan nilai string ke instance kelas ConcreteContact seperti yang ditunjukkan di bawah ini.

ConcreteContact contact = new ConcreteContact();

contact[0] = "Begumpet";

contact[1] = "Hyderabad";

contact[2] = "Telengana";