2
어떻게 무료 필드 내 개체 Rtti
델파이 (XE4)에 의해 수 있습니다?무료 개체의 필드 Rtti
는 동적으로
내가 필드를 찾을 수있는 모든 필드를 확보해야하지만 난 내가 그들을 해제하는 방법을 지금하지 않습니다 :
destructor TKnBase.Destroy;
var
AContext: TRttiContext;
AField: TRttiField;
begin
for AField in AContext.GetType(Self.ClassInfo).GetFields do
begin
-->free filed (AField)
end;
inherited;
end;
내가이 함께 시도했지만 작동하지 않습니다
destructor TKnBase.Destroy;
type
dp = ^TObject;
var
AContext: TRttiContext;
AField: TRttiField;
p: dp;
begin
for AField in AContext.GetType(Self.ClassInfo).GetFields do
begin
p := dp(NativeInt(AField) + AField.Offset);
TObject(p^).Free;
end;
inherited;
end;
감사합니다. 그러나 저는 이것을 알고 있습니다. 그러나 이것을 자유 필드에 대한 접근 방식으로 사용하고 싶지는 않습니다. 특정 조건에 문제가있는 것입니다. –
@ Pejman.Nik "특정 조건"으로 인해 RTTI를 사용하여 물건을 파괴해야합니까? –
또한,'GetType (Self.ClassInfo) .GetFields'도 파생 된 모든 필드를 검색하지 않습니까? 파생 된 소멸자와 기본 소멸자가 동일한 필드를 해제하려고 시도하면 위험합니다. 어쩌면'GetType (TKnBase) .GetDeclaredFields'가 필요할까요? –