我在delphi源代码中发现了许多这样的代码:
procedure TControl.SetOpacity(const Value: Single);
begin
if FOpacity <> Value then
begin
FOpacity := Value;
if FOpacity < 0 then
FOpacity := 0;
if FOpacity > 1 then
FOpacity := 1;
RecalcOpacity;
Repaint;
end;
end;
我认为({0}除外)FOpacity <> Value
将始终返回true。那么进行这种比较的目的是什么?
答案 0 :(得分:3)
我误解了这个问题,即为什么要进行比较,而实际上却问为什么使用直接比较而不是通过SameValue()
进行比较,而通常使用这种比较来比较浮点值。
我在这里留下答案,因为它不是错误的(只是回答了一个不同的问题),可能会帮助人们在此页面上绊脚石。
这样一来,将属性设置为它已经具有的值将不会触发仅在为该属性分配新值时才需要进行的活动。
在此示例中,如果opacity属性的值不变,则无需重新绘制控件。
myControl.Opacity := 0.5;
[...]
// some time later, should not trigger repaint of control, because nothing changes
myControl.Opacity := 0.5;