Интерфейсы и индексаторы

У меня есть интерфейс, который используется следующим образом:

var descr = new IMyInterface[3];

На первый взгляд я подумал, что это не имеет никакого смысла, поскольку похоже, что создается интерфейс (что невозможно). Поэтому я думаю, что это, вероятно, вызов Indexer, определенного в интерфейсе, но я все еще не совсем понимаю, как это работает. Итак, мой вопрос:

  1. Что делает этот звонок? Это вызывает индексатор, определенный в интерфейсе?
  2. Какая реализация индексатора интерфейса используется?

Спасибо за помощь:)

2 ответа

Решение

Вы создаете массив из 3 IMyInterface... но каждый элемент является нулем в массиве.

Это создает массив IMyInterface с тремя элементами. то есть IMyInterface[], Это просто обычный new T[n] синтаксис для создания массива, ничем не отличается от new int[3],

Концептуально это что-то похожее на new Array<IMyInterface>(3)за исключением того, что массив не является универсальным типом по историческим причинам.

Массив - это конкретный класс, поэтому вы можете создать его экземпляр, даже если тип члена является интерфейсом. Члены будут инициализированы в default(T) который null для интерфейсов.

Это не связано с индексаторами.


Можно определить индексаторы на интерфейсах так же, как вы можете сделать это на классах. Но синтаксис их использования не предполагает new,

Также возможно создавать экземпляры интерфейсов в определенных связанных с COM сценариях.

Другие вопросы по тегам