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ı 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 IEmployee
her 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]
{
}
Arabirimde dizin oluşturucuyu ICitizen
uygular.