Я не уверен, возможно ли это в Delphi.Я оглянулся и не могу найти ответ (Пример или недействительность, что это невозможно):
У меня есть универсальный класс списка, и я хочу создать экземпляр универсального типа.Например:
type
TTypeA = class(TObject);
procedure Test;
var
MyList: TobjectList<TTypeA>;
NewListObject: TTypeA;
begin
MyList := TObjectList<TTypeA>.Create;
NewListObject := MyList.xxx //what to put on the xxx
end;
Можно ли создать функцию xxx, которая создает новый объект типа TTypeA?
@ jeroen: спасибо за ответ ниже.Однако я забыл важную деталь в своем вопросе:
Я бы хотел, чтобы этот код работал и для любого другого типа, поэтому без предварительного знания о типе T для TObjectList.Я мог бы создать следующие списки:
MyList: TObjectList<TCar>;
MyList: TObjectList<TBike>;
Не зная, содержит ли MyList TCar или TBike (оба получены из одного базового класса и имеют одинаковые конструкторы), я хочу добавить новый элемент в MyList.
И с предложением Уве Раабе я столкнулся со следующей проблемой:
Я изменил свой класс на
TMyObjectList<T:class, constructor> = class(TMyBaseObjectList<T>)
, где TMyBaseObjectList определен как
TMyBaseObjectList<T:TMyBaseObject> = class(TObjectList)
Теперь я получаю сообщение об ошибке: Тип параметра 'T' не совместим с типом 'T: TMyBaseObject'