According to the Delphi docs,我可以使用as操作符将TInterfacedObject转换为接口。
但它对我不起作用。强制转换给出一个编译错误:“运算符不适用于此操作数类型”。
我使用的是Delphi2007。
下面是一些代码(一个控制台应用程序)。包含错误的行将被标记。
program Project6;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
IMyInterface = interface
procedure Foo;
end;
TMyInterfacedObject = class(TInterfacedObject, IMyInterface)
public
procedure Foo;
end;
procedure TMyInterfacedObject.Foo;
begin
;
end;
var
o: TInterfacedObject;
i: IMyInterface;
begin
try
o := TMyInterfacedObject.Create;
i := o as IMyInterface; // <--- [DCC Error] Project6.dpr(30): E2015 Operator not applicable to this operand type
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.发布于 2011-03-27 16:57:38
如果要使用As或Supports运算符,则需要将Guid添加到接口,例如:
type
IMyInterface = interface
['{00000115-0000-0000-C000-000000000049}']
procedure Foo;
end; 请参阅docwiki
发布于 2011-03-27 16:31:38
当您将对象o定义为正确的类型时,强制转换将是自动的。否则,您可以随时使用supports()和/或自己调用QueryInterface。
var
o: TMyInterfacedObject;
i: IMyInterface;
begin
try
o := TMyInterfacedObject.Create;
i := o;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.https://stackoverflow.com/questions/5448013
复制相似问题