Я использую Delphi 10.1 Berlin update 2. Ниже приведен код, который воспроизводит проблему:
uses
System.SysUtils,
Rtti;
type
TEnum = (t1, t2);
TIndexedEnum = (to1=1, to2);
TClass1 = class
constructor Create(pEnum: TEnum);
end;
TClass2 = class
constructor Create(pEnum: TIndexedEnum);
end;
constructor TClass1.Create(pEnum: TEnum);
begin
end;
constructor TClass2.Create(pEnum: TIndexedEnum);
begin
end;
function MethodParamCount(pMethodName: String; pClass: TClass): Integer;
var
rContext: TRttiContext;
rType: TRttiType;
FMethods: TArray<TRttiMethod>;
I: Integer;
begin
rContext := TRttiContext.Create;
rType := rContext.GetType(pClass);
FMethods := rType.GetMethods;
for I := Low(FMethods) to High(FMethods) do
if SameText(pMethodName, FMethods[I].Name) then
begin
Result := Length(FMethods[I].GetParameters);
Exit;
end;
Result := -1;
end;
begin
WriteLn(IntToStr(MethodParamCount('Create', TClass1))); // Prints 1
WriteLn(IntToStr(MethodParamCount('Create', TClass2))); // Prints 0
ReadLn;
end.
Это ошибка реализации RTTI или я что-то упустил? Есть ли способ обойти эту проблему без изменения реализации класса?
Редактировать: Я хочу найти конструктор без каких-либо параметров, чтобы я мог вызвать его с помощью Invoke()
. Дело в том, что RTTI говорит мне, что для метода, у которого действительно есть параметр, нет параметров.