gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:35:39 25 4
gpt4 key购买 nike

我有两个接口(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com