可視化窗體繼承允許你共享多個窗體的一些公共的動作:你可以使用共享的方法,公用的屬性,甚至是事件處理程序,組件,組件屬性,組件事件處理方法等等。
規則17:限制保護域數據的使用(Limit Protected Data)
當創建一些具有不同分級體系的類時,一些程序員趨向於主要使用保護域,因為私有數據不能被子類訪問。我不能說這沒有其合理性,但是這肯定是和封裝性不相容和的。保護數據的實現能夠被所有繼承的窗體所共享,而且一旦這些數據的原始定義發生改變,你必須更改所有的相關部分。
請注意,如果你遵循隱藏組件這樣一條規則(Rule 14),繼承窗體就不可能訪問基類的私有組件。在一個繼承窗體中,類似Edit1.Text:=’’的代碼就不會被編譯。雖然這是相當的不方便,但是至少在理論上這是值得肯定的事情,而不是否定的。如果你感覺到實現封裝性是最主要,最需要的,就請將這些組件參照放在基類的私有段。
規則18:保護域中的訪問方法(Protected Access Methods)
在基類中將組件參照放置在私有域中,而為這些組件添加一些訪問函數來得到他們的屬性,這將是一種更好的方法。如果這些訪問函數僅僅在這些類內部使用而且不是類接口的一部分,你應該在保護域聲明他們。例如Rule 11中描述過的GetText和SetText方法就可以聲明成protected,並且我們可以通過調用SetText(’’)來編輯文本。
事實上,當一個方法被鏡像到一個屬性時,我們可以簡單地采用如下代碼就可以達到編輯文本地目的:
Text:=’’;
規則19:保護域中的虛擬方法(Protected Virtual Methods)
實現一個靈活的分級制度的另一個關鍵點是定義一些你可以從外部類調用的虛擬方法來得到多態性。如果這個方法使用得當,將會很少出現其他公共的方法調用保護域中的虛擬方法的情況。這是一個重要的技巧,因為你可以定制派生類的虛擬方法,來修改對象的動作。