大佬教程收集整理的这篇文章主要介绍了delphi – 传递接口的方法作为参数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试这样的事情:
interface type TMoveProc = procedure of object; // also tested with TMoveProc = procedure; // procedure of interface is not working ;) ISomeInterface = interface procedure Pred; procedure Next; end; TSomeObject = class(TObject) public procedure Move(MoveProc: TMoveProc); end; implementation procedure TSomeObject.Move(MoveProc: TMoveProc); begin while True do begin // Some common code that works for both procedures MoveProc; // More code... end; end; procedure Usage; var o: TSomeObject; i: ISomeInterface; begin o := TSomeObject.Create; i := GetSomeInterface; o.Move(i.Next); // somewhere else: o.Move(i.Prev); // tested with o.Move(@i.Next),@@... with no luck o.Free; end;
但它不工作,因为:
当然,我可以为每个电话做私人方法,但那是丑陋的.有没有更好的方法?
德尔福2006
编辑:
我知道我可以通过整个界面,但是我必须指定哪个功能使用.我不需要两个完全相同的程序与一个不同的呼叫.
我可以使用第二个参数,但也是丑陋的.
type SomeInterfaceMethod = (siPred,siNext) procedure Move(SomeInt: ISomeInterface; Direction: SomeInterfaceMethod) begin case Direction of: siPred: SomeInt.Pred; siNext: SomeInt.Next end; end;
感谢所有的帮助和想法.清洁的解决方案(对于我的Delphi 2006)是Diego的访客.现在我使用简单(“丑”)包装(我自己的,同样的解决方案由TOndrej和Aikislave).
但是真正的答案是“没有(直接)方式将接口的方法作为参数传递,而没有某种提供者.
interface type ISomeInterface = interface //... end; IMoveProc = interface procedure Move; end; IMoveProcPred = interface(IMoveProc) ['{4A9A14DD-ED01-4903-B625-67C36692E158}'] end; IMoveProcNext = interface(IMoveProc) ['{D9FDDFF9-E74E-4F33-9CB7-401C51E7FF1F}'] end; TSomeObject = class(TObject) public procedure Move(MoveProc: IMoveProc); end; TImplementation = class(TInterfacedObject,ISomeInterface,IMoveProcNext,IMoveProcPred) procedure IMoveProcNext.Move = Next; procedure IMoveProcPred.Move = Pred; procedure Pred; procedure Next; end; implementation procedure TSomeObject.Move(MoveProc: IMoveProc); begin while True do begin // Some common code that works for both procedures MoveProc.Move; // More code... end; end; procedure Usage; var o: TSomeObject; i: ISomeInterface; begin o := TSomeObject.Create; i := TImplementation.Create; o.Move(i as IMoveProcPred); // somewhere else: o.Move(i as IMoveProcNext); o.Free; end;
以上是大佬教程为你收集整理的delphi – 传递接口的方法作为参数全部内容,希望文章能够帮你解决delphi – 传递接口的方法作为参数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。