这个在Delphi中调用的“循环继承”是什么?
发布时间:2020-12-15 09:42:15 所属栏目:大数据 来源:网络整理
导读:前几天我看到了这样的代码: type TcxGridTableControllerAccess = class (TcxGridTableController); TMycxGridDBTableView = class (TcxGridDBTableView) protected function GetViewDataClass: TcxCustomGridViewDataClass; override; end; TMycxGridViewD
前几天我看到了这样的代码:
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继承自继承自TMycxGridDBTableView的TcxGridDBTableView.搜索循环继承但仅搜索Java结果. 这个叫什么? Ps:我没有完整的可构建代码. 解决方法
你展示的不是循环继承.发生的事情是dxSample.TMycxGridDBTableView继承自另一个单元中的TcxGridDBTableView,可能是cxGridDBTableView.TcxGridDBTableView.并且dxSample.TcxGridDBtableView继承自dxSample.TMycxGridDBTableView.
您的代码相当于: 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); 所以层次结构是: cxGridDBTableView.TcxGridDBTableView | v dxSample.TMycxGridDBTableView | v dxSample.TcxGridDBTableView 所以dxSample.TMycxGrdiDBTableView不是从dxSample.TcxGridDBTableView继承,而是从cxGridDBTableView.TcxGridDBTableView继承而来,所以那里没有所谓的循环继承.整个误解来自于这样一个事实:不同单元中的两个类具有相同的名称,并且第一个声明不完全限定它继承的类. 现在,如果有人将cxridDBTableView之后的单元dxSample放入他或她的uses子句中,则使用dxSample.TCxGridDBTableView,而不是原始的DevEx类.这被称为插入. 当人们想要修改VCL和FireMonkey的行为时,看到内插器类就像是一样 type TVCLClass = class(OriginalVCLUnit.TVCLClass) // modifications to the original TVCLClass end; 要么 type TMyVCLClass = class(OriginalVCLUnit.TVCLClass) // end; TVCLClass = class(TMyVCLCLass); 你展示的代码是后者. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |