Я думаю, что функциональность была поглощена TRttiMethod. Он имеет свойства IsConstructor, IsDestructor и IsClassMethod, так что его можно использовать как для «специальных» методов, так и для обычных.
Что касается вопроса 2, попробуйте что-то вроде этого:
function GetConstructor(val: TRttiInstanceType): TRttiMethod;
var
method: TRttiMethod;
begin
for method in val.GetMethods('Create') do
begin
if (method.IsConstructor) and (length(method.GetParameters) = 0) then
exit(method);
end;
raise EInsufficientRTTI.CreateFmt('No simple constructor available for class %s ',
[val.MetaclassType.ClassName]);
end;
Находит самый высокий конструктор с именем Create
, который не принимает параметров. Вы можете изменить его, чтобы искать другие конструкторы с другими сигнатурами, если вы знаете, что ищете. Затем просто позвоните Invoke
, чтобы получить результат.