如何链接方法调用?

时间:2013-05-23 19:45:42

标签: delphi delphi-xe3

考虑这个例子:

 Memo1.Clear;
 Memo1.Add(S);
 Memo1.SaveToFile(F);

如果是在JavaScript中,我们可以这样做:

 Memo1.Clear.Add(S).SaveToFile(F);  

如何编写自己的Delphi类来支持这样的链接方法调用?我希望能够编写这样的代码:

 MyFileClass.Create('File.txt').OpenForWrite().Add('Test');

2 个答案:

答案 0 :(得分:11)

如果您愿意,您可以轻松设计自己的课程以支持流利的风格。

type
  TMyClass = class
  public
    function Foo: TMyClass;
    function Bar: TMyClass;
  end;

procedure TMyClass.Foo: TMyClass;
begin
  // do something
  Result := Self;
end;

var
  obj: TMyClass;

....
obj.Foo.Bar;

对于许多类型,流畅的风格是不合适的,所以不要觉得你必须到处使用它。但是,对于某些类型,它可以很有道理。

答案 1 :(得分:4)

不能代表xe3,但我的旧Delphi5可以这样做:

type
  TMyClass = class
  public
    function Foo: Any;
    function Bar: Other;
    function Baz: Tipes;
  end;

var
  obj: TMyClass;

with obj do begin Foo; Bar; Baz; end;

或:

with obj do begin
  Foo;
  Bar;
  Baz;
end;

不一样,但对于更多有用的属性/方法。