Ale*_*lex 3 actionscript actionscript-3
我有两个接口声明具有相同名称但不兼容的签名的函数:
interface IDog
{
function bark() : void;
}
interface IAdvancedDog
{
function bark(volume : Number) : void;
}
Run Code Online (Sandbox Code Playgroud)
我需要在同一个类中实现它们,如下所示:
class AlphaDog implements IDog, IAdvancedDog
{
public function bark() : void
{
}
public function bark(volume : Number) : void
{
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用.在这种情况下,有没有办法消除bark()函数的歧义?例如,C#允许显式接口标记:
class AlphaDog : IDog, IAdvancedDog
{
// ...
void IDog.bark() { }
}
Run Code Online (Sandbox Code Playgroud)
虽然由于函数重载规则,C#中不需要这样做.AS3中没有超载,有没有其他方法可以解决这个问题?
UPDATE.
1)在课堂定义中缺少'公共'限定符是一个错字.我修好了它.
2)我错过了一个额外的要求,即不能修改接口(为了这个问题的目的).在实际项目中,它们被定义在两个不同的库中,这些库是大型项目的一部分.多个类实现两个接口(单独).因此,接口的任何更改都需要对所有这些类进行级联更新,重新编译,测试等.因此,我想首先找出是否存在没有这种侵入式修改的解决方案.它似乎没有.
ActionScript 3不支持这样的函数重载.此外,您没有定义函数是否公开,您将收到编译错误.
在您的情况下,您可以做的是添加默认的NaN并且只有一个接口.
package{
public class AlphaDog implements IDog
{
public function bark(volume : Number = NaN) : void
{
}
}
}
package{
interface IDog
{
function bark(volume : Number = NaN) : void;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2140 次 |
| 最近记录: |