Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.11.2014, 15:53
icegood icegood вне форума
Прохожий
 
Регистрация: 17.03.2013
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию Class по переменной

Есть следующий синтаксис:

Код:
TBase = CLASS(TPersistent)
...
END;

TBaseClass = CLASS OF TBase;

TDesc1 = CLASS(TBase)
...
END;

TDesc2 = CLASS(TBase)
...
END;

procedure(p_myvar : TBase);
var
  myclass  : TBaseClass;
begin
  myclass  := f(p_myvar);
end;

Как в рантайме правильно вічислить myclass по p_myvar, если неизвестно, какому TDesc<n> p_myvar принадлежит?
Нужно для создания нового обьекта по трафарету p_myvar, все Assign
методі переопределені корректно.
Ответить с цитированием
  #2  
Старый 18.11.2014, 16:48
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

делается так
Код:
TBase = CLASS(TPersistent)
...
constructor Create;virtual;
END;

//если будет нетривиальный конструктор,то
TDesc2 = CLASS(TBase)
...
constructor Create;override;
END;

procedure(p_myvar : TBase);
var
  myclass  : TBaseClass;
  myvar  : TBase;
begin
  myclass  := p_myvar.ClassType;
  myvar:=myclass.Create();
end;
Ответить с цитированием
  #3  
Старый 18.11.2014, 17:15
icegood icegood вне форума
Прохожий
 
Регистрация: 17.03.2013
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

По-моему, не так...

Код:
TBaseClass = CLASS OF TBase;
- єто центральная строка, благодаря которой можно візівать виртуальній конструктор

Далее, TBaseClass и TBase.Classtype несовместимі.
Ответить с цитированием
  #4  
Старый 18.11.2014, 17:51
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Цитата:
TBaseClass и TBase.Classtype несовместимы.
Сегодня 16:48
вот так получится

Код:
myclass  := TBase(p_myvar.ClassType);
Ответить с цитированием
  #5  
Старый 18.11.2014, 17:52
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Цитата:
это центральная строка, благодаря которой можно візівать виртуальный конструктор
Главное, что бы он был
Ответить с цитированием
Этот пользователь сказал Спасибо icWasya за это полезное сообщение:
$Romasss$ (19.11.2014)
  #6  
Старый 19.11.2014, 19:24
icegood icegood вне форума
Прохожий
 
Регистрация: 17.03.2013
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

Ті хотел сказать
myclass := TBaseClass(p_myvar.ClassType);

ну ок, попробуем статическое приведение...

Цитата:
Сообщение от icWasya
Главное, что бы он был
Он и без того есть, не в єтом вопрос

Цитата:
Сообщение от icegood
Ті хотел сказать
myclass := TBaseClass(p_myvar.ClassType);

ну ок, попробуем статическое приведение...

Проканало!!!

Последний раз редактировалось M.A.D.M.A.N., 19.11.2014 в 21:35.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025