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

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

← →
Очень злой   (2011-05-30 12:44) [0]

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

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

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


← →
clickmaker ©   (2011-05-30 12:49) [1]

class of?


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

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


← →
clickmaker ©   (2011-05-30 12:55) [3]

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

F1


← →
Anatoly Podgoretsky ©   (2011-05-30 12:56) [4]

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

GetClass


← →
Ega23 ©   (2011-05-30 13:32) [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;


← →
icWasya ©   (2011-05-30 14:13) [6]

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


← →
Ega23 ©   (2011-05-30 14:33) [7]


> RegistryClass


RegisterClass


← →
Плохиш ©   (2011-05-30 17:04) [8]


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

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


← →
DiamondShark ©   (2011-05-30 20:55) [9]


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

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

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



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

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



Память: 0.47 MB
Время: 0.007 c
2-1304775275
Alexlafa
2011-05-07 17:34
2011.09.11
Программирование базы данных MS Access в Delphi 7


1-1264840225
tek
2010-01-30 11:30
2011.09.11
Как можно нарисовать progress bar в dbgrid е ?


6-1241442332
TN_TN
2009-05-04 17:05
2011.09.11
Delpi - связь через модем


2-1306312189
kirat
2011-05-25 12:29
2011.09.11
TreeView Цветные строки


15-1305707691
Пося
2011-05-18 12:34
2011.09.11
Помогите перевести на английский?




   Наверх