Страница: 1 |
Страница: 1 |
Вопрос: Наследование в VBA
Добавлено: 05.06.07 19:00
Автор вопроса:
Кверт
Объясните, пожалуйста, как в VBA Excel реализуется механизм наследования.
Допустим, я создал модуль Class1, описал там данные, свойства и методы.
И надо создать Class2 - наследник класса Class1.
Как это?
И как в наследнике переопределить методы? Это, если не ошибаюсь, полимрфизмом называется.
Слова-то ученые я знаю, а вот как практически... расчитываю на вашу помощь.
Может, здесь опишете, может, ссылку дадите, где почитать...
Спасибо!
Ответы
Всего ответов: 14
Номер ответа: 1
Автор ответа: EUGY
Вопросов: 0
Ответов: 454
Профиль | | #1
Добавлено: 05.06.07 19:10
ключевое слово Implements
но, лажа полная.
Номер ответа: 2
Автор ответа: GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #2
Добавлено: 05.06.07 20:32
Ключевое слово Implements к наследованию в VBA отношения не имеет.
Ключевые слова, которые к наследованию в VBA отношение имеют - это Ctrl+C и Ctrl+V.
Номер ответа: 3
Автор ответа: EUGY
Вопросов: 0
Ответов: 454
Профиль | | #3
Добавлено: 05.06.07 20:51
ключевое слово для поиска Implements(инструкция) к наследованию в VBA отношение имеет.
Не меньшее отношение имеют также Ctrl+C и Ctrl+V, лежащие по значимости даже несколько выше.
Номер ответа: 4
Автор ответа: GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #4
Добавлено: 05.06.07 21:03
Реализация интерфейса и наследование -- две большие разницы.
Номер ответа: 5
Автор ответа: EUGY
Вопросов: 0
Ответов: 454
Профиль | | #5
Добавлено: 05.06.07 21:09
Мне знакома эта разница, я отвечал в контексте вопроса.
Номер ответа: 6
Автор ответа: GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #6
Добавлено: 05.06.07 21:13
Ну если только ВСЕ методы...
Номер ответа: 7
Автор ответа: EUGY
Вопросов: 0
Ответов: 454
Профиль | | #7
Добавлено: 05.06.07 21:15
А по другому Implements и не может.
Номер ответа: 8
Автор ответа: GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #8
Добавлено: 05.06.07 22:10
Поэтому я и говорю -- не имеет отношения.
Номер ответа: 9
Автор ответа: EUGY
Вопросов: 0
Ответов: 454
Профиль | | #9
Добавлено: 05.06.07 22:29
Номер ответа: 10
Автор ответа: HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #10
Добавлено: 06.06.07 02:10
ой, а в 2007 ?
Там же вроде VBA подвергся значительным изменениям, неужели нормального наследования не сделали?
Номер ответа: 11
Автор ответа: Кверт
Вопросов: 2
Ответов: 14
Профиль | | #11
Добавлено: 06.06.07 07:19
А мне?
Мне что-нибудь скажете?
Или: Ctrl+C, Ctrl+V - это и есть ответ?
Номер ответа: 12
Автор ответа: GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #12
Добавлено: 06.06.07 08:27
Совершенно верно.
Номер ответа: 13
Автор ответа: Кверт
Вопросов: 2
Ответов: 14
Профиль | | #13
Добавлено: 08.06.07 17:42
Пример реализации полиморфизма в VBA
1) Создал модуль класса под именем Животное. Определил в нем процедуру:
Public Sub ПереопределяемыйМетод()
MsgBox "Животное"
End Sub
2) Создал модуль класса под именем Собака. И переопределил в нем процедуру:
Implements Животное
Public Sub Животное_ПереопределяемыйМетод()
MsgBox "Собака"
End Sub
3) Создал модуль класса под именем Кошка. И переопределил в нем процедуру:
Implements Животное
Public Sub Животное_ПереопределяемыйМетод()
MsgBox "Кошка"
End Sub
4) Для тестирования в модуле общего назначения ввел и выполнил процедуру:
Public Sub ТестЖивотное()
 im a As Животное
Set a = New Животное
a.ПереопределяемыйМетод
Set a = New Собака
a.ПереопределяемыйМетод
Set a = New Кошка
a.ПереопределяемыйМетод
End Sub
Работает!
--------------------------
Теперь поближе к реальности.
В Животном определяю еще одну процедуру, которая будет одинаковая и для Собаки и для Кошки, например:
Public Sub Метод()
MsgBox "Метод, который не требуется переопределять ни в Собаке ни в Кошке"
End Sub
В этом случае при попытке выполнить ТестЖивотное выдается сообщение:
«Object module needs to implement ‘Метод’ for interface ‘Животное’»
и при этом выделяется строка:
Implements Животное
Как я понимаю, компилятор настаивает на переопределении Метода в Собаке и в Кошке.
Но мне это не надо!!!!
Чтобы сообщение не выдавалось, создал копию Метода и в Собаке и в Кошке.
Согласитесь, Ctrl+C и Ctrl+V это не очень красиво!
Если другого способа, более красивого, никто мне не предложит, то придется сделать следующий вывод:
Полиморфизм в VBA есть, но он должен быть полным, потому что наследования нет!
Номер ответа: 14
Автор ответа: GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #14
Добавлено: 08.06.07 18:41
Кверт, прочитай всё, что уже написано мною выше.
Потому что там уже написано, что implements не имеет никакого отношения ни к наследованию, ни к полиморфизму.
Полиморфизма в VBA и в VB нет вообще. Как и наследования.