Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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
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 ТестЖивотное()
    ;Dim 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 нет вообще. Как и наследования.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам