Arabirimlerdeki Dizin Oluşturucular (C# Programlama Kılavuzu)

Dizin oluşturucular bir arabirimde bildirilebilir. Arabirim dizin oluşturucularının erişimcileri, sınıf dizin oluşturucularının erişimcilerinden aşağıdaki yollarla farklıdır:

  • Arabirim erişimcileri değiştirici kullanmaz.
  • Arabirim erişimcisinde genellikle gövde yoktur.

Erişimcinin amacı, dizin oluşturucunun salt okunur mu yoksa salt okunur mu olduğunu belirtmektir. Bir arabirimde tanımlanan bir dizin oluşturucu için bir uygulama sağlayabilirsiniz, ancak bu nadirdir. Dizin oluşturucular genellikle veri alanlarına erişmek için bir API tanımlar ve veri alanları bir arabirimde tanımlanamaz.

Aşağıda bir arabirim dizin oluşturucu erişimcisi örneği verilmiştir:

public interface ISomeInterface
{
    //...

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

Bir dizin oluşturucunun imzası, aynı arabirimde bildirilen diğer tüm dizin oluşturucuların imzalarından farklı olmalıdır.

Örnek

Aşağıdaki örnekte arabirim dizin oluşturucularının nasıl uygulanacakları gösterilmektedir.

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

Yukarıdaki örnekte, arabirim üyesinin tam adını kullanarak açık arabirim üyesi uygulamasını kullanabilirsiniz. Örneğin:

string IIndexInterface.this[int index]
{
}

Ancak, tam ad yalnızca sınıf aynı dizin oluşturucu imzasına sahip birden fazla arabirim uygularken belirsizlikten kaçınmak için gereklidir. Örneğin, bir Employee sınıf ve olmak üzere iki arabirim ICitizen uyguluyorsa ve IEmployeeher iki arabirim de aynı dizin oluşturucu imzaya sahipse, açık arabirim üyesi uygulaması gereklidir. Yani, aşağıdaki dizin oluşturucu bildirimi:

string IEmployee.this[int index]
{
}

dizin oluşturucuyu arabirimde IEmployee uygularken aşağıdaki bildirimi uygular:

string ICitizen.this[int index]
{
}

arabiriminde dizin oluşturucuyu ICitizen uygular.

Ayrıca bkz.