我正在使用Delphi中定义的一个类进行工作,该类如下所示:
我需要使用RTTI检索
然而,我发现
我该如何使用RTTI只获取可用于创建
非常感谢您提供任何指导或建议。
type
TMyObject = class(TObject)
constructor Create(a: string); overload; virtual;
constructor Create(b: integer); overload; virtual;
end;
我需要使用RTTI检索
TMyObject
的构造函数列表。我尝试使用TRttiType
实例的GetMethods('Create')
函数来实现:var
Context: TRttiContext;
RttiType: TRttiType;
Method: TRttiMethod;
begin
Context := TRttiContext.Create;
RttiType := Context.GetType(TMyObject);
for Method in RttiType.GetMethods('Create') do
begin
// Process method
end;
然而,我发现
GetMethods('Create')
也会返回从TObject
继承的Create方法,这对于创建TMyObject
实例来说是不合适的,因为TMyObject的构造函数中有额外的参数。我该如何使用RTTI只获取可用于创建
TMyObject
实例的TMyObject
构造函数?换句话说,我想排除从TObject
或其他祖先继承的不能正确初始化TMyObject
的构造函数。是否有办法使用RTTI识别和过滤掉这些不合适的构造函数?非常感谢您提供任何指导或建议。
TRttiMethod.IsConstructor
来进行过滤,而不仅仅是根据名称。另外,构造函数也可以重命名为CreateByString()
和CreateByInt()
,然后使用标准的TRttiType.GetMethod()
方法即可。 - Remy Lebeau