Why variables are declared as TStrings and created as TStringList?

后端 未结 4 1080
故里飘歌
故里飘歌 2021-02-06 21:46

Why variables are declared as TStrings and created as TStringList?

eg: the var sl is declared as TStrings but created

4条回答
  •  故里飘歌
    2021-02-06 22:01

    Because that way you could put another TStrings descendant in the SL variable (I'd probably call that Strings, not SL).

    In your case, that is moot, since the logic around SL contains the creation of a TStringList and no external assignment or parameter parsing.

    But if you ever split the logic away from the assignment, then you could benefit from using any TStrings descendant.

    For instance, a TMemoy.Lines, TListBox.Items, TComboBox.Items, etc.
    From the outside it looks like they are TStrings, but internally they do not use a TStringList but their own descendant.

    A few examples of classes that descend from TStrings:

    source\DUnit\Contrib\DUnitWizard\Source\DelphiExperts\Common\XP_OTAEditorUtils.pas:
         TXPEditorStrings = class(TStrings)
    source\fmx\FMX.ListBox.pas:
           TListBoxStrings = class(TStrings)
    source\fmx\FMX.Memo.pas:
         TMemoLines = class(TStrings)
    source\rtl\common\System.Classes.pas:
         TStringList = class(TStrings)
    source\vcl\Vcl.ComCtrls.pas:
         TTabStrings = class(TStrings)
         TTreeStrings = class(TStrings)
         TRichEditStrings = class(TStrings)
    source\vcl\Vcl.ExtCtrls.pas:
         TPageAccess = class(TStrings)
         THeaderStrings = class(TStrings)
    source\vcl\Vcl.Grids.pas:
         TStringGridStrings = class(TStrings)
         TStringSparseList = class(TStrings)
    source\vcl\Vcl.Outline.pas:
         TOutlineStrings = class(TStrings)
    source\vcl\Vcl.StdCtrls.pas:
         TCustomComboBoxStrings = class(TStrings)
         TMemoStrings = class(TStrings)
         TListBoxStrings = class(TStrings)
    source\vcl\Vcl.TabNotBk.pas:
         TTabPageAccess = class(TStrings)
    

提交回复
热议问题