Bagikan melalui


Pengindeks di Antarmuka (Panduan Pemrograman C#)

Pengindeks dapat dideklarasikan pada antarmuka. Pengakses pengindeks antarmuka berbeda dari pengakses pengindeks kelas terkait hal-hal berikut:

  • Aksesor antarmuka tidak menggunakan pengubah.
  • Aksesor antarmuka biasanya tidak memiliki isi.

Tujuan pengakses adalah menunjukkan jika pengindeks adalah baca-tulis, baca-saja, atau tulis-saja. Anda dapat memberikan implementasi untuk pengindeks yang ditentukan dalam antarmuka, tetapi ini jarang terjadi. Pengindeks biasanya menentukan API untuk mengakses bidang data, dan bidang data tidak dapat ditentukan dalam antarmuka.

Berikut ini adalah contoh pengakses pengindeks antarmuka:

public interface ISomeInterface
{
    //...

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

Tanda tangan pengindeks harus berbeda dari tanda tangan semua pengindeks lain yang dinyatakan dalam antarmuka yang sama.

Contoh

Contoh berikut menunjukkan cara menerapkan pengindeks antarmuka.

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

// Implementing the interface.
class IndexerClass : IIndexInterface
{
    private int[] arr = new int[100];
    public int this[int index]   // indexer declaration
    {
        // The arr object will throw IndexOutOfRange exception.
        get => arr[index];
        set => arr[index] = value;
    }
}
IndexerClass test = new IndexerClass();
System.Random rand = System.Random.Shared;
// 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 #{i} = {test[i]}");
}

/* 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
*/

Dalam contoh sebelumnya, Anda dapat menggunakan implementasi anggota antarmuka eksplisit dengan menggunakan nama anggota antarmuka yang sepenuhnya memenuhi syarat. Misalnya

string IIndexInterface.this[int index]
{
}

Namun, nama yang sepenuhnya memenuhi syarat hanya diperlukan untuk menghindari ambiguitas ketika kelas menerapkan lebih dari satu antarmuka dengan tanda tangan pengindeks yang sama. Misalnya, jika kelas Employee menerapkan dua antarmuka, ICitizen dan IEmployee, serta kedua antarmuka memiliki tanda tangan pengindeks yang sama, implementasi anggota antarmuka eksplisit akan diperlukan. Yaitu, deklarasi pengindeks berikut:

string IEmployee.this[int index]
{
}

Menerapkan pengindeks pada IEmployee antarmuka, sementara deklarasi berikut:

string ICitizen.this[int index]
{
}

Mengimplementasikan pengindeks pada ICitizen antarmuka.

Lihat juga