delphi - Delphi 中的重复 setter 逻辑

标签 delphi pascal delphi-2006

对于类的每个 setter,我必须实现一些事件逻辑(OnChanging、OnChanged):

procedure TBlock.SetWeightIn(const Value: Double);
var OldValue: Double;
begin
  OldValue := FWeightIn;
  DoOnChanging(OldValue, Value);
  FWeightIn := Value;
  DoOnChanged(OldValue, Value);
end;

procedure TBlock.SetWeightOut(const Value: Double);
var OldValue: Double;
begin
  OldValue := FWeightOut;
  DoOnChanging(OldValue, Value);
  FWeightOut := Value;
  DoOnChanged(OldValue, Value);
end;

您能否建议一种实现此目的的方法,而无需为每个 setter 重复所有这些行?

最佳答案

试试这个:

procedure TBlock.SetField(var Field: Double; const Value: Double);
var
    OldValue: Double;
begin
    OldValue := Field;
    DoOnChanging(OldValue, Value);
    Field := Value;
    DoOnChanged(OldValue, Value);
end;

procedure TBlock.SetWeightIn(const Value: Double);
begin
    SetField(FWeightIn, Value);
end;

procedure TBlock.SetWeightOut(const Value: Double);
begin
    SetField(FWeightOut, Value);
end;

关于delphi - Delphi 中的重复 setter 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1170118/

相关文章:

xml - 我如何使用 Indy 接收推送通知?

delphi - 为什么消息处理程序在 Debug模式下不起作用?

delphi - 在 Delphi 中解析一行的最快方法是什么?

dll - Inno 脚本从互联网异步下载文件

delphi - 调用 ShowModal 并设置 PopupParent 是一个好主意吗?在较新的 Delphi 版本中是否有必要?

delphi - 如何将 TXT 文件作为资源添加到我的 EXE 文件中?

Delphi XE ISAPI WebBroker 文件上传

delphi - Free Pascal 找不到 dll 的入口点

delphi - 如何让 Delphi 2006 TStringList.LoadFromFile 加载 UTF-16 文件

Delphi 空闲处理程序仅在我移动鼠标时触发