У меня есть TList интерфейса
Generic TList <IMyInterface> в Дельфах
IImage = interface
// another methods...
procedure Draw;
end;
, которые привлекают разные вещи в Canvas.
и родительский класс
TCustomImage = class(TInterfacedObject, IImage)
procedure Draw; virtual; abstract;
end;
и пару детских классов
TSomeShape = class(TCustomImage, IImage)
procedure Draw(aCanvas:TCanvas); reintroduce; overload;
end;
TSomeAnotherShape = class(TCustomImage, IImage)
procedure Draw(aCanvas:TCanvas); reintroduce; overload;
end;
Я хотел бы код, как показано ниже:
var
list : TList<IImage>;
shape : IImage;
begin
try
list := TList<IImage>.Create;
list.Add(TSomeShape.Create(atSomePosition));
list.Add(TSomeAnotherShape.Create(atSomePosition));
// or better :)
for shape in list do
shape.Draw(Canvas); // TSomeShape and TSomeAnotherShape respectively.
finally
FreeAndNil(list);
end;
end;
UPD
Я хочу использовать list.Items[I].draw()
с соответствующими классами (TSomeShape
или TSomeAnotherShape
). Но теперь я вижу, что это невозможно с этим интерфейсом IImage
. У меня был метод Draw(Canvas:TCanvas)
в IImage, но я подумал, что приемлемо повторное введение метода в классы.
Спасибо, я буду работать над своим кодом. :)
Какова фактическая проблема, с которой вы сталкиваетесь? Все, что вы сделали, это предоставить образец кода, но нет объяснений, чтобы пойти с ним. –
, если это разрешено решением ниже, отметьте его как принятый ответ, отметив галочку. –