我想使用一个朋友的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,任何强制转换或...技巧一起使用此功能?
答案 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;
TStrings
是TStringList
的基类,它只是您可能实现的任何实现的占位符。但是,当您实际创建它时,就告诉它要使用什么实现。在大多数情况下,使用TStringList
。但是有时,您可能会发现另一个从TStrings
继承并实现它的类。如果愿意,您甚至可以编写自己的实现,并根据需要覆盖抽象方法。