我创建了两个单位,并将一个第一类放入其中一个单位:
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.
当我尝试编译时,出现以下错误信息:
[dcc32 Error] UDerClass.pas(22): E2362 无法访问受保护的符号 TBaseOuterClass.TBaseInnerClass
该错误出现在函数 TDerOuterClass.GetInnerInstance: TBaseOuterClass.TBaseInnerClass; 的代码行。
我不明白为什么 TBaseOuterClass.TBaseInnerClass(作为内部受保护类)无法从 TDerOuterClass(派生自 TBaseOuterClass)中访问。在这种情况下,受保护类型的实际用途是什么?
我在 Nested Type Declarations topic 中没有找到任何解释。那么,这种行为背后是否有原因?
这也与简单的受保护类型相关。
protected type
TSimpleType = Integer;
我无法在 TDerOuterClass 中编写函数
protected
function GetValue: TSimpleType;
由于我会收到一条消息
[dcc32错误] UDerClass.pas(16): E2003未声明的标识符: 'TSimpleType'