gpt4 book ai didi

.net - 为什么 with...do 语句和矩形不能完美地协同工作?

转载 作者:行者123 更新时间:2023-12-01 05:36:33 25 4
gpt4 key购买 nike

最近,我注意到任何时候我都将 Rectangle 变量与 一起使用。用...做 声明,由于某种原因它根本不起作用。

例如:

var bounds:=new Rectangle(0,0,0,0);

with bounds do
begin
X:=1;
Y:=2;
Width:=33;
Height:=44;
end;

bounds 的值保持为零,而不是 with 语句中的值。但是,如果我执行以下操作,效果很好。
var bounds:=new Rectangle(0,0,0,0);

bounds.X:=1;
bounds.Y:=2;
bounds.Width:=33;
bounds.Height:=44;

它有什么理由这样做。

最佳答案

Hans Passant 试图暗示的是“with”语句创建边界的副本,对其进行处理,然后将其丢弃。我没有足够的信息来验证这一点,但我觉得这不太可能 - Delphi 的赋值运算符通过引用工作,因此隐式浅拷贝实际上并不经常发生。

然而,“with”语句故意创建了一种特殊的变量范围 hell 。您可以在边界内抓取一个字段,或者您可以从包含方法中抓取一个字段,或者您甚至可以从之前未关闭的“with”语句中抓取一个字段。自动重构不能触及 with 语句。向 with 语句操作的类添加字段可能会破坏 您的 方法。

考虑

with myLongNamedComponent.anotherLongNamedChild.pedanticRectangle do
begin
x:=1;
y:=2;
width:=33;
height:=44;
end;

这实际上更好地写成
var bounds := new Rectangle(0,0,0,0);
bounds.x := 1;
bounds.y := 2;
bounds.width := 33;
bounds.height := 44;
myLongNamedComponent.anotherLongNamedChild.pedanticRectangle := bounds;

TL:博士; “with”语句不再被视为良好的编码习惯。

关于.net - 为什么 with...do 语句和矩形不能完美地协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8331118/

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