Форум: "Начинающим";
Текущий архив: 2009.05.24;
Скачать: [xml.tar.bz2];
ВнизRTTI и конструктор класса Найти похожие ветки
← →
Индеец (2009-04-11 17:48) [0]Здравствуйте.
Есть первый класс:T1=class (TPersistent)
public
constructor create;
...........
У него есть конструктор, в котором выполняется ряд действий.
Есть его наследникT2=class(T1)
public
constructor create;
.......
constructor T2.create;
begin
inherited;
end;
В неком третьем классе создается экземпляр наследника:
Fobject:Tobject;
......
procedure T3.setnameclass(value: string);
var temp:TPersistentClass;
begin
temp:=GetClass(value);
if temp<>nil then
begin
if Assigned(FObject) then
FObject.Free;
FObject:=temp.create;
end;
end;
Ему в параметрах передается "T2" и экземпляр этого класса в этом методе успешно создается. Но есть вопрос: почему приFObject:=temp.create;
, где temp уже является `T2` не выполняется конструктор класса T2 ?
← →
Григорьев Антон © (2009-04-11 18:06) [1]Для этого нужно, чтобы конструктор был виртуальным, как у TComponent и его наследников, в противном случае компилятор выбирает конструктор по типу переменной temp, а не по её значению. И тип temp должен быть не TPersistentObject, а ссылкой на тот класс, где конструктор уже объявлен виртуальным.
← →
Индеец (2009-04-11 18:17) [2]Переписал так:
T1=class (TPersistent)
public
constructor create;virtual;
......T2=class(T1)
public
constructor create;override;
.......
constructor T2.create;
begin
inherited create;
end;Fobject:Tobject;
......
procedure T3.setnameclass(value: string);
var temp:TPersistentClass;
begin
temp:=GetClass(value);
if temp<>nil then
begin
if Assigned(FObject) then
FObject.Free;
FObject:=temp.create;
end;
end;
но немного не понял как именно надо переписать с
> ссылкой на тот класс, где конструктор уже объявлен виртуальным.
Ведь мы же не знаем какой именно класс будет в temp ? подскажите пожалуйста на примере этого кода
← →
Григорьев Антон © (2009-04-11 18:47) [3]Надо объявить тип TT1class = class of T1; и именно его использовать при объявлении temp вместо TPersistentClass.
← →
Индеец (2009-04-11 19:17) [4]Большое спасибо, разобрался.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.05.24;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c