Вниз
Скачать: CL | DM;

создание экземпляров класса по его наименованию.   Найти похожие ветки 

← →
Vitalik   (2004-07-08 13:01) [0]

Привет!
У меня есть базовый класс, например TMyClass. У него есть несколько потомков. НАпример TMyClass1 = class(TMyClass), TMyClass2 = class(TMyClass), TMyClass3 = class(TMyClass) и т.д.

TMyClass абстрактный. Потомки загружаются из файла.
Мне нужно, чтобы в файле, кроме свойств самих классов также хранилась информация о том, какой это из наследников. Например, в виде строки типа "TMyClass1".
Потомки должны создаваться как экземпляры того или иного класса непосредственно перед считыванием из файла всех свойств.

То есть, если в файле написано, что сохранён экземпляр класса "TMyClass1", то сначала создавался бы экземпляр именно этого класса, а потом уж загружались все его свойства.

Я понимаю, что можно это всё сделать при помощи оператора case. Но интересен другой подход.
Например, что-то такое.

function createClass(AClassName: String): TMyClass;
var
c: TClass;
My: TMyClass;

begin
c: =FindClass(AClassName);
My := c.create;
result := my;
end;

Ну вот как-то так. Потому что наследников будет много, и хочется это дело автоматизировать.
Спасибо!


← →
Тимохов ©   (2004-07-08 13:06) [1]

посмотри в f1
registerclass findclass


← →
cae ©   (2004-07-08 15:27) [2]

procedure TForm1.BitBtn2Click(Sender: TObject);
var
Reference : TComponentClass;
Tc : TComponent ;
Class_ :  TClass;
begin

 Class_ := GetClass("TEdit");
 if Class_ = nil then
 begin
   ShowMessage("Класс не зарегистрирован !") ;
   // чтобы этого не происходило, нужно ранее указать -   RegisterClass(TEdit);
   exit ;
 end ; // if Class_ = nil

 Reference := TComponentClass(Class_);
 Tc := Reference.Create(Self) ;

 if Tc is TControl then
 with TC as TControl do
 begin
  Parent := Self ;
  Left := 10;
  Top := 10 ;
 end // with
end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: -0.979 c
14-1089287372
Igorek
2004-07-08 15:49
2004.07.25
LMD or not LMD? - that is the question


3-1088611609
GanibalLector
2004-06-30 20:06
2004.07.25
СЕРВЕР упал?


3-1088677826
Lord
2004-07-01 14:30
2004.07.25
Delphi6 - SQL


14-1088805576
Sanek_metaller
2004-07-03 01:59
2004.07.25
Кто-нить качал клипы с нета?


14-1089199366
Nein
2004-07-07 15:22
2004.07.25
как догнать двух зайцев?




   Наверх