为什么属性默认值在free pascal中不起作用?

时间:2016-01-24 20:25:34

标签: freepascal

我想要默认的http错误代码500。

我无法覆盖构造函数(我发现some docs about it,但编译器说There is no method in an ancestor class to be overridden: "constructor HttpError.Create(const AnsiString);

我尝试将Default 500添加到状态属性定义中,但它也不起作用(我看到0)。

默认情况下,我如何才能获得500状态?

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}

program test;

uses
  SysUtils;

Type
  {:Base http exception}
  HttpError = class(Exception)
  private
    FStatus: Integer;
  published
    property Status: Integer Read FStatus Write FStatus Default 500;
  end;

begin
  try
    Raise HttpError.Create('Ooops');
  except
    on e: HttpError do
      WriteLn(e.Status);
  end;
end.

1 个答案:

答案 0 :(得分:4)

显然Default没有达到预期目的。

实际上Default用于非常具体的内容,即向表单流式系统指示此发布(表单流式)属性的默认值(在本例中)为500,因此如果值为并没有改变,不需要使用表单数据保存该值。

请注意 - 有点令人困惑 - 即使在使用Default属性的组件流上下文中,声明一个默认值就像你在这里做的那样并没有实际设置字段的默认值 - 你必须在构造函数中手动执行此操作。

最后,只有override构造函数(如果它在基类中是虚拟的),而Exception类型的构造函数不是。{1}}。只需将其声明为普通构造函数,并使用inherited... Create(...

调用其中的相应祖先

虚拟构造函数主要用于构造完成以响应从表单文件中解析数据的组件。