Допустим, у меня есть интерфейс ITest1 , определенный:
Option Explicit
Sub it1Test(cTest As ITest1)
End Sub
А затем я создал класс CTest1 , который его реализует:
Option Explicit
Implements ITest1
Private Sub ITest1_it1Test(cTest As ITest1)
End Sub
Private Sub Test1()
Dim cT1 As CTest1
cT1 = New CTest1
ITest1_it1Test cT1
End Sub
Если я пытаюсь скомпилировать этот код, все работает отлично, что в общем-то и является тем, что я ожидаю.
Но тогда в моем не столь простом мире, вместо передачи одного элемента, я хочу передать целый массив.
Итак, мой новый интерфейс ITest2 выглядит следующим образом
Option Explicit
Sub it2Test(cTest() As ITest2)
End Sub
И класс CTest2 , реализующий его:
Option Explicit
Implements ITest1
Private Sub ITest1_it1Test(cTest() As ITest1)
End Sub
Private Sub Test2()
Dim cT2(1 To 1) As CTest2
cT2(1) = New CTest2
ITest2_it2Test cT2
End Sub
В этот раз я не могу скомпилировать с ошибкой:
Ошибка компиляции:
Несоответствие типов аргументов ByRef
с выделенным параметром cT2функции ITest2_it2Test в качестве источника ошибки.
Можно ли передать массив класса, реализующий интерфейс, если функция ожидает массив типа этого интерфейса.Другими словами, имеет ли смысл использовать интерфейс как тип параметра массива?
Я знаю, что можно использовать Variant в качестве типа массива, но это подрывает множество преимуществ, которые я получаю благодаряиспользование интерфейса.
Я не могу найти ничего, связанного с таким конкретным случаем.Я проверил количество страниц о способах реализации интерфейсов в целом (от документов MS до страницы CPearson).Я также не могу найти что-нибудь здесь, на переполнение стека.Я проверил все 78 вопросов с тегами vba и excel с интерфейсом и массивом ключевых слов и некоторыми из предложенных вопросов.