将 TStringList 包装在记录中
我倾向于使用 Delphi 的 TStringList 进行文本操作,因此我编写了很多过程/函数,例如: 如果
var
TempList: TStringList;
begin
TempList:= TStringList.Create;
try
// blah blah blah do stuff with TempList
finally
TempList.Free;
end;
end;
能够删除这样一个常见实用程序类的创建和释放,那就太好了。
既然我们现在有了带有方法的记录,是否可以将像 TStringList 这样的类包装在 记录一下,这样我就可以:
var
TempList: TRecordStringList;
begin
// blah blah blah do stuff with TempList
end;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是可能的。 创建一个公开您想要的方法/对象的接口:
实现该接口,并让它包装一个真正的
TStringList
:然后实现记录:
记录中有一个接口这一事实意味着编译器将处理自动引用计数,在创建和销毁副本时调用 _AddRef 和 _Release,因此生命周期管理是自动的。 这适用于永远不会包含对自身的引用(创建循环)的对象 - 引用计数需要各种技巧来克服引用图中的循环。
It's possible. Create an interface that exposes the methods / objects you want:
Implement the interface, and have it wrap a real
TStringList
:Then implement the record:
The fact that there's an interface inside the record means the compiler will handle reference counting automatically, calling _AddRef and _Release as copies get created and destroyed, so lifetime management is automatic. This works for objects that will never contain a reference to themselves (creating a cycle) - reference counting needs various tricks to get over cycles in the reference graph.
如果您有幸升级到 Delphi 2009,请查看 Barry 对智能指针的研究。
它们真的很酷,但需要泛型和匿名方法。 如果您尚未升级到 Delphi 2009,请立即升级! 特别是当他们提供 BOGO 特别时。 您还可以免费获得 Marco Delphi 开发人员手册 >下载试用版。 我也已经购买了它的副本。
If you are lucky enough to have upgraded to Delphi 2009 then check out Barry's work with smart pointers.
They are really cool, but require Generics and Anonymous methods. If you haven't upgraded to Delphi 2009, then do it now! Especially while they are offering their BOGO special. You also get Marco's Delphi Developer Handbook free just for downloading the trial. I already purchased a copy of it too.
还有另一个示例已在 CC 中实现。
它已经为您提供了 TStringList 的所有内容。
There is another example already implemented in CC.
It already has everything for a TStringList exposed for you.