无法访问受保护的符号?

Dom*_*mus 0 delphi protected delphi-xe2

我越来越

无法访问受保护的符号TParent.Test

用于以下代码:

在Unit1:

TParent = class
protected
  function Test: TParent;
end;

implementation

function TParent.Test: TParent;
begin
  Result := Self
end;
Run Code Online (Sandbox Code Playgroud)

在第2单元:

uses Unit1;

type

TChild = class(TParent)
end;

implementation

var c: TChild;
begin
  c := TChild.Create;
  c.Test.Test
end;
Run Code Online (Sandbox Code Playgroud)

TChild不应该可以访问返回值吗?

c.Test;
c.Test
Run Code Online (Sandbox Code Playgroud)

当然是有效的.

Dsm*_*Dsm 6

返回值是到年掳访问,但你正在尝试做的是通过年掳内的TParent这是微妙的不同访问它.

这样想吧.

c.Test是一个TParent,是吗?

现在假设你有一个像这样定义的TParent

var 
  c: TChild;
  p: TParent
begin
  c := TChild.Create;
  p := c.Test;
  p.Test;
end;
Run Code Online (Sandbox Code Playgroud)

这与您的代码完全相同.应该能够访问测试吗?不,因为它受到保护(并且在不同的单元中).