首页 > 解决方案 > 当函数/过程需要使用接口类型的数组时,传递使用实现接口的类类型的数组?

问题描述

假设我定义了一个接口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 页面)。我在 Stack Overflow 上也找不到任何东西。我用关键字 interface 和 array 以及一些建议的问题检查了所有 78 个标记为 vba 和 excel 的问题。

标签: arraysexcelvbaparametersinterface

解决方案


推荐阅读