規則20:用於屬性的虛擬方法(Virtual Methods For PropertIEs)
即使是訪問屬性的方法也能定義成virtual,這樣派生類就能改變屬性的動作而不必重定義他們。雖然這種方法在VCL當中很少使用,但是它確實十分靈活、強大。為了實現這一點,僅僅需要將Rule 11當中的Get 和Set 方法定義成Virtual。基類的代碼如下所示:
type
TformDialog = class ( TForm)
Procedure FormCreate(Sender:Tobject);
Private
Edit1:Tedit;
Protected
function GetText:String;virtual;
procedure SetText(const Value:String);virtual;
public
constructor Create(Text :String):reintroduce;overload;
property Text:String read GetText write SetText;
end;
在繼承窗體中,你可以添加一些額外的動作來重載虛擬方法SetText:
procedure TformInherit.SetText(const Value:String);
begin
inherited SetText(Value);
if Value=’’ then
Button1.Enabled:=False;
end;
小結
要做到一個好的Delphi面向對象編程程序員遠非我在上面提到的這些規則這麼簡單。上面的這20條規則中有一些可能需要足夠的耐性和時間來實現,因此,我也不能強求你能遵循所有的這些規則。但是這些規則應該被合適的運用到你的程序中,而且當你開發的應用程序越大,參與的程序員越多,這些規則越重要。不過,即使是一些小程序,始終記住這些規則並在合適的地方使用他們也會對你有所幫助。
當然,還有很多其他的經驗規則我沒有涉及到,特別是存儲器處理和RTTI問題,因為他們十分的復雜,需要專門的說明。
我的結論是要遵循我上面列出的規則會付出一定的代價,特別是額外的代碼,但是這些代價會讓你得到一個更加靈活強壯的程序。希望Delphi的後續版本能夠幫組我們減少這些代價。