• Delphi 继承类的构造函数和析构函数的构建顺序


    举例

    Application: TAPPlication;

    构建顺序: 1、构造函数是先继承父类的,初始化父类的成员通过Inherited。

                   2、析构函数是先释放本对象的,然后在释放父类的成员。s

    constructor TApplication.Create(AOwner: TComponent);
    var
      P: PChar;
      ModuleName: array[0..255] of Char;
    begin
      inherited Create(AOwner);
      if not Assigned(Classes.ApplicationHandleException) then
        Classes.ApplicationHandleException := HandleException;
      if not Assigned(Classes.ApplicationShowException) then
        Classes.ApplicationShowException := ShowException;
      FBiDiMode := bdLeftToRight;
      FTopMostList := TList.Create;
      FWindowHooks := TList.Create;
      FHintControl := nil;
      FHintWindow := nil;
      FHintColor := DefHintColor;
      FHintPause := DefHintPause;
      FHintShortCuts := True;
      FHintShortPause := DefHintShortPause;
      FHintHidePause := DefHintHidePause;
      FShowHint := False;
      FActive := True;
      FAutoDragDocking := True;
      FIcon := TIcon.Create;
    {$IFDEF MSWINDOWS}
      FIcon.Handle := LoadIcon(MainInstance, 'MAINICON');
    {$ENDIF}
      FIcon.OnChange := IconChanged;
      GetModuleFileName(MainInstance, ModuleName, SizeOf(ModuleName));
      OemToAnsi(ModuleName, ModuleName);
      P := AnsiStrRScan(ModuleName, '\');
      if P <> nil then StrCopy(ModuleName, P + 1);
      P := AnsiStrScan(ModuleName, '.');
      if P <> nil then P^ := #0;
      AnsiLower(CharNext(ModuleName));
      FTitle := ModuleName;
      if not IsLibrary then CreateHandle;
      UpdateFormatSettings := True;
      UpdateMetricSettings := True;
      FShowMainForm := True;
      FAllowTesting := True;
      FTestLib := 0;
      ValidateHelpSystem;
      HookSynchronizeWakeup;
    end;

    destructor TApplication.Destroy;
    type
      TExceptionEvent = procedure (E: Exception) of object;
    var
      P: TNotifyEvent;
      E: TExceptionEvent;
    begin
      UnhookSynchronizeWakeup;
      P := HandleException;
      if @P = @Classes.ApplicationHandleException then
        Classes.ApplicationHandleException := nil;
      E := ShowException;
      if @E = @Classes.ApplicationShowException then
        Classes.ApplicationShowException := nil;
      if FTestLib <> 0 then
        FreeLibrary(FTestLib);
      FActive := False;
      CancelHint;
      ShowHint := False;
      inherited Destroy;
      UnhookMainWindow(CheckIniChange);
      if (FHandle <> 0) and FHandleCreated then
      begin
        if NewStyleControls then SendMessage(FHandle, WM_SETICON, 1, 0);
        DestroyWindow(FHandle);
      end;
      if FHelpSystem <> nil then FHelpSystem := nil;
    {$IFDEF LINUX}
      if FObjectInstance <> nil then WinUtils.FreeObjectInstance(FObjectInstance);
    {$ENDIF}
    {$IFDEF MSWINDOWS}
      if FObjectInstance <> nil then Classes.FreeObjectInstance(FObjectInstance);
    {$ENDIF}
      FWindowHooks.Free;
      FTopMostList.Free;
      FIcon.Free;
    end;

  • 相关阅读:
    excel表中的一列,如何去除重复项
    Notepad++ 列操作
    mysql 登陆其它服务器
    贪心算法处理背包问题
    分治法处理排序问题
    回溯法_皇后问题
    动态规划算法的java实现
    人事管理系统
    java复习笔记
    核心动画-翻页效果的实现
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/2104274.html
Copyright © 2020-2023  润新知