title: Why is Self assignable in Delphi?
body: <p>This code in a GUI application compiles and runs:</p>
  
  <pre><code>procedure TForm1.Button1Click(Sender: TObject);
  begin
    Self := TForm1.Create(Owner);
  end;
  </code></pre>
  
  <p>(tested with Delphi 6 and 2009)</p>
  
  <ul>
  <li>why is Self writable and not read-only?</li>
  <li>in which situations could this be useful?</li>
  </ul>
  
  <p>Edit:</p>
  
  <ul>
  <li>is this also possible in Delphi Prism? (I think yes it is, see <a href="https://forums.codegear.com/thread.jspa?threadID=20291" rel="noreferrer">here</a>)</li>
  </ul>
  
  <p>Update:
  Delphi applications/libraries which make use of Self assignment:</p>
  
  <ul>
  <li><a href="http://code.google.com/p/python4delphi/" rel="noreferrer">python4delphi</a></li>
  </ul>