VBA实现/继承

时间:2018-09-11 15:55:16

标签: excel excel-vba interface

我很难理解Implements并与ITransmission一起工作,而且我不明白为什么如果VBA不支持继承的话,为什么这样做有用。

我正在测试下面的代码,并且不断收到错误消息:

  

编译错误:

     

对象模块需要为接口“〜”实现“〜”

界面: Option Explicit Public pVENDOR As String Public Property Get VENDOR() As String End Property Public Property Let VENDOR(ByVal value As String) End Property

cASN

基类: Option Explicit Implements ITransmission Private Property Let ITransmission_pVENDOR(ByVal value As String) pVENDOR = value End Property Private Property Get ITransmission_pVENDOR() As String ITransmission_pVENDOR = pVENDOR End Property

mUnitTesting

单元测试方法: Private Sub Test_cASN() Dim foo As cASN Set foo = New cASN foo.VENDOR = "Test" End Sub

D1

对于Implements还是很新的东西,这是我想学习的东西,并且我已经对其进行了大量研究。

问题1:

为什么在尝试进行单元测试时会收到错误消息?

问题2:

如果不支持继承,这里的真正好处是什么?

1 个答案:

答案 0 :(得分:1)

您实现pVENDOR,但不实现两个VENDOR属性。

我假设您希望接口是VENDOR属性的获取/获取。

您的Public pVENDOR As String看起来像是此属性的后备字段,因为Interface无法包含实现,因此不需要它。

界面应如下所示:

Public Property Get VENDOR() As String
End Property

Public Property Let VENDOR(ByVal value As String)
End Property

然后在实现它时:

Implements ITransmission

Private pVENDOR As String '// local implementation detail

Public Property Let ITransmission_VENDOR(ByVal value As String)
    pVENDOR = value
End Property

Public Property Get ITransmission_VENDOR() As String
    ITransmission_VENDOR = pVENDOR
End Property

并进行测试:

Private Sub Test_cASN()

   Dim foo As cASN

   Set foo = New cASN

   foo.ITransmission_VENDOR = "Test"

End Sub

这有什么真正的好处

How will I know when to create an interface?

The point of an Interface