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,轉載請注明原文鏈接:http://www.rzrgm.cn/del88/p/18235178
浙公網安備 33010602011771號