Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.09.11;
Скачать: 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 вся ветка

Текущий архив: 2011.09.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.007 c
15-1305915698
palva
2011-05-20 22:21
2011.09.11
Goodbye, IE6


15-1305869509
Проходящий
2011-05-20 09:31
2011.09.11
Помогите народу обыграть шахматиста :)


2-1306132376
Tirael
2011-05-23 10:32
2011.09.11
где ehlib (MemtableEh) хранит временные данные


2-1306693281
Brutalis
2011-05-29 22:21
2011.09.11
смоделировать простого робота так чтобы он двигался по заданным з


15-1305844976
Германн
2011-05-20 02:42
2011.09.11
Инструмент для анализа TCP