![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли создать объект не известного заранее класса [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?