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)
可见 这个 default 与 我们理解的不一样,为了 降低 熵值,降低复杂度,还是不要使用 这些属性说明符了,就让其默认就可;
若要创建实例时,给其默认值,就在构造函数里 指定;
后来我开发一个按钮组件,给一个按钮默认 一个颜色,发现真的不生效:
//定义属性时,给其指定一个默认值,鼠标悬浮颜色
property ColorHot: TColor read FColorHot write SetColorHot default clWhite;
//在构造函数里指定初始化值,鼠标按下颜色
constructor TColorButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FColorPressed := clRed;
end;
所以 还是不要使用 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
关键字在以下几种情况下可能有用:
-
文档说明:它为开发人员提供了关于属性预期默认值的明确指示,这有助于理解和使用控件。
-
设计时支持:在设计环境中,一些工具可能会利用这个信息来自动为属性提供默认值,或者在用户没有明确设置属性值时给出提示。
-
代码生成:在某些情况下,代码生成工具可能会使用
default
关键字来生成初始化代码,但这取决于工具的实现。
总的来说,default
在 Delphi 属性声明中主要起文档和指示作用,并不直接影响属性的实际行为。要设置属性的实际默认值,你需要在类的构造函数中显式地赋值。
请注意,我所描述的是标准的 Delphi 行为。在某些特定的 Delphi 版本、扩展或第三方工具中,default
可能有特殊的行为或意义,但这不是 Delphi 语言标准的一部分。如果你在使用特定的框架或工具集,建议查阅相关文档以了解 default
在该环境中的具体作用。
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/p/18235178
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2023-06-06 BoolToStr、TBooleanHelper、Boolean 转 字符串
2020-06-06 yapi 个人空间 这个分组的问题
2020-06-06 yapi 的分组的理解!