Юрий писал(а):Я считаю что это бага в FP
так как вся суть и прелесть использования Типа_ссылки_на_класс теряется
Не понятно, в чем баг-то? Использовать
TClass для создания экземпляра класса использующего делегацию, по сути, явная ошибка.
Да, можно было бы в реализации
FPC-го
TList-а использовать проверку на
nil, но что это даст? Не даст по рукам экспериментатору? Да, я бы ожидал, что экспериментатор, после получения ошибки, изучит предмет и решит проблему правильно, а не родит
AV в самый неожиданный момент и порчу не аллоцированных для класса данных (это я про
TList(theClass.Create).Create).
Чтобы по канонам все сделать, нужно:
1. Объявить конструктор виртуальным у
TList- Код: Выделить всё
type
TVList = class(TList)
public
contructor Create; virtual;
end;
2. Объявить ссылку на класс:
- Код: Выделить всё
type
TVListClass = class of TVList;
3. Тогда можно смело использовать, к примеру так:
- Код: Выделить всё
procedure AAA;
var
theClass: TVListClass;
L: TList;
begin
theClass := TVList;
L := theClass.Create;
try
ShowMessage(L.ClassName);
if L.Count = 0 then
L.Add(nil);
finally
L.Free;
end;
end;