.. _stdlib_interfaces: ========== 接口 ========== .. include:: detail/interfaces.rst interface 模块实现 [interface] 模式,该模式允许类公开多个接口。 所有函数和符号都在 “interfaces” 模块中,使用 require 来访问它。:: require daslib/interfaces 让我们回顾一下以下示例:: require daslib/interfaces [interface] class ITick def abstract beforeTick : bool def abstract tick ( dt:float ) : void def abstract afterTick : void [interface] class ILogger def abstract log ( message : string ) : void [implements(ITick),implements(ILogger)] class Foo def Foo pass def ITick`tick ( dt:float ) print("tick {dt}\n") def ITick`beforeTick print("beforeTick\n") return true def ITick`afterTick print("afterTick\n") def ILogger`log ( message : string ) print("log {message}\n") 在上面的示例中,我们定义了两个接口,ITick 和 ILogger。然后我们定义一个类 Foo,它实现了两个接口。类 Foo 必须实现两个接口的所有方法。类 Foo 可以实现其他方法,这些方法不是接口的一部分。 [implements] 属性用于指定类实现的接口。 [interface] 属性用于定义接口。此宏验证接口是否没有任何数据成员,只有方法。 通过模式匹配方法名称,接口方法会自动绑定到特定接口。例如,方法 “tick” 绑定到接口 ITick,因为方法名称以 “ITick'” 开头。方法 “log” 绑定到接口 ILogger,因为方法名称以 “ILogger'” 开头。 此外,还为 Foo 类生成 get'ITick 和 get'ILogger 方法。它们用于获取给定接口的接口对象。interface 对象用于调用接口方法。:: var f = new Foo() f->get`ITick()->beforeTick() f->get`ITick()->tick(1.0) f->get`ITick()->afterTick() f->get`ILogger()->log("hello") ++++++++++++++++ 结构宏 ++++++++++++++++ .. _handle-interfaces-interface: .. das:attribute:: interface 实现 'interface' 宏,该宏验证 class 是否为接口(没有自己的变量) .. _handle-interfaces-implements: .. das:attribute:: implements 实现 'implements' 宏,添加 get`{Interface} 方法以及接口绑定和实现。