Delphi:如何引用在“with”段中创建的对象(使用TSomeObject.Create do)

时间:2014-09-23 11:36:52

标签: delphi delphi-7

有没有办法在""中引用dinamicaly创建的对象?段,让我们说在其他地方传递这个对象?

我有一个像这样的简单代码

var
  someObject: TSomeObject;
begin
  someObject := TSomeObject.Create;
  try
    someObject.someProperty := 1;

    SomeOtherProcedure(someObject);
  finally
    someObject.Free;
  end;
end;

有一个传递给SomeOtherProcedure的变量。现在我试图删除someObject变量并使用"和#34;段有这样的东西

begin
  with TSomeObject.Create do
    try
      someProperty := 1

      SomeOtherProcedure( < what goes here ?? > );
    finally
      Free;
    end;
end;

我不想拥有像

这样的东西
var
  someObject: TSomeObject;
begin
  someObject := TSomeObject.Create;

  with someObject do
  (...)

这甚至可以引用正在&#34中创建的对象;使用&#34;?

谢谢!

1 个答案:

答案 0 :(得分:2)

不能不能使用With语句(特别是在你所说的情况下),因为它可能会导致比解决的问题更多的问题。

请考虑以下代码: -

    Procedure TMyForm1.btnProcessClick(Sender : TObject);
    Begin
      With TMyForm2.Create(Nil) Do
      Begin
        Try
          Caption := 'Processing....';
          DoSomeProcessing;
          DoSomeMoreProcessing;
        Finally
          Free;
        End;
      End;
    End;

假设TMyForm1还有一个名为DoSomeProcessing的方法?哪一个会被调用?哪个表单标题会更改为说'处理...&#39 ;?它不会立即清楚将被调用的方法。当您开始引用属性时,情况会变得更加复杂。不要期望调试器能够帮助您。现在,当代码仍然新鲜时,所有这些都可能不会给你带来太多问题,但是6个月或一年之后呢?你已经给自己带来了一大堆悲伤,以节省一些打字。