为什么自我可以在Delphi中分配?

mjn*_*mjn 17 delphi oop language-features self delphi-prism

GUI应用程序中的此代码编译并运行:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Self := TForm1.Create(Owner);
end;
Run Code Online (Sandbox Code Playgroud)

(使用Delphi 6和2009测试)

  • 为什么自我可写而不是只读?
  • 哪种情况可能有用?

编辑:

  • 在Delphi Prism中这也是可能的吗?(我想是的,见这里)

更新:使用Self赋值的Delphi应用程序/库:

Mas*_*ler 11

这并不像它可能那么糟糕.我刚刚在Delphi 2009中对它进行了测试,看起来,虽然Self参数不使用const语义,你似乎暗示它应该,它也不使用var语义,所以你可以改变它希望在您的方法中实际上不会丢失调用者对您的对象的引用.那将是一件非常糟糕的事情.

至于原因,两个答案之一.要么是简单的疏忽,要么是Marco建议的:允许你将Self传递给var参数.


Mar*_*ort 7

也许允许传递给const或var参数?

它可能是一个人工制品,因为系统在左边的任何地方都没有自我:=符号.


Hen*_*man 5

分配给自我是如此不合逻辑和无用,以至于这个“功能”可能是一个疏忽。与可赋值常量一样,纠正此类问题并不总是那么容易。

这里的简单建议是:不要这样做。