我正在尝试理解http://docs.ceph.com/docs/hammer/radosgw/s3/csharp/课程。
{$APPTYPE CONSOLE}
uses
SysUtils, Rtti;
type
ISpecificInterface = interface(IInvokable)
['{281D8B97-397E-430A-895A-9CA4E1F5FB5F}']
procedure SpecificProcedure;
end;
procedure AProcedure(Method: TRttiMethod; const Args: TArray<TValue>;
out Result: TValue);
begin
Writeln(Method.ToString);
end;
var
ISpecificInterfaceInstance: ISpecificInterface;
begin
ISpecificInterfaceInstance := TVirtualInterface.Create
(TypeInfo(ISpecificInterface), AProcedure) as ISpecificInterface;
ISpecificInterfaceInstance.SpecificProcedure;
end. // TVirtualInterface ref. counter is decremented
在运行时实现接口有什么好处?
空间的用途是什么?
答案 0 :(得分:5)
说明为here
提供远程过程调用封送的功能......
答案 1 :(得分:4)
有很多种方法可以使用它,但它们都有共同点,因为你使用的是接口,调用方并不关心实现的样子 - 如果它是一个实现接口的实际类编译时或者如果你在运行时通过TVirtualInterface
或其他方式动态实现它,只要它根据接口契约行为。
当这首次在XE2中引入时,我写了article about it及其可能的用法。正如在评论中提到的,这实际上使我们能够以非常简单的方式实现模拟框架,只需通过声明通用的模拟类型,在内部创建一个接口代理来处理模拟中指定的调用。