AS3: Разработка пользовательского класса коллекции - PullRequest
1 голос
/ 15 сентября 2010

Задача:

Разработка класса, который представляет собой набор других объектов и может использоваться в для каждого (..)

public class Cards
{
    public function add( $Card : Card ) { ... }
}

//...

var $Cards:Cards = new Cards();
//...
for each ( var $Card:Card in $Cards) {
    // do things
}

Мой первый пользователь должен был использовать класс Array в качестве родительского:

public class Cards extends Array { ... }

Это прекрасно работает, но класс Cards наследует множество Массив открытых методов, которые не должны быть видны в Картах объектах типа sort () , push () , forEach () и т. д.

Вторая попытка заключалась в определении базового класса как dynamic :

public dynamic class Cards { ... }

Это работает, но вВ этом случае я должен определить каждый дочерний класс как динамический:

public dynamic class Cards { ... }
...
var $Cards:Cards = new Cards();
$Cards.add( new Card() ); // works well

, но

public class Player_Cards extends Cards { ... }
...
var $PlayerCards:Cards = new Player_Cards();
$PlayerCards.add( new Card() ); // error, Player_Class should be defined as dynamic too   

Интересно, что если я использую Array класс как родительский. Я не должен определять дочерние классы как динамический

Итак, вопрос : возможно ли создать класс сбора в AS3, который мог бы бытьиспользуется в для каждого (...) и не будет продолжатьсяЕсть ли какие-нибудь ненужные методы (например, из Array class)?

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

Вы можете сделать это, расширяя класс Proxy .

Проверьте этот вопрос , чтобы узнать, как это сделать.

0 голосов
/ 15 сентября 2010

Вы должны иметь возможность подкласса Object и реализовать propertyIsEnumerable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...