Я заметил странную ошибку с классом TVirtualInterface. Я пытался что-то вроде следующего:TVirtualInterface вызывает неправильное событие invoke
ITest1 = interface
procedure Test1();
End;
ITest2 = Interface(ITest1)
procedure Test2();
End;
ITest3 = Interface(ITest2)
procedure Test3();
ENd;
procedure Test();
var
test : ITest3;
begin
test := TVirtualInterface(TypeInfo(ITest3),
procedure(Method: TRttiMethod;
const Args: TArray<TValue>; out Result: TValue)
begin
showMessage(Method.Name);
end) as ITest3;
test.test1();
test.test2();
test.test3();
End;
Код выше работает отлично. Если я изменить это так:
ITest3 = Interface(ITest2)
procedure Test3();
function GetLabel : string;
property Label : string read GetLabel;
ENd;
и я называю:
showmessage(test.Label);
... он все еще работает.
Но если я переведу это свойство в ITest2 или ITest1, вызовы некоторых методов из ITest1, ITest2 или ITest3 вызовут неправильный метод (например, test.Test2() отобразит «Test3»), либо сбой (нарушение доступа).
Любые объяснения и/или исправление на это?
Edit >> К сожалению, на самом деле это на самом деле, кажется, не в состоянии только со свойствами вида:
property Item[Name : string] : X read GetX write SetX;
Хорошо, спасибо. Слишком плохо, у меня нет XE4 ... Мне придется работать, не используя эту функцию ... – John5