首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将TInterfacedObject转换为接口

将TInterfacedObject转换为接口
EN

Stack Overflow用户
提问于 2011-03-27 16:18:59
回答 2查看 2.1K关注 0票数 5

According to the Delphi docs,我可以使用as操作符将TInterfacedObject转换为接口。

但它对我不起作用。强制转换给出一个编译错误:“运算符不适用于此操作数类型”。

我使用的是Delphi2007。

下面是一些代码(一个控制台应用程序)。包含错误的行将被标记。

代码语言:javascript
复制
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.
EN

回答 2

Stack Overflow用户

发布于 2011-03-27 16:57:38

如果要使用As或Supports运算符,则需要将Guid添加到接口,例如:

代码语言:javascript
复制
type   
  IMyInterface = interface
    ['{00000115-0000-0000-C000-000000000049}']
    procedure Foo;   
  end; 

请参阅docwiki

票数 2
EN

Stack Overflow用户

发布于 2011-03-27 16:31:38

当您将对象o定义为正确的类型时,强制转换将是自动的。否则,您可以随时使用supports()和/或自己调用QueryInterface

代码语言:javascript
复制
var
  o: TMyInterfacedObject;
  i: IMyInterface;
begin
  try
    o := TMyInterfacedObject.Create;
    i := o;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5448013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档