Знаете ли вы, что 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 будут счастливы.
Обратите внимание, что есть штрафы за производительность во время выполнения, поскольку вы становитесь все более динамичными.
person
Community
schedule
26.02.2010
Why is Ruby "the language of the future"?
- person user   schedule 22.09.2012