What is "circular inheritance" called in Delphi?

I saw this code the other day:

type
    TcxGridTableControllerAccess = class (TcxGridTableController);

    TMycxGridDBTableView = class (TcxGridDBTableView)
    protected
        function GetViewDataClass: TcxCustomGridViewDataClass; override;
    end;

    TMycxGridViewData = class (TcxGridViewData)
    protected
        function GetFilterRowClass: TcxGridFilterRowClass; override;
    end;

    TMycxGridFilterRow = class (TcxGridFilterRow)
    protected
        procedure SetValue(Index: Integer; const Value: Variant); override;
    end;

    TcxGridDBTableView = class (TMycxGridDBTableView);

TMycxGridDBTableView inherited from TcxGridDBTableView, inherited from TMycxGridDBTableView. Search in Cyclic Inheritance, but only Java results.

What is called?

Ps: I do not have all the built-in code with me.

+4
source share
2 answers

What you show is not cyclical inheritance. It happens that dxSample.TMycxGridDBTableViewinherits from TcxGridDBTableViewin another module, perhaps cxGridDBTableView.TcxGridDBTableView. And dxSample.TcxGridDBtableViewinherited from dxSample.TMycxGridDBTableView.

Your code is equivalent to:

type
  TcxGridTableControllerAccess = class(TcxGridTableController);

  { Note: this does NOT inherit from the TcxGridDBTableView defined  }
  { a little further on in the source. It inherits from the original }
  { DevEx TcxGridDBTableView.                                        }

  TMycxGridDBTableView = class(cxGridDBTableView.TcxGridDBTableView)
  protected
    function GetViewDataClass: TcxCustomGridViewDataClass; override;
  end;

  TMycxGridViewData = class(TcxGridViewData)
  protected
    function GetFilterRowClass: TcxGridFilterRowClass; override;
   end;

  TMycxGridFilterRow = class(TcxGridFilterRow)
  protected
    procedure SetValue(Index: Integer; const Value: Variant); override;
  end;

  TcxGridDBTableView = class(TMycxGridDBTableView);

So hierarchy:

cxGridDBTableView.TcxGridDBTableView
                 |
                 v
   dxSample.TMycxGridDBTableView
                 |
                 v
    dxSample.TcxGridDBTableView 

, dxSample.TMycxGrdiDBTableView dxSample.TcxGridDBtableView, cxGridDBTableView.TcxGridDBTableView, . , , .

, - dxSample cxridDBTableView uses, DevEx dxSample.TcxGridDBtableView. interposing.

VCL FireMonkey, , -,

type
  TVCLClass = class(OriginalVCLUnit.TVCLClass)
    // modifications to the original TVCLClass
  end;

type
  TMyVCLClass = class(OriginalVCLUnit.TVCLClass)
    //
  end;

  TVCLClass = class(TMyVCLCLass);

, , .

+6

, . , TMycxGridDBTableView TcxGridDBTableView, TcxGridDBTableView, TcxGridDBTableView.

TcxGridDBTableView, , TcxGridDBTableView, . , , - . - , , .

. GetViewDataClass, . , , . VCL .

+9

Source: https://habr.com/ru/post/1649951/


All Articles