Интерфейсы и индексаторы
У меня есть интерфейс, который используется следующим образом:
var descr = new IMyInterface[3];
На первый взгляд я подумал, что это не имеет никакого смысла, поскольку похоже, что создается интерфейс (что невозможно). Поэтому я думаю, что это, вероятно, вызов Indexer, определенного в интерфейсе, но я все еще не совсем понимаю, как это работает. Итак, мой вопрос:
- Что делает этот звонок? Это вызывает индексатор, определенный в интерфейсе?
- Какая реализация индексатора интерфейса используется?
Спасибо за помощь:)
2 ответа
Вы создаете массив из 3 IMyInterface
... но каждый элемент является нулем в массиве.
Это создает массив IMyInterface
с тремя элементами. то есть IMyInterface[]
, Это просто обычный new T[n]
синтаксис для создания массива, ничем не отличается от new int[3]
,
Концептуально это что-то похожее на new Array<IMyInterface>(3)
за исключением того, что массив не является универсальным типом по историческим причинам.
Массив - это конкретный класс, поэтому вы можете создать его экземпляр, даже если тип члена является интерфейсом. Члены будут инициализированы в default(T)
который null
для интерфейсов.
Это не связано с индексаторами.
Можно определить индексаторы на интерфейсах так же, как вы можете сделать это на классах. Но синтаксис их использования не предполагает new
,
Также возможно создавать экземпляры интерфейсов в определенных связанных с COM сценариях.