如何链接方法调用?

Ple*_*rds -1 delphi delphi-xe3

考虑这个例子:

 Memo1.Clear;
 Memo1.Add(S);
 Memo1.SaveToFile(F);
Run Code Online (Sandbox Code Playgroud)

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

 Memo1.Clear.Add(S).SaveToFile(F);  
Run Code Online (Sandbox Code Playgroud)

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

 MyFileClass.Create('File.txt').OpenForWrite().Add('Test');
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 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;
Run Code Online (Sandbox Code Playgroud)

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

  • +1,但也要注意使用这种风格使维护变得更加困难并调试噩梦,因此应该非常谨慎地使用它. (3认同)
  • 我同意,只要它非常谨慎地使用 - 例如在NUnit测试用例中;-).曾经研究过调试代码的人,他们认为这种风格几乎可以做所有事情(并且不会持续很长时间)并且稍后会尝试维护它,但我甚至会第三次重复*. (2认同)