无法理解Delphi XE6保护类型
我创建了两个单元并将第一个类放入其中一个:
unit UBaseClass; interface type TBaSEOuterClass = class protected type TBaseInnerClass = class public end; protected function GetInnerInstance: TBaSEOuterClass.TBaseInnerClass; virtual; end; implementation { TBaSEOuterClass } function TBaSEOuterClass.GetInnerInstance: TBaSEOuterClass.TBaseInnerClass; begin // doesn't matter end; end. 我将派生类放入第二个单元: unit UDerClass; interface uses UBaseClass; type TDerOuterClass = class(TBaSEOuterClass) protected type TDerInnerClass = class(TBaseInnerClass) end; protected function GetInnerInstance: TBaSEOuterClass.TBaseInnerClass; override; end; implementation { TDerOuterClass } function TDerOuterClass.GetInnerInstance: TBaSEOuterClass.TBaseInnerClass; begin end; end. 当我想要编译时,我得到了
在行函数TDerOuterClass.GetInnerInstance:TBaSEOuterClass.TBaseInnerClass; 我无法理解为什么TBaSEOuterClass.TBaseInnerClass(作为内部受保护类)无法从TDerOuterClass(为TBaSEOuterClass派生)访问.在这种情况下,实际上受保护的类型是什么? 我在Nested Type Declarations topic没有找到任何解释.所以有这种行为的原因吗? 它也与简单的受保护类型相关 protected type TSimpleType = Integer; 我无法在TDerOuterClass中编写函数 protected function GetValue: TSimpleType; 因为我会收到一条消息
解决方法
它看起来像一个bug.我建议把它发布到
quality portal.
现在你可以声明类型别名来欺骗编译器(在XE7中测试). unit UDerClass; interface uses UBaseClass; type TDerOuterClass = class(TBaSEOuterClass) protected type TBaseInnerClass = TBaSEOuterClass.TBaseInnerClass; // <= type alias to avoid compiler error TDerInnerClass = class(TBaseInnerClass) end; protected function GetInnerInstance: TBaseInnerClass; override; end; implementation { TDerOuterClass } function TDerOuterClass.GetInnerInstance: TBaseInnerClass; begin Result := TDerInnerClass.Create; end; end. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |