【问题标题】:Delphi Interfacing [duplicate]Delphi接口[重复]
【发布时间】:2015-12-04 20:19:40
【问题描述】:

晚上好,

我正在尝试使用 dUnit 和 PascalMock 对我的一些 Delphi 代码进行单元测试。

有大量的遗留代码根本没有接口,它们还包含传入自身对象的参数,例如:

TSelf = Class
  Function Hello(self: TSelf);
end;

然后我尝试将接口应用于 TSelf:

ISelf = Interface(IInterface)
  Function Hello(self: TSelf)
end;

TSelf = Class(TInterfacedObject, ISelf)
  Function Hello(self: TSelf);
end;

这显然是失败的,因为“TSelf”是未定义的,这些是具有许多使用 TSelf 作为参数的函数的大型对象,我唯一的选择是将这些更改为 TObject 吗?并在方法中将它们强制转换为 TSelf?

我们将不胜感激任何帮助,因为它目前阻止我进行自动测试。

或者是否有不需要接口的模拟框架?

谢谢。

【问题讨论】:

    标签: delphi interface


    【解决方案1】:

    你可以使用前向类声明

    type
      TSelf = class;
    
      ISelf = Interface
        procedure Hello(ASelf: TSelf);
      end;
    
      TSelf = Class(TInterfacedObject, ISelf)
        procedure Hello(ASelf: TSelf);
      end;
    

    但在这种情况下,必须在同一类型声明部分中定义完整的 TSelf 类声明。

    作为旁注,使用self 作为参数名称会造成混淆,并且无法编译代码以及没有结果类型的函数。

    【讨论】:

    • 这行得通,非常感谢。我给出的代码示例只是我想尝试并给出我试图实现的目标的粗略示例,但是,您的 cmets 是正确的,我将在未来提出任何问题时接受它们。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 2015-11-06
    • 2010-11-28
    • 2014-02-27
    • 2013-04-19
    • 2011-09-18
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多