actionscript-3 - AS3 : two functions with the same name but incompatible signatures from two interfaces

标签 actionscript-3 actionscript

我有两个接口(interface),它们声明具有相同名称但签名不兼容的函数:

interface IDog 
{
    function bark() : void;
}

interface IAdvancedDog
{
    function bark(volume : Number) : void;
}

我需要在同一个类中实现两者,如下所示:

class AlphaDog implements IDog, IAdvancedDog
{
     public function bark() : void
     {
     }

     public function bark(volume : Number) : void
     {
     }
}

这当然是行不通的。在这种情况下,有没有办法消除 bark() 函数的歧义?例如,C# 允许显式接口(interface)标记:

   class AlphaDog : IDog, IAdvancedDog
   {
       // ...
       void IDog.bark() { } 
   }

尽管由于函数重载规则,C# 中不需要这样做。 AS3中没有重载,那么有没有其他方法可以解决这个问题?

更新。

1) 类定义中缺少“public”限定符是一个拼写错误。我修好了它。

2)我错过了一个额外的要求,即接口(interface)不能被修改(出于这个问题的目的)。在实际项目中,它们在两个不同的库中定义,这两个库是大型项目的一部分。多个类(分别)实现这两个接口(interface)。因此,接口(interface)的任何更改都需要对所有这些类进行级联更新、重新编译、测试等。因此,我想首先找出是否有一个无需进行此类侵入式修改的解决方案。好像没有。

最佳答案

ActionScript 3 不支持这样的函数重载。 再加上您没有定义函数是否为公共(public)的事实,您将收到编译错误。

根据您的情况,您可以做的是添加默认值 NaN 并且只有一个接口(interface)。

package{
  public class AlphaDog implements IDog
    {
         public function bark(volume : Number = NaN) : void
         {
         }
    }
}


package{
    interface IDog
    {
        function bark(volume : Number = NaN) : void;
    }
}

关于actionscript-3 - AS3 : two functions with the same name but incompatible signatures from two interfaces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9121106/

相关文章:

actionscript-3 - Dart中AS3的foo:*等价于什么?

javascript - 我如何在 AIR Android 应用程序中在 JS 和 AS3 之间进行通信?

flash - 在 Box2D 中绘制自定义多边形

actionscript - Away3D 4.0 从数组加载图元的动态纹理

audio - ActionScript 3.0 中缺少 Sound.position 属性

flash as3 使用 curveTo 绘制一个 donut 楔形(具有内外半径的圆弧)

javascript - 将数据从 JavaScript 传递到 ActionScript

flash - AS3 如何检查 BitmapData 是否为空

actionscript-3 - 如何检查文件是否存在?

actionscript-3 - ActionScript 函数定义