Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Узнать имя наследника из базового класса (число прочтений - 3087 )
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Узнать имя наследника из базового класса
13. Июля 2009 :: 15:37
Печать  
Есть у меня некий класс - от которого наследуется куча классов. И вот захотелось мне проверить вызов определенного метода базового класса внутри классов наследников. Вернее узнать - кто вызывает, а кто нет.  

Но как не кручусь, и сообщить("Вызов из "+вирт()) и тоже с сам(контекст) и я() и //#currmeth, но получаю лишь имя базового класса (в котором и прописан вызов трассировочного метода).

Я конечно извратился, и через вирт().ПолучитьПуть() получаю имя класса наследника, но ИМХО это какой то нештатный метод Улыбка

Вроде раньше так не было...
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Узнать имя наследника из базового класса
Ответ #1 - 14. Июля 2009 :: 05:27
Печать  
Проверил, все должно работать.
Метод в базовом классе:

Код
Выбрать все
Процедура КтоЯ() Экспорт
	Message(This());
КонецПроцедуры
 



выдает "правильные" результаты.
  
Наверх
 
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Узнать имя наследника из базового класса
Ответ #2 - 14. Июля 2009 :: 09:15
Печать  
Да, присмотрелся внимательно -  имеет место частный случай. Данная конструкция не работает только в деструкторе  Злой
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Узнать имя наследника из базового класса
Ответ #3 - 14. Июля 2009 :: 09:51
Печать  
Тогда не совсем понял первоначальную задачу. Ты хотел узнать, из какого именно класса наследника вызвался Деструктор базового класса?

Правильный ответ - ни из какого.
  
Наверх
www  
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Узнать имя наследника из базового класса
Ответ #4 - 14. Июля 2009 :: 10:08
Печать  
Я хотел узнать все ли созданные объекты уничтожаются по деструктору (в поисках циклических ссылок).

Для упрощения я юзаю счетчик созданных/уничтоженных объектов в общем предке классов.
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Узнать имя наследника из базового класса
Ответ #5 - 14. Июля 2009 :: 10:21
Печать  
Деструктор - это такая вещь, которая в принципе ничего не знает о наследниках. Ибо когда вызывается деструктор - все наследники уже должны быть уничтожены.

"Для упрощения" не получится, пиши трассировку в деструкторы всех классов, удаление которых ты хочешь отследить, только так ты получишь достоверные данные.
  
Наверх
www  
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Узнать имя наследника из базового класса
Ответ #6 - 14. Июля 2009 :: 10:37
Печать  
fez писал(а) 14. Июля 2009 :: 10:21:
Деструктор - это такая вещь, которая в принципе ничего не знает о наследниках. Ибо когда вызывается деструктор - все наследники уже должны быть уничтожены.


Вот этого не знал. Теперь понял свою ошибку - спасибо !
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать