@SergioBarbery

Как организовать наследование типов при использовании дженериков в Delphi XE4-XE7?

Имеем 2 базовых класса:
TData = class; // Данные
TDataList<T: TData> = class(TObjectList<T>);  // Список
так же имеем несколько наследников:
TData2 = class(TData);
TDataList2 = class(TDataList<TData2>);
TData3 = class(TData);
TDataList3 = class(TDataList<TData3>);
// ... и т.д.
Каждый список является наследником TDataList со своим типом данных, унаследованным от TData.
Требуется иметь возможность все эти типы TDataList2, TDataList3 и т.д. привести к единому родительскому типу, для работы на уровне списков TDataList и элементов TData.
Пробовался такой код:
procedure Test;
var
  DataListCommon: TDataList<TData>;
  DL2: TDataList2;
begin
  DL2 := TDataList2.Create;  // это можно опустить, на компилятор это не влияет
  DataListCommon := DL2;  // <-- [dcc32 Error] Unit1.pas(44): E2010 Incompatible types: 'Unit1.TDataList<Unit1.TData>' and 'TDataList2'
  DataListCommon := DL2 as TDataList<TData>; // Та-же ошибка  
  DataListCommon := TDataList<TData>(DL2);   // Компилируется и работает (по крайней мере ошибок замечено не было)
end;

Насколько правомерно использовать компилирующийся вариант приведения типов в данном случае?
  • Вопрос задан
  • 2883 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы