gpt4 book ai didi

delphi - 为什么我不应该在 Delphi 中使用 "with"?

转载 作者:行者123 更新时间:2023-12-03 14:34:14 25 4
gpt4 key购买 nike

我听说很多程序员,尤其是 Delphi 程序员鄙视“with”的使用。

我认为它使程序运行得更快(只有一个对父对象的引用),并且如果合理使用(少于十几行代码并且没有嵌套),更容易阅读代码。

这是一个例子:

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

我喜欢使用with。我这是怎么了?

最佳答案

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

一个更大的问题是代码不太容易阅读。特别是当 with 语句有点长时。

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

哪个Form的CallThisFunction会被调用? self (TMyForm)还是其他形式?如果不检查 OtherForm 是否有 CallThisFunction 方法,您就无法知道。

最大的问题是你可能在不知情的情况下很容易出现错误。如果 TMyForm 和 OtherForm 都有 CallThisFunction,但它是私有(private)的,该怎么办?您可能期望/希望调用 OtherForm.CallThisFunction,但事实并非如此。如果您不使用 with,编译器会警告您,但现在不会了。

在 with 中使用多个对象会使问题成倍增加。请参阅http://blog.marcocantu.com/blog/with_harmful.html

关于delphi - 为什么我不应该在 Delphi 中使用 "with"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com