Конфликты имен членов интерфейса в ActionScript 3 - PullRequest
0 голосов
/ 21 апреля 2010

Я пытаюсь создать класс ActionScript 3, который реализует два интерфейса.Интерфейсы содержат функции-члены с разными сигнатурами, но с одинаковым именем:

public interface IFoo
{
    function doStuff(input:int):void;
}

public interface IBar
{
    function doStuff(input1:String, input2:Number):void;
}

public class FooBar implements IFoo, IBar
{
    // ???
}

В C # (например) это не проблема, поскольку методы могут быть перегружены, но ActionScript не поддерживает перегрузку.Есть ли способ создать класс, который реализует оба интерфейса?

Ответы [ 2 ]

2 голосов
/ 20 декабря 2010

Нет, к сожалению, это невозможно, и это по той причине, которую вы уже указали: ActionScript 3 не поддерживает перегрузку элементов. Обидно, но это печальная правда.

В можно иметь несколько членов с одинаковым именем и даже одной и той же подписью в классе, однако в этом случае они должны быть квалифицированы по пространству имен. Например, это должно работать:

public namespace foo;
public namespace bar;

foo function doStuf(input:int):void
{
    // ...
}

bar function doStuff(input1:String, input2:String):void
{
    // ...
}

Затем вы ссылаетесь на методы, квалифицируя их следующим образом:

foo::doStuff(1);
bar::doStuff("foo", "bar");

К сожалению, это не поможет решить вашу проблему, поскольку, хотя пространства имен могут находиться в общедоступном пространстве имен, они все же не совпадают с самим публичным пространством имен, что означает, что вы не выполняете контракт, установленный интерфейсами все должно быть публично). Короче говоря если вы не используете какой-либо составной шаблон, вам не повезет, пока Adobe не решит реализовать перегрузку элементов.

1 голос
/ 21 апреля 2010

Публичный класс FooBar должен был бы реализовать оба взаимодействия и, следовательно, реализовать перечисленные функции. Проблема в том, что ActionScript не поддерживает перегрузку методов. Это хорошая функция, которую мне не хватает в C #: (

...