Знаете ли вы, что VB6 одновременно статичен и динамичен?
Если вы объявляете переменные с заданным типом, вы получаете статическое поведение:
Dim name as Label
Теперь вы можете получить доступ только к тем членам с именем, которые Label
s, и intellisense это знает.
Если у вас есть класс и добавлено ключевое слово implements
, тогда ваш класс может реализовывать методы другого класса. Это наследование интерфейса, которое позволяет VB6. Вы можете получить некоторое время полиморфизма.
Вы также можете объявить переменные следующим образом:
Dim proxy As Object
Теперь intellisense вам не поможет, а VB6 позволит вам делать все, что угодно с proxy
:
proxy.foo()
Эта строка может находиться внутри скомпилированной и запущенной программы и не вызывать обид, особенно если она не запускается сама. Поиск выполняется только при запуске линии.
Вы также можете выполнить:
set proxy = <any instance>
и это запустится. Не имеет значения, есть ли у <any instance>
метод foo
или нет.
И тогда может быть назначен любой экземпляр любого класса, который реализует foo
, и вызванный метод и VB6 будут счастливы.
Обратите внимание, что по мере того, как вы становитесь все более динамичными, за производительность выявляются потери производительности.