欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Delphi中的继承机制

程序员文章站 2022-03-03 18:42:01
...

继承是面向对象开发的的特点之一。良好的继承可以有效的降低代码冗余,提高代码复用。Delphi做为一款优秀的面向对象开发工具,在这一方面也不示弱。当我们在Delphi中新建一个窗体时,可以看到如下代码

Delphi中的继承机制
            
    
    博客分类: Delphi delphi type
Delphi中的继承机制
            
    
    博客分类: Delphi delphi TForm1
=class(TForm)
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
private
Delphi中的继承机制
            
    
    博客分类: Delphi delphi Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
...{Privatedeclarations}
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
public
Delphi中的继承机制
            
    
    博客分类: Delphi delphi Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
...{Publicdeclarations}
Delphi中的继承机制
            
    
    博客分类: Delphi delphi end;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 

这表示我们建立的所有窗体都是继承自TForm这个类。如果我们希望在某个项目中所有的窗体都具有相同的风格和字体标准,大不必为每个窗体一一指定,只需要定义一个标准的窗体作为项目中所有窗体的基类就可以了,这样我们只要在这个基类的窗体中定义窗体风格和字体标准即可应用到所有它的子类窗体中。假设我们设计一个MDI项目,希望所有的MDI窗体都具有相同的界面布局,就可以先建立一个MDI窗体基类,然后让所有的MDI窗体都从此类派生,而非TForm类。

Delphi中的继承机制
            
    
    博客分类: Delphi delphi TfrmMDIBase=class(TForm)
Delphi中的继承机制
            
    
    博客分类: Delphi delphi CoolBar1:TCoolBar;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolBar1:TToolBar;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton1:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton2:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton3:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton4:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton5:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi dsActive:TDataSource;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton6:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton7:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton8:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton9:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton10:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ActionList1:TActionList;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi DataSetFirst1:TDataSetFirst;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi DataSetPrior1:TDataSetPrior;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi DataSetNext1:TDataSetNext;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi DataSetLast1:TDataSetLast;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi DBGridEh1:TDBGridEh;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi aqActive:TADOQuery;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi actNew:TAction;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi actEdit:TAction;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi actExit:TAction;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi actDelete:TAction;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton11:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi actRefresh:TAction;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi Panel1:TPanel;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi pnlEdit:TPanel;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi actCancel:TAction;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton12:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi actSave:TAction;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi ToolButton13:TToolButton;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureFormClose(Sender:TObject;varAction:TCloseAction);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureFormCreate(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactNewExecute(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactDeleteExecute(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactExitExecute(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactNewUpdate(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactDeleteUpdate(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactExitUpdate(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureaqActiveAfterInsert(DataSet:TDataSet);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactRefreshUpdate(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactRefreshExecute(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactCancelExecute(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactCancelUpdate(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactSaveExecute(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureactSaveUpdate(Sender:TObject);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureaqActivePostError(DataSet:TDataSet;E:EDatabaseError;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi varAction:TDataAction);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
private
Delphi中的继承机制
            
    
    博客分类: Delphi delphi Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
...{Privatedeclarations}
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureOpenDataSet;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi procedureCloseDataSet;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
protected
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
public
Delphi中的继承机制
            
    
    博客分类: Delphi delphi Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
...{Publicdeclarations}
Delphi中的继承机制
            
    
    博客分类: Delphi delphi end;

在子类中,可以使用关键字Override改写祖先类中使用Virtual关键字声明虚方法。如果在改写的方法只是想在父类的执行之后增加些自己的处理,而不是完全覆盖掉父类中的代码,可以使用inherited关键字。

Delphi中的继承机制
            
    
    博客分类: Delphi delphi destructorTCollectionItem.Destroy;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi begin
Delphi中的继承机制
            
    
    博客分类: Delphi delphi SetCollection(nil);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi inheritedDestroy;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi end;

点型的用法就是在李维的《Inside VCL(深入核心--VCL架构剖析》一书中曾提到过的三明治法。

Delphi中的继承机制
            
    
    博客分类: Delphi delphi destructorTStringList.Destroy;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi begin
Delphi中的继承机制
            
    
    博客分类: Delphi delphi FOnChange:
=nil;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi FOnChanging:
=nil;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi inheritedDestroy;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
ifFCount<>0thenFinalize(FList^[0],FCount);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi FCount:
=0;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi SetCapacity(
0);
Delphi中的继承机制
            
    
    博客分类: Delphi delphi end;

在Delphi中没有像C++那样的多继承,即每个类只可以有一个父类。不过在Delphi中也可以通过接口(Interface)来实现这种多继承,确切的说这并不是多继承,只是看起来像是多继承。如Delphi中的所有组件的祖先类TComponent。

Delphi中的继承机制
            
    
    博客分类: Delphi delphi TComponent=class(TPersistent,IInterface,IInterfaceComponentReference)
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
private
............
Delphi中的继承机制
            
    
    博客分类: Delphi delphi Delphi中的继承机制
            
    
    博客分类: Delphi delphi ...{IInterfaceComponentReference}
Delphi中的继承机制
            
    
    博客分类: Delphi delphi functionIInterfaceComponentReference.GetComponent
=IntfGetComponent;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi functionIntfGetComponent:TComponent;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
protected
............
Delphi中的继承机制
            
    
    博客分类: Delphi delphi Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
...{IInterface}
Delphi中的继承机制
            
    
    博客分类: Delphi delphi functionQueryInterface(constIID:TGUID;outObj):HResult;virtual;stdcall;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi function_AddRef:Integer;stdcall;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi function_Release:Integer;stdcall;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
Delphi中的继承机制
            
    
    博客分类: Delphi delphi Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
...{IDispatch}
Delphi中的继承机制
            
    
    博客分类: Delphi delphi functionGetTypeInfoCount(
outCount:Integer):HResult;stdcall;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi functionGetTypeInfo(Index,LocaleID:Integer;
outTypeInfo):HResult;stdcall;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi functionGetIDsOfNames(
constIID:TGUID;Names:Pointer;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi NameCount,LocaleID:Integer;DispIDs:Pointer):HResult;stdcall;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi functionInvoke(DispID:Integer;
constIID:TGUID;LocaleID:Integer;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi Flags:Word;varParams;VarResult,ExcepInfo,ArgErr:Pointer):HResult;stdcall;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
public
Delphi中的继承机制
            
    
    博客分类: Delphi delphi constructorCreate(AOwner:TComponent);
virtual;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi destructorDestroy;
override;
............
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
Delphi中的继承机制
            
    
    博客分类: Delphi delphi propertyComObject:IUnknownreadGetComObject;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
Delphi中的继承机制
            
    
    博客分类: Delphi delphi propertyComponents[Index:Integer]:TComponentreadGetComponent;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi propertyComponentCount:IntegerreadGetComponentCount;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi propertyComponentIndex:IntegerreadGetComponentIndexwriteSetComponentIndex;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi propertyComponentState:TComponentStatereadFComponentState;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi propertyComponentStyle:TComponentStylereadFComponentStyle;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi propertyDesignInfo:LongintreadFDesignInfowriteFDesignInfo;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi propertyOwner:TComponentreadFOwner;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
Delphi中的继承机制
            
    
    博客分类: Delphi delphi propertyVCLComObject:PointerreadFVCLComObjectwriteFVCLComObject;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi 
Delphi中的继承机制
            
    
    博客分类: Delphi delphi published
Delphi中的继承机制
            
    
    博客分类: Delphi delphi propertyName:TComponentNamereadFNamewriteSetNamestoredFalse;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi propertyTag:LongintreadFTagwriteFTag
default0;
Delphi中的继承机制
            
    
    博客分类: Delphi delphi end;

 

注:后三段代码均摘自Delphi的Class.pas单元文件。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关标签: delphi