Существует версия XP , Связывают , вероятно, работая как служба Windows.
TDataProviderThread является потомком TThreadBase, но TThreadBaseList
не является потомком TThreadBaseList
. Это не наследование, это называется ковариацией , и хотя интуитивно кажется, что это одно и то же, это не так, и ее нужно поддерживать отдельно. На данный момент Delphi не поддерживает его, хотя, надеюсь, он будет в следующем выпуске.
Вот основная причина проблемы ковариации: если функция, которой вы ее передаете, ожидает список объектов TThreadBase, и вы передаете это список объектов TDataProviderThread, ничто не мешает ему вызвать .Add и вставить в список какой-либо другой объект TThreadBase, который не является TDataProviderThread, и теперь вы у меня всякие уродливые проблемы. Вам потребуются специальные приемы от компилятора, чтобы убедиться, что этого не произойдет, иначе вы потеряете безопасность типов.
РЕДАКТИРОВАТЬ: Вот возможное решение для вас: Превратите MakeAllThreadsActive в общий метод, например:
procedure MakeAllThreadsActive<T: TThreadBase>(aThreads: TThreadBaseList<T>);
Или вы мог сделать то, что предложил Уве Раабе. Любой из них будет работать.
Тип
TList <TBase>
не является родительским типом для
TList <TChild>
Универсальные шаблоны не могут использоваться таким образом.