Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли создать объект не известного заранее класса [D7]


Очень злой ©   (2011-05-30 12:44:00) 

Сабж в том смысле, что:
Можно ли создать объект, имя класса которого хранится в переменной?

Т.е. имеется несколько классов наследников одного абстрактного класса.
нужно создать объект одного из этих классов, а какого именно должно определяться значением переменной.
Теоретически можно в переменной передавать просто число...
а при создании делать что-то типа:
case variable of
1: ob:=Tclass1.Create;
2: ob:TClass2.Create;
...

Но нельзя ли с переменной сразу хранить имя класса и на основе этого создавать объект нужного класса


DiamondShark   (2011-05-30 20:55:00) [1]


> Но нельзя ли с переменной сразу хранить имя класса и на
> основе этого создавать объект нужного класса

Допустим, до раздела "Class Reference" справку по языку было дочитать лень.
Допустим, даже не лень, а объективные обстоятельства.

Но до фабричной функции и переменной процедурного типа, хранящей ссылку на нужную фабричную функцию можно же было додуматься?


Плохиш   (2011-05-30 17:04:00) [2]


> Очень злой   (30.05.11 12:51) [2]
> синтаксис на примере не подскажете?
>
>

dpr-файл полон этих примеров.


Ega23   (2011-05-30 14:33:00) [3]


> RegistryClass


RegisterClass


icWasya   (2011-05-30 14:13:00) [4]

А так же посмотреть
RegistryClass  и FindClass


Ega23   (2011-05-30 13:32:00) [5]


> синтаксис на примере не подскажете?


TMyObject = class (TObject)
protected
 FValue: string;
public
 constructor Create; virtual;
 function Foo: string;
end;

TMyObjectClass = class of TMyObject;

TMyObject1 = class (TMyObject)
public
 constructor Create; override;
end;
   
TMyObject2 = class (TMyObject)
public
 constructor Create; override;
end;

constructor TMyObject.Create;
begin
 inherited;
end;

function TMyObject.Foo: string;
begin
 Result := FValue;
end;

constructor TMyObject1.Create;
begin
 inherited;
 FValue := 'TMyObject1';
end;

constructor TMyObject2.Create;
begin
 inherited;
 FValue := 'TMyObject2';
end;

procedure CreateAndFooObject(aObjectClass: TMyObjectClass);
begin
 with aObjectClass.Create do
   try
      ShowMessage(Foo);
   finally
     Free;
   end;
end;

procedure TForm1.Button1Click(Sender: TObejct);
begin
 CreateAndFooObject(TMyObject1);
 CreateAndFooObject(TMyObject2);
end;


Anatoly Podgoretsky   (2011-05-30 12:56:00) [6]

> Очень злой  (30.05.2011 12:44:00)  [0]

GetClass


clickmaker   (2011-05-30 12:55:00) [7]

> на примере не подскажете?

F1


Очень злой   (2011-05-30 12:51:00) [8]

синтаксис на примере не подскажете?


clickmaker   (2011-05-30 12:49:00) [9]

class of?


Наверх

Титульная страница Поиск, карта сайта Написать письмо