На мой взгляд, это довольно бессмысленно, хотя и совершенно безвредно.Вы могли бы прекрасно заявить, что sl
будет TStringList
, и я бы всегда так делал.Для читателя кода это облегчает понимание списка локальных переменных.
В этом коде sl
всегда присваивается экземпляр TStringList
, и поэтому от объявления sl
ничего не получитсяиметь тип базового класса TStrings
.Однако, если у вас есть код, который присваивает переменной различные типы TStrings
потомков, то имеет смысл объявить ее как TStrings
.
Ситуации, когда вы можете объявить переменнуюиметь тип TStrings
обычно, когда код не создавал экземпляр в явном виде.Например, вспомогательный метод, который получил список строк в качестве параметра, был бы более полезен, если бы он принял TStrings
, так как тогда любой потомок мог быть передан ему.Вот простой пример:
procedure PrintToStdOut(Strings: TStrings);
var
Item: string;
begin
for Item in Strings do
Writeln(Item);
end;
Очевидно, что это гораздо полезнее, когда параметр объявлен как TStrings
, а не TStringList
.
Однако код в вопросене имеет такого характера, и я считаю, что было бы немного лучше, если бы sl
было объявлено типа TStringList
.