delphi property中default的含义

首先看个案例

TPerson = class
  published
    property Age: Integer read FAge write SetAge default 20;
end;

我们创建一个TPerson类 给其一个属性,然后使用了 default 20 关键字,按照我们的理解 应该是 这个age属性的默认值 就是20;

其实这个default 说明符不是 默认值的意思;官方也特别提示了:

https://docwiki.embarcadero.com/RADStudio/Athens/en/Properties_(Delphi)

image

可见 这个 default 与 我们理解的不一样,为了 降低 熵值,降低复杂度,还是不要使用 这些属性说明符了,就让其默认就可;

若要创建实例时,给其默认值,就在构造函数里 指定;


后来我开发一个按钮组件,给一个按钮默认 一个颜色,发现真的不生效:

//定义属性时,给其指定一个默认值,鼠标悬浮颜色
property ColorHot: TColor read FColorHot write SetColorHot default clWhite;
//在构造函数里指定初始化值,鼠标按下颜色
constructor TColorButton.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FColorPressed := clRed;
end;

image

所以 还是不要使用 default了,避免 程序难以理解;


default指令的意思不是设置属性默认值。它的意思是:当你在组件可视化设计时设置的属性值和它指定的值不相同时,才将该值存入dfm文件。比如

property  open: boolean   read   FOpen   write   setOpen   default   true;
//如果你在Object   Inspector中设置open为true时,open不会被保存,否则保存到dfm文件中。
//要设置默认值,应该在构造函数Create中设置,如:
constructor     Ttest.Create(AOwner:   TComponent);
begin
    inherited;
    open   :=   true;
    //....
end; 

可见 default 是容易让开发者产生歧义的,故而尽量不要使用

在 Delphi 的属性声明中,default 关键字并不直接影响代码的执行或编译过程。在标准的 Delphi 语法中,default 并不用于设置属性的默认值,而是在接口声明中作为元数据存在,主要用于文档和工具支持。

在属性声明中使用 default 关键字,如:

property ColorBack: TColor read FColorBack write SetColorBack default clBtnFace;

这里的 default clBtnFace 是一种指示,告诉开发人员或使用该组件的其他人,如果没有明确设置 ColorBack 属性,那么该属性的“默认”或“期望”值应该是 clBtnFace。然而,这并不会在运行时自动将 ColorBack 设置为 clBtnFace。真正的默认值设置通常在构造函数中完成。

default 关键字在以下几种情况下可能有用:

  1. 文档说明:它为开发人员提供了关于属性预期默认值的明确指示,这有助于理解和使用控件。

  2. 设计时支持:在设计环境中,一些工具可能会利用这个信息来自动为属性提供默认值,或者在用户没有明确设置属性值时给出提示。

  3. 代码生成:在某些情况下,代码生成工具可能会使用 default 关键字来生成初始化代码,但这取决于工具的实现。

总的来说,default 在 Delphi 属性声明中主要起文档和指示作用,并不直接影响属性的实际行为。要设置属性的实际默认值,你需要在类的构造函数中显式地赋值。

请注意,我所描述的是标准的 Delphi 行为。在某些特定的 Delphi 版本、扩展或第三方工具中,default 可能有特殊的行为或意义,但这不是 Delphi 语言标准的一部分。如果你在使用特定的框架或工具集,建议查阅相关文档以了解 default 在该环境中的具体作用。

posted on 2024-06-06 15:03  del88  阅读(5)  评论(0编辑  收藏  举报