Конвертировать неявно в Actionscript 3?

Можно ли конвертировать неявно, как это? Например:

Screen.as:

public class Screen
{
    protected var screen_:Sprite = new Sprite();

    public function Screen() {}
}

Main.as:

public function Main()
{
    Screen screen = new Screen();
    addToStage(screen); // somehow return Sprite `screen_`
}

private function addToStage(child:DisplayObject)
{
    stage.addChild(screen);
}

Редакция:

Так что это невозможно. Но, по крайней мере, я могу как-то переопределить addChild() метод передачи аргумента Screen или другие занятия?

2 ответа

Вы не сможете эффективно скрывать screen_ снаружи все, что вы делаете. Основная причина в том, что существует способ публичного перечисления списка отображения, интерфейс использует DisplayObjectContainer.numChildren а также DisplayObjectContainer.getChildAt(), которые оба являются публичными. Таким образом, ваше лучшее действие будет продлено Sprite с вашим Screen класс, отбросьте это защищенное свойство и используйте this всякий раз, когда вам нужно сделать что-то в виде спрайта. Таким образом, вам не понадобятся какие-либо хаки, чтобы представлять свой класс, каким бы он ни был, и быть в состоянии соответствовать основам SOLID принцип.

Конвертировать не очень. Но с помощью простого геттера вы все равно можете получить доступ к Sprite.

Screen.as:

public class Screen
{
    protected var screen_:Sprite = new Sprite();

    public function Screen() {}

    public function get sprite():Sprite{
        return screen_;
    }
}

Main.as:

public function Main()
{
    Screen screen = new Screen();
    var sprite:Sprite = addToStage(screen); //your desired Sprite
}

private function addToStage(child:DisplayObject):Sprite
{
    stage.addChild(screen);
    return screen.sprite;
}
Другие вопросы по тегам