VBA Implements / Наследование - PullRequest
       4

VBA Implements / Наследование

0 голосов
/ 11 сентября 2018

Мне трудно понять и работать с Implements, и я не понимаю, зачем это нужно, если Наследование не поддерживается в VBA.

Я тестируюкод ниже, и я продолжаю получать сообщение об ошибке:

Ошибка компиляции:

В объектном модуле необходимо реализовать '~' для интерфейса '~'

Интерфейс: ITransmission

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

Все еще очень плохо знаком с Реализациями, и это то, чему я хочу научиться, и я провел немало исследований в этом направлении.

Вопрос 1:

Почему я получаю сообщение об ошибке при попытке выполнить модульное тестирование?

Вопрос 2:

Что такое реальноеВыгода здесь, если наследование не поддерживается?

1 Ответ

0 голосов
/ 11 сентября 2018

Вы реализуете pVENDOR, но не два VENDOR свойства.

Я предполагаю, что вы хотите, чтобы интерфейс получал / давал свойство VENDOR.

Ваш Public pVENDOR As String выглядит как вспомогательное поле для этого свойства, так как интерфейс не может включать реализацию, тогда он не нужен.

Интерфейс должен выглядеть следующим образом:

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

Какая реальная выгода здесь

Как я узнаю, когда создавать интерфейс?

Точка интерфейса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...