当函数/过程期望使用接口类型化的数组时,传递使用实现接口的类的类型化的数组?

时间:2018-11-27 19:10:07

标签: arrays excel vba parameters interface

假设我定义了一个接口 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参数类型不匹配

突出显示了函数ITest2_it2Test的cT2参数作为错误源。

如果函数需要该接口类型的数组,是否可以通过任何方法传递实现该接口的类的数组。换句话说,使用接口作为数组参数的类型有意义吗?

我知道可以将Variant用作数组类型,但是由于使用了接口,它破坏了我所拥有的很多好处。

我找不到与这种特定情况有关的任何东西。我已经检查了有关实现接口的方法的页面数(从MS文档到CPearson页面)。我在堆栈溢出中也找不到任何内容。我已经检查了标记为vba和excel的所有78个问题,并使用了关键字interface和array以及一些建议的问题。

0 个答案:

没有答案