gpt4 book ai didi

excel - 接口(interface)问题

转载 作者:行者123 更新时间:2023-12-02 02:30:23 24 4
gpt4 key购买 nike

我尝试实现一个在 Excel VBA 中实现两个接口(interface)的新类,但我遇到了编译问题,因为接口(interface)的成员似乎没有在实现类中正确实现(它们不可调用)。

接口(interface)如下:

ICrawlable:

Option Explicit

Public Function GetCrawler() As ICrawler

End Function

IEquatable:

Option Explicit

Public Function Equals(CompareObject As Variant) As Boolean

End Function

ICrawlable 还包含一个返回接口(interface) ICrawler 的函数:

Option Explicit

Public Property Get CurrentItem() As Variant

End Property

Public Sub MoveNext()

End Sub

Public Function GetNext() As Variant

End Function

Public Function ItemsLeft() As Boolean

End Function

我使用这两个第一个接口(interface)创建了一个示例类InterfaceTester:

Option Explicit

Implements ICrawlable
Implements IEquatable

Private Function ICrawlable_GetCrawler() As Variant

End Function

Private Function IEquatable_Equals(CompareObject As Variant) As Boolean

End Function

当尝试在模块中或其他地方使用该类时,我没有智能感知支持。此外,代码无法编译,并且我在此模块代码中收到“未找到方法或数据成员”,突出显示 .Equals:

Sub TestInterfacing()
Dim TestInstance As InterfaceTester
Set TestInstance = New InterfaceTester

Dim VerificationInstance As InterfaceTester
Set VerificationInstance = New InterfaceTester

Dim Result As Boolean

Result = TestInstance.Equals(VerificationInstance)
End Sub

这是 VBA 中的错误吗?我是否在接口(interface)中声明了不允许的内容(我已经尝试将所有返回数据类型更改为 Variant,并尝试禁用接口(interface)的每个功能)?我是否使用保留关键字(在对象资源管理器中我没有看到接口(interface)名称的重复项)?它可以在您的机器上编译吗?

最佳答案

如果您想使用接口(interface)中的方法,则必须将变量声明为此接口(interface)类型:

Sub TestInterfacing()
Dim TestInstance As IEquatable 'InterfaceTester
Set TestInstance = New InterfaceTester

Dim VerificationInstance As InterfaceTester
Set VerificationInstance = New InterfaceTester

Dim Result As Boolean
Result = TestInstance.Equals(VerificationInstance)

End Sub

但是,在这种情况下,您不能使用此类实现的第二个接口(interface)中的方法:ICrawlable

<小时/>

这样做的原因是在 VBA 中实现方法如下所示:

Private Function ICrawlable_GetCrawler() As ICrawler

当使用其他语言的规则时,它应该如下所示:

Public Function GetCrawler() As ICrawler

VBA 无法理解这是接口(interface)方法 GetCrawler 的实现。

<小时/>

为了解决此问题,您应该向 InterfaceTester 类添加另外两个公共(public)方法 - EqualsGetCrawler。实现方法应该只针对这些方法:

InterfaceTester 类:

Implements ICrawlable
Implements IEquatable


Public Function Equals(CompareObject As Variant) As Boolean
'implementation
End Function

Public Function GetCrawler() As ICrawler
'implementation
End Function

Private Function ICrawlable_GetCrawler() As ICrawler
Set IEquatable_Equals = GetCrawler
End Function

Private Function IEquatable_Equals(CompareObject As Variant) As Boolean
IEquatable_Equals = Equals(CompareObject)
End Function

现在您可以将变量 TestInstance 声明为 InterfaceTester 类并使用两个接口(interface)中的方法。

关于excel - 接口(interface)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34136745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com