为什么我不应该在Delphi中使用“with”?

前端之家收集整理的这篇文章主要介绍了为什么我不应该在Delphi中使用“with”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我听过很多程序员,特别是Delphi程序员鄙视使用’with’。

我以为它使程序运行速度更快(只有一个对父对象的引用),而且如果使用明智(不到十几行代码,没有嵌套),读取代码更容易。

以下是一个例子:

procedure TBitmap32.FillRectS(const ARect: TRect; Value: TColor32);
begin
  with ARect do FillRectS(Left,Top,Right,Bottom,Value);
end;

我喜欢用。我怎么了?

解决方法

使用它的一个烦恼是调试器无法处理它。所以它使调试更加困难。

更大的问题是读取代码并不容易。特别是如果with语句有点长。

procedure TMyForm.ButtonClick(...)
begin
  with OtherForm do begin
    Left := 10;
    Top := 20;
    CallThisFunction;
  end;
end;

哪个Form的CallThisFunction将被调用? Self(TMyForm)或OtherForm?您不能在不检查OtherForm是否具有CallThisFunction方法的情况下知道。

最大的问题是你可以使bug很容易,甚至不知道。如果TMyForm和OtherForm都有一个CallThisFunction,但它是私有的。你可能会希望/想要调用OtherForm.CallThisFunction,但实际上并不是这样。编译器会警告你,如果你没有使用,但现在它没有。

使用多个对象来增加问题。见http://blog.marcocantu.com/blog/with_harmful.html

猜你在找的Delphi相关文章