delphi – 将对象作为接口传递

delphi – 将对象作为接口传递,第1张

概述这应该是一个简单的答案,我相信它将是一个不, 但是从一个更大的项目中获取,我有一个界面和程序 iMyUnknown= interface(IInterface) ['..GUID..']end;procedure WorkObject(iObj :iMyUnknown); 我知道这很有效 var MyUnknown : iMyUnknown;begin if supports(ob @H_404_0@ @H_404_0@ 这应该是一个简单的答案,我相信它将是一个不,
但是从一个更大的项目中获取,我有一个界面和程序

iMyUnkNown= interface(IInterface) ['..GUID..']end;procedure WorkObject(iObj :iMyUnkNown);

我知道这很有效

var   MyUnkNown : iMyUnkNown;begin if supports(obj,iMyUnkNown,MyUnkNown) then  WorkObject(MyUnkNown);

但有可能做这样的事情吗?

if supports(obj,iMyUnkNown) then  WorkObject(obj as iMyUnkNown);
解决方法 你为什么要演员?

如果obj支持接口,那么您需要做的就是在将它传递给过程之前检查它,您可以简单地传递对象本身.编译器将负责其余的工作.如果要访问接口的方法,则只需要Supports调用上的第三个参数.

编译并运行下面的代码.它应该编译没有错误,并为您提供一个控制台窗口和一个对话框消息.

program Project1;{$APPTYPE CONSolE}uses  Classes,Dialogs,SysUtils  ;type  iMyUnkNown = interface(IInterface)  ['{DA867EBA-8213-4A91-8E03-1AACA150CE77}']    procedure DoSomething;  end;  TMuster = class(TInterfacedobject,iMyUnkNown)    procedure DoSomething;  end;procedure WorkObject(iObj: iMyUnkNown);begin  if Assigned(iObj) then ShowMessage('Got something');end;{ TMuster }procedure TMuster.DoSomething;begin  beep;end;var  obj: TMuster;begin  try    obj := TMuster.Create;    if Supports(obj,iMyUnkNown) then      WorkObject(obj);  except    on E:Exception do      Writeln(E.Classname,': ',E.Message);  end;end.
@H_404_0@ 总结

以上是内存溢出为你收集整理的delphi – 将对象作为接口传递全部内容,希望文章能够帮你解决delphi – 将对象作为接口传递所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1268880.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存