Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Наследование в VBA
     
    
Добавлено: 05.06.07 19:00
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
     Кверт
 Кверт
      
       
  
Объясните, пожалуйста, как в VBA Excel реализуется механизм наследования.
 
    
Допустим, я создал модуль Class1, описал там данные, свойства и методы.
И надо создать Class2 - наследник класса Class1.
Как это?
И как в наследнике переопределить методы? Это, если не ошибаюсь, полимрфизмом называется.
Слова-то ученые я знаю, а вот как практически... расчитываю на вашу помощь.
Может, здесь опишете, может, ссылку дадите, где почитать...
Спасибо!
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 14
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа: EUGY
 EUGY





Вопросов: 0
Ответов: 454
      
 Профиль |  | #1
       
Добавлено:  05.06.07 19:10
       
    
       
  
ключевое слово Implements
 
    
но, лажа полная.
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа: GSerg
 GSerg


Вопросов: 0
Ответов: 1876 
      
 Профиль |  | #2
       
Добавлено:  05.06.07 20:32
       
    
       
  
Ключевое слово Implements к наследованию в VBA отношения не имеет.
 
    
Ключевые слова, которые к наследованию в VBA отношение имеют - это Ctrl+C и Ctrl+V.
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа: EUGY
 EUGY





Вопросов: 0
Ответов: 454
      
 Профиль |  | #3
       
Добавлено:  05.06.07 20:51
       
    
       
  
ключевое слово для поиска Implements(инструкция) к наследованию в VBA отношение имеет.
 
    
Не меньшее отношение имеют также Ctrl+C и Ctrl+V, лежащие по значимости даже несколько выше.
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа: GSerg
 GSerg


Вопросов: 0
Ответов: 1876 
      
 Профиль |  | #4
       
Добавлено:  05.06.07 21:03
       
    
       
  
Реализация интерфейса и наследование -- две большие разницы.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа: EUGY
 EUGY





Вопросов: 0
Ответов: 454
      
 Профиль |  | #5
       
Добавлено:  05.06.07 21:09
       
    
       
  
Мне знакома эта разница, я отвечал в контексте вопроса.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа: GSerg
 GSerg


Вопросов: 0
Ответов: 1876 
      
 Профиль |  | #6
       
Добавлено:  05.06.07 21:13
       
    
       
  
Ну если только ВСЕ методы...
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа: EUGY
 EUGY





Вопросов: 0
Ответов: 454
      
 Профиль |  | #7
       
Добавлено:  05.06.07 21:15
       
    
       
  
А по другому Implements и не может.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа: GSerg
 GSerg


Вопросов: 0
Ответов: 1876 
      
 Профиль |  | #8
       
Добавлено:  05.06.07 22:10
       
    
       
  
Поэтому я и говорю -- не имеет отношения.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 9 
      
Автор ответа: EUGY
 EUGY





Вопросов: 0
Ответов: 454
      
 Профиль |  | #9
       
Добавлено:  05.06.07 22:29
       
    
       
  
 
     
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа: HACKER
 HACKER








 
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
      
 Профиль |  | #10
       
Добавлено:  06.06.07 02:10
       
    
       
  
ой, а в 2007 ?  
     Там же вроде VBA подвергся значительным изменениям, неужели нормального наследования не сделали?
 Там же вроде VBA подвергся значительным изменениям, неужели нормального наследования не сделали?
		
	  
			 
	
		 
    
       
    
Номер ответа: 11 
      
Автор ответа: Кверт
 Кверт

Вопросов: 2
Ответов: 14
      
 Профиль |  | #11
       
Добавлено:  06.06.07 07:19
       
    
       
  
А мне?
 
    
Мне что-нибудь скажете?
Или: Ctrl+C, Ctrl+V - это и есть ответ?
		
	  
			 
	
		 
    
       
    
Номер ответа: 12 
      
Автор ответа: GSerg
 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 Животное
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
 GSerg


Вопросов: 0
Ответов: 1876 
      
 Профиль |  | #14
       
Добавлено:  08.06.07 18:41
       
    
       
  
Кверт, прочитай всё, что уже написано мною выше.
 
    
Потому что там уже написано, что implements не имеет никакого отношения ни к наследованию, ни к полиморфизму.
Полиморфизма в VBA и в VB нет вообще. Как и наследования.