Это очень старый вопрос, но я наткнулся на него сегодня, и, немного поработав над ним, я думаю, что оба предыдущих ответа либо неверны, либо не отвечают непосредственно на вопрос, так что вот мое решение сделать то, что ОП хотел.
Во-первых, позвольте мне сказать, что оба ваших класса IBaseInfo
и clsRate5pt
правильно определены для того, чего вы хотите достичь (поэтому я не буду воспроизводить их код здесь).
И да, вы можете использовать интерфейс в VBA, чтобы делать то, что вы хотите: гарантировать, что несколько классов предоставляют один и тот же базовый набор свойств, функций или методов (каждый из которых реализован по-своему).
Теперь, что не хватает, так это правильное определение и создание объекта:
Sub TestIFace()
' Define the object you want to use polymorphically,
' by using the interface you want to implement
Dim oInfo As IBaseInfo
'// Instantiate the object by the concrete class you want to use
Set oInfo = new clsRate5pt
' Finally, access the properties, methods or functions
oInfo.LocationData = ...
oInfo.ReferenceDate = ...
End Sub
Теперь вы можете создавать другие классы, которые реализуют IBaseInfo
и просто заменяют имя класса в строке
Set oInfo = new ...
для получения новой бизнес-логики для объекта oInfo
.
Поймите, однако, что, поскольку oInfo
имеет тип IBaseInfo
, вы можете использовать только свойства, функции или методы, определенные в IBaseInfo
. Вы можете привести oInfo
к clsRate5pt
для доступа к дополнительным функциональным возможностям, исключая этот класс, но это увеличит сцепление вашего кода и может в первую очередь победить цель определения интерфейса, который заключается в возможности переключения специфическая бизнес-логика очень легко.