在该派生类中,有一个私有成员,即TMemo控件的实例。然后覆盖(override)了基类的两个抽象虚方法:DoLoad和Save。 其实现如下: function TMemoEditor.Create(); begin // 创建TMemo实例 m_Editor := TMemo.Create(nil); // 接着完成将TMemo实例置于界面上显示出来等操作,省略 end; function TMemoEditor.Destroy(); begin // 其他清理工作 m_Editor.Free(); m_Editor := nil; end; function TMemoEditor.DoLoad(FileName : String) : Boolean; begin Result := false; try m_Editor.LoadFromFile(FileName); except end; Result := true; end; function TMemoEditor.SaveAs(FileName : String) : Boolean; begin Result := false; try m_Editor.SaveToFile(FileName); except end; Result := true; end; 很好,这样的实现已经可以使个部分运作正常了。如果,今后找到更好的编辑器控件,只需要从TEditor派生,再实现一个TXXXEditor类即可,其他部分的代码不用作任何改动。而且,具体实现的TXXXEditor类中的代码,只和具体控件本身特性相关(如:读取、保存文件的方法),而公共逻辑也已经在TEditor类中实现了。 virtual的使用方法,基于笔者个人认识与经验: 1、如果基类不知道如何实现某方法(只有派生类知道),而基类的其他方法又必须使用该方法,则把该方法声明为抽象虚方法—— virtual; abstract;(即C++的纯虚函数)。 2、如果基类能够为某方法提供一种默认实现,但派生类可能完全重写这个实现,则将该方法声明为虚方法—— virtual;并实现默认算法。 3、如果基类能够且必须提供某方法的部分的实现,而派生类必须提供另一部份的实现,则将该方法声明为非虚方法,并在基类中为其配套提供一个虚方法或抽象虚方法,以允许由基类本身调用和被派生类覆盖。犹如上例中的Load与DoLoad。 善用virtual,善用多态,你的代码将更具灵活性! |
正在阅读:三谈多态—善用virtual三谈多态—善用virtual
2004-02-14 09:34
出处:PConline
责任编辑:zwg
键盘也能翻页,试试“← →”键