对象引用的问题 (50分)

N

Nizvoo

Unregistered / Unconfirmed
GUEST, unregistred user!
代码:
with TfrmDsp.Create(nil) do
  try
    ShowModal;
  finally
    Free;
  end;

与
try
  frmDsp := TfrmDsp.Create(nil);
  frmDsp.ShowModal;
finally
  frmDsp.Free;
end;

二者有啥区别,
我的看法,创建的对象没有引用,不知道是哪个变量引用。所以可以节约一个
变量frmDsp(可能是全局,默认的),其它的就不明白。请各位谈谈。
 
关键是with语句的作用了,建议你看一下生成的汇编。
另外,并没有节约一个变量,Delphi仍然生成一个临时变量来保存TFrmDsp.Crate(nil)
的结果。
 
我是指我定义时可以不用定义的。内质不清楚。
我看很多地方都如此用,我就奇怪,翻翻一些资料也无所获。
 
with TfrmDsp.Create(nil) do
try
ShowModal;
finally
Free;
end;

等价于
var
frmDsp: TfrmDsp;

frmDsp := TfrmDsp.Create(nil);
with frmDsp do
try
ShowModal;
finally
Free;
end;
 
感覺第二種比第一種方法安全點﹐它包含在try .. finally ..end 里﹐在create失敗時可
以更好的處理系統。愚見﹐不要笑話﹗
 
基本上是一样的,只是第一种生成的代码效率更高一些而已(据书本记载,未进行评测)
 
没有什么区别,功能是一样的,只是写法问题而已,不过使用With效率要高一些,
原因在寻址方面吧。
 
我测试了一下,第一种方法的执行时间没有第二种稳定,但是平均值基本相同(GetTickCount的精度不足以分辨)
 
To Kingron
应该不是这样的
我可以少定义一个变量来引用啊
 
Delphi的写法是第二种。
 
多人接受答案了。
 
顶部