课堂助手有什么好处?

Too*_*the 36 delphi class helper

Delphi(可能还有许多其他语言)都有类助手.这些提供了一种向现有类添加额外方法的方法.没有做一个子类.

那么,班主任的好用途是什么?

gab*_*abr 33

我正在使用它们:

  • 插入普查员进入一个没有实现他们VCL类.
  • 为了增强 VCL类.
  • 要向TStrings类添加方法,以便在派生列表和TStringList中使用相同的方法.

    TGpStringListHelper = class helper for TStringList
    public
      function  Last: string;
      function  Contains(const s: string): boolean;
      function  FetchObject(const s: string): TObject;
      procedure Sort;
      procedure Remove(const s: string);
    end; { TGpStringListHelper }
    
    Run Code Online (Sandbox Code Playgroud)
  • 简化对记录字段的访问并删除强制转换.


Too*_*the 14

起初,我对课堂助手持怀疑态度.但后来我读了一篇有趣的博客文章,现在我确信它们确实很有用.

例如,如果您想要现有实例类的额外功能,并且由于某种原因您无法更改现有源.您可以创建一个类助手来添加此功能.

例:

type
  TStringsHelper = class helper for TStrings
  public
    function IsEmpty: Boolean;
  end;

function TStringsHelper.IsEmpty: Boolean;
begin
  Result := Count = 0;
end;
Run Code Online (Sandbox Code Playgroud)

每次,我们现在使用TStrings的(子类)的实例,并且TStringsHelper在范围内.我们可以访问方法IsEmpty.

例:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Memo1.Lines.IsEmpty then
    Button1.Caption := 'Empty'
  else
    Button1.Caption := 'Filled';
end;
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 类助手可以存储在一个单独的单元中,因此您可以添加自己的漂亮的类助手.请务必为这些单位提供一个易于记忆的名称,例如ClassesHelpers,用于Classes单元的帮助程序.
  • 还有记录助手.
  • 如果范围内有多个类助手,可能会遇到一些问题,只能使用一个助手.

  • 您是否阅读过评论:"类帮助程序的最大问题是,在您自己的应用程序中使用它们的pov是,任何时候只有给定类的一个类助手可能在范围内." ......"也就是说,如果你在范围内有两个助手,编译器只能识别一个.你不会得到任何警告,甚至暗示任何其他可能被隐藏的助手." (3认同)

Jon*_*eet 6

这听起来非常像C#3(和VB9)中的扩展方法.我见过的最好的用法是对IEnumerable<T>(和IQueryable<T>)的扩展,它允许LINQ对任意序列起作用:

var query = someOriginalSequence.Where(person => person.Age > 18)
                                .OrderBy(person => person.Name)
                                .Select(person => person.Job);
Run Code Online (Sandbox Code Playgroud)

(或者其他什么,当然).所有这一切都是可行的,因为扩展方法允许您有效地将对静态方法的调用链接在一起,这些方法采用与返回时相同的类型.

  • @NickHodges您是否也申请了多个助手一次无法激活的专利权? (10认同)
  • 作为旁注,自2000年以来,德尔福一直有班主任,我们就这个概念持有专利.Nick Hodges Delphi产品经理Embarcadero Technologies (5认同)