从类助手访问私有字段
特定
type
TMyClass = class
private
FPrivateInt : Integer;
protected
FProtectedInt : Integer;
public
FPublicInt : Integer;
end;
在一个单位和
type
TMyHelper = class helper for TMyClass
function Sum : Integer;
end;
[...]
function TMyHelper.Sum: Integer;
begin
Result := 0;
Result := Result + FPublicInt;
Result := Result + FProtectedInt;
Result := Result + FPrivateInt; // <- compiler error here
end;
另一方面,XE8编译器报告错误“E2003未声明的标识符'FPrivateInt'。这是我直觉上预期的,因为如果我没有看到例子,那么在声明类的单元之外的私有成员的可见性受限Marco Cantu的Delphi 2007手册p89 / 90,它提供了一个访问“帮助”类的私有领域的类助手,并且在接受的答案的开头段落中提出了一个明确的陈述。
我可以用类助手调用静态私有类方法吗?
这似乎是支持它的:“众所周知,帮助者确实破坏了私人可见性,因此,私人成员可以从班级帮手中看到......”
那么,为什么我会收到E2003 Undeclared Identifier错误? 在我的理解或代码中,我明显错过了某个地方。 我使用XE4和XE6得到了同样的错误,顺便说一下,XE4在我之前引用的SO答案前,这是从去年开始的。
下面概述的解决方案适用于德尔福西雅图的版本。
出于我未知的原因,您需要使用Self
来限定私有实例成员。 所以,这个编译:
function TMyHelper.Sum: Integer;
begin
Result := 0;
Result := Result + FPublicInt;
Result := Result + FProtectedInt;
Result := Result + Self.FPrivateInt;
end;
与评论中的建议相反,方法也是如此。 你需要明确包含Self.
在helpee中调用私有方法。
在Delphi 10.1及其以后的版本中,不再可能通过助手访问strict private
或private
成员的帮助。