加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[示例] 访问类的私有属性

发布时间:2020-12-15 04:38:39 所属栏目:大数据 来源:网络整理
导读:如何访问类的私有属性? 下面以 TPathData 为例,它有一个私有属性 PathData,储存了每一个曲线点,但一般无法修改它,需要利用下面方法,才能访问修改(若有更好的方法,歡迎分享): 一、利用 RTTI 取得类私有属性 : = helper PathData: TList span style

如何访问类的私有属性?

下面以 TPathData 为例,它有一个私有属性 PathData,储存了每一个曲线点,但一般无法修改它,需要利用下面方法,才能访问修改(若有更好的方法,歡迎分享):

一、利用 RTTI 取得类私有属性

= helper PathData: TList<span style="color: #0000ff">function TPathDataHelper.PathData: TList<span style="color: #000000">;
<span style="color: #0000ff">var
<span style="color: #000000"> Context1: TRttiContext;
Type1: TRttiType;
Field1: TRttiField;
<span style="color: #0000ff">begin
<span style="color: #000000">
Context1 :
= TRttiContext.<span style="color: #0000ff">Create
<span style="color: #000000">;
Type1 :
=<span style="color: #000000"> Context1.GetType(TPathData);
Field1 :
= Type1.GetField(<span style="color: #800000">'<span style="color: #800000">FPathData<span style="color: #800000">'<span style="color: #000000">);

 </span><span style="color: #0000ff"&gt;if</span> Assigned(Field1) <span style="color: #0000ff"&gt;then</span><span style="color: #000000"&gt;
      Result :</span>= Field1.GetValue(Self).AsObject <span style="color: #0000ff"&gt;as</span> TList<TPathPoint>
 <span style="color: #0000ff"&gt;else</span> Result := <span style="color: #0000ff"&gt;nil</span><span style="color: #000000"&gt;;

<span style="color: #0000ff">end;

参考:(VKHelper,感谢 swish)

二、利用仿类将私有属性改成公有

type TPathDataHack = class(TInterfacedPersistent) public FOnChanged: TNotifyEvent; FStyleResource: TObject; FStyleLookup: string; FStartPoint: TPointF; FPathData: TList; end;

TPathDataHelper = class helper for TPathData
public
function PathData: TList;
end;

function TPathDataHelper.PathData: TList;
begin
Result := TPathDataHack(Self).FPathData;
end;

参考:

三、直接使用 with Self do(此法最简单):(2017/09/04)

type TPathDataHelper = class helper for TPathData public procedure SetPoint(const AIndex: Integer; const PathPoint: TPathPoint); end;

procedure TPathDataHelper.SetPoint(const AIndex: Integer; const PathPoint: TPathPoint);
begin
with Self do // 必需使用 with Self do
FPathData[AIndex] := PathPoint;
end;

(感谢 [深圳]cjc 提供)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读