我需要访问严格的保护属性,因为我需要创建一个验证(基于此属性的值)以避免错误. (我没有具有此属性的第三方类的源代码)只有我有类(接口)和dcu的定义(所以我不能更改属性可见性).问题是存在一种访问严格保护财产的方法? (我真的读了
Hallvard Vassbotn Blog,但是我没有找到关于这个特定主题的东西.)
解决方法
这个类帮助器示例编译好:
type TMyOrgClass = class strict private FMyPrivateProp: Integer; strict protected property MyProtectedProp: Integer read FMyPrivateProp; end; TMyClassHelper = class helper for TMyOrgClass private function GetMyProtectedProp: Integer; public property MyPublicProp: Integer read GetMyProtectedProp; end; function TMyClassHelper.GetMyProtectedProp: Integer; begin Result:= Self.FMyPrivateProp; // Access the org class with Self end;
有关课堂助手的更多信息可以在这里找到:should-class-helpers-be-used-in-developing-new-code
更新
从Delphi 10.1柏林开始,使用类助手访问私人或严格的私人会员不行.它被认为是一个编译器错误,并已被更正.仍然允许访问受保护或严格保护的成员与类帮助者.
在上面的例子中,说明了对私有成员的访问.下面显示了访问严格受保护成员的工作示例.
function TMyClassHelper.GetMyProtectedProp: Integer; begin Result:= Self.MyProtectedProp; // Access strict protected property end;