我很难理解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:
如果不支持继承,这里的真正好处是什么?
答案 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
这有什么真正的好处