考虑这个简单的代码:
当你运行此代码时,只有
{$APPTYPE CONSOLE}
uses
Rtti,
SysUtils;
type
{$M+}
TFoo = class
strict private
class var Field1 : Integer;
field2 : Integer;
private
field3 : Integer;
class var Field4 : Integer;
end;
Var
ctx : TRttiContext;
f : TRttiField;
begin
try
ctx:=TRttiContext.Create;
for f in ctx.GetType(TFoo).GetFields do
Writeln(f.Name);
Writeln('Done');
readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
当你运行此代码时,只有
field3
被列出。似乎RTTI不支持strict private
或class var
字段,那么问题是是否可能使用Rtti或其他方法访问Delphi类的strict private字段?
我读过RTTI.TRttiType.GetFields方法的文档,但没有提到这些限制。是否存在任何提到这样的限制的论文或文章?