![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Есть следующий синтаксис:
Код:
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
|
|||
|
|||
![]() делается так
Код:
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
|
|||
|
|||
![]() По-моему, не так...
Код:
TBaseClass = CLASS OF TBase; Далее, TBaseClass и TBase.Classtype несовместимі. |
#4
|
|||
|
|||
![]() Цитата:
Код:
myclass := TBase(p_myvar.ClassType); |
#5
|
|||
|
|||
![]() Цитата:
|
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
$Romasss$ (19.11.2014)
|
#6
|
|||
|
|||
![]() Ті хотел сказать
myclass := TBaseClass(p_myvar.ClassType); ну ок, попробуем статическое приведение... Цитата:
Цитата:
Проканало!!! Последний раз редактировалось M.A.D.M.A.N., 19.11.2014 в 21:35. |