На мой взгляд, это довольно бессмысленно, хотя и совершенно безвредно. Вы вполне можете объявить 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
.
person
David Heffernan
schedule
21.02.2012
TSL = TStringList
во включаемый файл, который вы включаете в каждый модуль ...... ;-) - person David Heffernan   schedule 21.02.2012TControl
. Кодеры (в том числе и я) стремятся укоренить каждую переменную, но это не имеет значения. Спасибо, что заставил меня задуматься об этом. - person NGLN   schedule 21.02.2012TStringList.Create
, то зачем объявлять что-то кроме TStringList? Я думаю, что если вам нужно будет уменьшить его доTStrings
в какой-то момент позже, вам, вероятно, следует явно указать его. Может быть, бывают моменты, когда это менее эффективно? - person J...   schedule 22.02.2012TStrings
имеет важное значение для его способности быть опубликованным свойством любого компонента (например, дважды щелкнитеLines
для редактирования). - person Jerry Dodge   schedule 22.02.2012