Страница: 1 |
Вопрос: Наследование в VBA | Добавлено: 05.06.07 19:00 |
Автор вопроса: ![]() |
Объясните, пожалуйста, как в VBA Excel реализуется механизм наследования.
Допустим, я создал модуль Class1, описал там данные, свойства и методы. И надо создать Class2 - наследник класса Class1. Как это? И как в наследнике переопределить методы? Это, если не ошибаюсь, полимрфизмом называется. Слова-то ученые я знаю, а вот как практически... расчитываю на вашу помощь. Может, здесь опишете, может, ссылку дадите, где почитать... Спасибо! |
Ответы | Всего ответов: 14 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #1 | Добавлено: 05.06.07 19:10 |
ключевое слово Implements
но, лажа полная. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #2 | Добавлено: 05.06.07 20:32 |
Ключевое слово Implements к наследованию в VBA отношения не имеет.
Ключевые слова, которые к наследованию в VBA отношение имеют - это Ctrl+C и Ctrl+V. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #3 | Добавлено: 05.06.07 20:51 |
ключевое слово для поиска Implements(инструкция) к наследованию в VBA отношение имеет.
Не меньшее отношение имеют также Ctrl+C и Ctrl+V, лежащие по значимости даже несколько выше. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #4 | Добавлено: 05.06.07 21:03 |
Реализация интерфейса и наследование -- две большие разницы. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #5 | Добавлено: 05.06.07 21:09 |
Мне знакома эта разница, я отвечал в контексте вопроса.
И как в наследнике переопределить методы?
|
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #6 | Добавлено: 05.06.07 21:13 |
Ну если только ВСЕ методы... |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #7 | Добавлено: 05.06.07 21:15 |
А по другому Implements и не может. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #8 | Добавлено: 05.06.07 22:10 |
Поэтому я и говорю -- не имеет отношения. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #9 | Добавлено: 05.06.07 22:29 |
![]() |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #10 | Добавлено: 06.06.07 02:10 |
ой, а в 2007 ? ![]() |
Номер ответа: 11 Автор ответа: ![]() ![]() Вопросов: 2 Ответов: 14 |
Профиль | Цитата | #11 | Добавлено: 06.06.07 07:19 |
А мне?
Мне что-нибудь скажете? Или: Ctrl+C, Ctrl+V - это и есть ответ? |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #12 | Добавлено: 06.06.07 08:27 |
Ctrl+C, Ctrl+V - это и есть ответ?
Совершенно верно. |
Номер ответа: 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 ТестЖивотное() ![]() 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 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #14 | Добавлено: 08.06.07 18:41 |
Кверт, прочитай всё, что уже написано мною выше.
Потому что там уже написано, что implements не имеет никакого отношения ни к наследованию, ни к полиморфизму. Полиморфизма в VBA и в VB нет вообще. Как и наследования. |
Страница: 1 |
|