Delphi 8 引入了类帮助器,用于将 VCL/RTL 映射到 .NET 对象层次结构。它们允许将方法注入现有类,而无需覆盖该类或修改原始类。Delphi 的更高版本发现类帮助程序得到了改进,并将它们移植到 Win32。

在帮助中,它说“它们不应被视为开发新代码时使用的设计工具”。

类助手违反了传统的 OOP,但我不认为这使它们成为一件坏事。这个警告有道理吗?

开发新代码时是否应该使用类助手?

您在开发新代码时使用它们吗?

为什么或者为什么不?

马尔科姆的评论:新代码意味着日常应用程序开发,其中您有一些第三方库、一些现有代码,然后是您正在编写的代码。

有帮助吗?

解决方案

取决于你所说的“新代码”的意思。

他们是不是因为你是新开发的类真正相关的,所以在这种情况下,没有,他们可能不应该使用。

但即使是在一个全新的项目,你仍然可能需要修改现有的类,你不能在其他方面(VCL类,第三方类等)发生变化。在这种情况下,当然,我说那就去。

他们不是在自己的和邪恶。像大多数其他的事情,你只需要了解他们的工作,并在适当的情况下使用它们。

其他提示

拥抱类佣工作为花哨的代码的新工具之前,我想你要了解的局限性被包括。只有可能为一类提供一个一流的帮手。所以,如果你的类提供一流的帮手,而你的类从其他一些已经提供了一流的帮手共同类派生会发生什么?

CodeGear的引入类助手为“一劈”,以防止断裂的事情,而不是作为一个凉爽的设计特征。当你设计规范,设计它没有类帮手。我知道你可以。当与现有的代码,你可以控制处理,使用重构。当没有其它办法,端起类帮手。

这就是我认为任何方式......

基于Microsoft LINQ很大程度上左右他们的扩展方法。鉴于这一点,你应该使用类助手在新的代码,如果可以改善你的代码。请参见什么是类佣工好用途?的一些好的用途。

我使用它们了很多。我使用远程对象和对象存在由RO引擎创建的,所以你不能没有从他们那里下降后瞎搞的其他位添加到它们。级助手意味着我可以像对待其他任何对象。而且一个类只能有一个帮手,可以降辅助类让您得到继承的行为。

对不起,不禁队长明显了一会儿:如果内部德尔福人自己的国家“他们不应该被看作是一个设计工具,开发新的代码时使用”,那么顾名思义,他们不应该用过的。他们在那里为延长VCL只为自己的目的。还有谁是想给你比写它的人更好的理由?

我Vegar同意这一点:类佣工作为应急工具。当你知道他们得到的东西在规定的时间做的唯一途径。后来,如果有时间吧,删除它们。

我有一次忘了参数化的东西,如果在2006年德尔福并不存在类的助手将花费的时间一个巨大的LOT .....带班帮手,花了6个小时让thigs工作的权利。但是,这是一个紧急情况 - 类助手是一个晦涩的语言功能,它创造新的开发困难,按照程序的流程

也许您可以使用的一个好方法是(正如我所使用的):

  1. 始终优先考虑继承 对于类帮助器,仅当无法选择继承时才使用它们。
  2. 与纯粹的全局方法相比,更喜欢类助手.
  3. 如果您需要多个单元的扩展功能,请尝试其他方法(就像类包装一样).

.Net 扩展方法过于相似,其创建和支持的原因完全相同: 对基类进行扩展(而不是升级 为了尝试使 Delphi 本机代码与 .Net 代码“兼容”,Delphi.Net 中的 wich 不是一个选项 - 恕我直言,这太雄心勃勃了)

反正, Delphi 类助手仍然是一个相当工具 在某些情况下。

这些声如C#扩展方法。我要说的是,虽然扩展方法这样的,当你没有修改,你需要与功能扩展类的能力是有用的,他们是来设计自己的代码,一个好办法。在设计自己的代码,你想要的所有功能将设在同一个代码文件尽可能而不是在不同的类传播。我会说使用他们的东西,他们打算 - 基本上为装饰添加新的功能,以封闭班 - 不要在设计自己的代码中使用它们。

我发现自己越来越多地使用它们作为设计构造。

我使用它们的情况:

  • 在客户端/服务器设置中,我使用类帮助器扩展共享基类,以提供仅服务器或客户端的功能。
  • 通过方便的工具功能补充 VCL/RTL 类(和其他第三方代码)。
  • 当类不共享相同的继承树时解决差异(例如,使用帮助器可以拥有通用的 Count 和 Items 属性)。

事实上,我希望 Delphi 能够接受同一个基类的多个助手 - 如果我没记错的话,我什至已经提交了一个请求。

我发现这篇文章非常有趣。它涉及C ++,但主要的思想是语言无关。主要的要点是,全球例程有时preferrable的方法,即使在一个面向对象的环境。从这个观点出发,有一个为类助手不太需要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top