【发布时间】:2013-05-08 03:22:56
【问题描述】:
我有以下代码
IProxy<T> = interface
['{1E3A98C5-78BA-4D65-A4BA-B6992B8B4783}']
function Setup : ISetup<T>;
function Proxy : T;
function CastAs<I : IInterface> : IInterface;
end;
有没有办法解决编译时收到的编译器错误?
“[DCC 错误] Delphi.Mocks.pas(123): E2535 接口方法不能有参数化方法”
基本上,我希望通过传入要转换为的类型并返回该类型来传递此接口并能够将其丢弃。我可以通过一个类来实现这一点,但是更喜欢传递一个接口。
附加信息:
假设我有以下课程
TInterfaceProxy<T> = class(TBaseProxy<T>)
private type
TProxyVirtualInterface = class(TVirtualInterface)
private
FProxy : TInterfaceProxy<T>;
protected
public
function QueryInterface(const IID: TGUID; out Obj): HRESULT; override; stdcall;
constructor Create(AProxy : TInterfaceProxy<T>; AInterface: Pointer; InvokeEvent: TVirtualInterfaceInvokeEvent);
end;
private
FVirtualInterfaces : TDictionary<TGUID, TProxyVirtualInterface>;
protected
function InternalQueryInterface(const IID: TGUID; out Obj): HRESULT; stdcall;
function QueryInterface(const IID: TGUID; out Obj): HRESULT; override;
function Proxy : T;override;
function CastAs<I: IInterface> : I;
public
constructor Create;override;
destructor Destroy;override;
end;
CastAs 在这里工作得很好,因为新请求的演员可以创建一个新的虚拟接口。现在,如果我想通过这门课就可以了。但是,如果我需要它作为接口,即TInterfaceProxy<T> = class(TBaseProxy<T>, IProxy<T>),它不起作用,请理解这一点。不同意,但理解。
因此,我如何绕过这个限制,以便我可以调用 CastAs 函数、传入一个类型(以任何接口类型开头),并能够从中创建虚拟接口?
【问题讨论】: