規則13:使用屬性的附加作用(Use Side-Effects In PropertIEs)
請記住:使用屬性而不是訪問全局變量(參見規則10、11、12)的好處之一就是當你設置或者讀取屬性的值時,你還可能有意想不到的收獲。
例如,你可以直接在窗體界面上拖拉組件,設置多個屬性的值,調用特殊方法,立即改變多個組件的狀態,或者撤銷一個事件(如果需要的話)等等。
規則14:隱藏組件(Hide Components)
我經常聽見那些面向對象編程的狂熱追求者抱怨Delphi窗體中包含一些在published部分聲明的組件,這是和面向對象思想的封裝性原理不相符合的。他們確實提出了一個重要的議題,但是他們中的大多數人都沒有意識到解決方法其實就在他們手邊,完全不用重寫Delphi代碼,也不用轉向其他語言。
Delphi向窗體中添加的組件參照可以被移到private部分,使得其他窗體不能訪問他們。如果你這樣做,你就有必要設置一些指向組件的窗體屬性(請參見規則11),並且使用它們來訪問組件的狀態。
Delphi將所有的這些組件都放在published部分,這是因為使用這種方式能夠保證這些域一定是在.DFM文件中創建的組件。當你改變一個組件的名稱時,VCL能夠自動地將這個組件對象與它在窗體中的參照關聯起來。因為delphi使用RTTI和Tobject方法來實現這種功能,所以如果想要使用這種自動實現功能,就必須把參照放置在published部分(這也正是為什麼Delphi將所有的組件都放在published部分的緣故)。
如果你想知道的更詳細一點,可以參看下面的代碼:
procedure Tcomponent.SetReference(Enable:Boolean);
var
FIEld:^Tcomponent;
begin
If Fowner<> nil then begin
Field:=Fowner.FIEldAddress(Fname);
If FIEld<>nil then
FIEld^:=Self
else
FIEld^:=nil;
end;
end;