delphi – 将对象作为接口传递
发布时间:2020-12-15 09:39:32 所属栏目:大数据 来源:网络整理
导读:这应该是一个简单的答案,我相信它将是一个不, 但是从一个更大的项目中获取,我有一个界面和程序 iMyUnknown= interface(IInterface) ['..GUID..']end;procedure WorkObject(iObj :iMyUnknown); 我知道这很有效 var MyUnknown : iMyUnknown;begin if supports(
这应该是一个简单的答案,我相信它将是一个不,
但是从一个更大的项目中获取,我有一个界面和程序 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |