Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.09.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
Очень злой   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
15-1306171234
ов (дом)
2011-05-23 21:20
2011.09.11
поможете с английским, а?


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


3-1263916115
vdstud
2010-01-19 18:48
2011.09.11
Обмен данными между двумя файлами Access


2-1305642710
Алеша
2011-05-17 18:31
2011.09.11
Работа с txt


15-1306012234
Германн
2011-05-22 01:10
2011.09.11
Настройки IDE Delphi2007





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский