Actionscript 3 在Actionscript 3中隐式转换?

Actionscript 3 在Actionscript 3中隐式转换?,actionscript-3,Actionscript 3,可以这样隐式转换吗? 例如: Screen.as: public class Screen { protected var screen_:Sprite = new Sprite(); public function Screen() {} } public class Screen { protected var screen_:Sprite = new Sprite(); public function Screen() {} public f

可以这样隐式转换吗? 例如:

Screen.as:

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

    public function Screen() {}
}
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();
    addToStage(screen); // somehow return Sprite `screen_`
}

private function addToStage(child:DisplayObject)
{
    stage.addChild(screen);
}
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;
}
编辑:


所以这是不可能的。但至少,我可以以某种方式重写
addChild()
方法来传递
Screen
或其他类的参数吗?

转换,实际上不是。但是使用一个简单的getter,您仍然可以访问Sprite

Screen.as:

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

    public function Screen() {}
}
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();
    addToStage(screen); // somehow return Sprite `screen_`
}

private function addToStage(child:DisplayObject)
{
    stage.addChild(screen);
}
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;
}

无论您做什么,您都无法有效地从外部隐藏
屏幕
。主要原因是有一种公开枚举显示列表的方法,接口使用和
DisplayObjectContainer.getChildAt()
,这两种方法都是公开的。因此,您最好的操作是使用
屏幕
类扩展
精灵
,删除受保护的属性,并在需要作为精灵执行某些操作时使用
。这样,您就不需要任何黑客来表示您的类,无论它是什么样的,并且能够遵守基本原则。

关于您的编辑,请注意,即使是您中的任何一位也会实现
addChild()
,这样
屏幕
将显示在某个内容的显示列表上,通过调用
getChildAt()
,某些东西仍然能够到达它——那么为什么要保护那些如果使用就会公开的东西呢?更重要的是,您的
屏幕的内容将可以通过该链接访问。我已经添加了一个方法
addTo(父:DisplayObjectContainer)
。你只需要像这样进入
阶段
screen.addTo(阶段)。顺便说一下,我已经编辑了我的问题,问了一个小的加法问题。