加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 10:17:09 所属栏目:大数据 来源:网络整理
导读:我听过很多程序员,特别是Delphi程序员鄙视使用’with’。 我以为它使程序运行速度更快(只有一个对父对象的引用),而且如果使用明智(不到十几行代码,没有嵌套),读取代码更容易。 以下是一个例子: procedure TBitmap32.FillRectS(const ARect: TRect; Valu
我听过很多程序员,特别是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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读