过程调用中的Tstringlist与Tstrings

时间:2019-03-10 14:59:07

标签: delphi

我想使用一个朋友的Delphi库,该库包含tstrings类的以下几个过程。

public function index()
{
    $communitiesIds = CommunityMemberList::where('user_id', Auth::user()->id)->pluck('community_id');
    $communities = Community::whereIn('id', $communitiesIds)->get();

    return view('home', ['communities' => $communities, 'badges' => $badges]);
}

在参考代码中,这些功能称为

AStringsprocedure (param_lines : TStrings;  .....  others stuff) 
begin 
     ///  add some add lines eg. to a memo or ....
     param_lines.add ('some text'); 
     .....
end;

传递vcl gui组件。

我想使用这些功能,但是我需要传递一个TStringlist类。 如何与TStringlist,任何强制转换或...技巧一起使用此功能?

1 个答案:

答案 0 :(得分:3)

在Delphi中,TStringList的定义如下:

TStringList = class(TStrings)

含义TStringList已经是TStrings。组件/控件将这些属性公开为TStrings,这是抽象的,内部没有实际实现。另一方面,TStringList包含实际的实现。在内部,他们使用TStringList来包含实际数据,但可以通过TStrings使它们可用。例如,在TStrings中,abstract方法仅描述签名...

procedure Insert(Index: Integer; const S: string); virtual; abstract;

然后TStringList实际上实现它们...

procedure Insert(Index: Integer; const S: string); override;

长话短说,您无需进行任何转换/转换-您可以直接隐式传递TStringList


奖金

有时候,您可能会看到类似这样的内容...

var
  L: TStrings;
begin
  L:= TStringList.Create;
  ...
end;

TStringsTStringList的基类,它只是您可能实现的任何实现的占位符。但是,当您实际创建它时,就告诉它要使用什么实现。在大多数情况下,使用TStringList。但是有时,您可能会发现另一个从TStrings继承并实现它的类。如果愿意,您甚至可以编写自己的实现,并根据需要覆盖抽象方法。