ActionScript中用户定义的类型转换?

时间:2010-09-24 14:57:51

标签: actionscript-3 type-conversion

我有什么方法可以在ActionScript中定义隐式或显式类型转换吗?

例如,我想定义一个转换,以便Array可以隐式地转换为MyClass。如果没有,那么显式演员会很有用。我知道我总是可以将它传递给我的构造函数,但我在这里处理语义,如果它存在,我最感兴趣的是转换解决方案。

1 个答案:

答案 0 :(得分:1)

在ActionScript 3中输入类型

Object(instanceOfOtherObject);

基于给定类的valueOf属性(如果已定义)工作。因此,您可以将MyClass定义为:

package {
    public class MyClass {

        private var myArray:Array;

        public function MyClass(inputArray:Array = null) {
            myArray = (inputArray ? inputArray : new Array());
        }

        public function valueOf():Array {
            return myArray;
        }
    }
}

然后您将能够执行此类型转换:

var mc:myClass = new MyClass();
var arr:Array = Array(myClass);

据我所知,反向不是一个选项,因为Array的valueOf函数不返回MyClass类型的对象。没有什么能阻止你创建一个CastableArray来扩展和覆盖Array的valueOf函数,使它使用我在上面定义的构造函数返回MyClass的实例,尽管你可能会遇到其他基本语言组件的其他问题,这些组件期望一个Array到在其valueOf属性中返回一个数组(想到对象的比较)。

我没有对下一个建议进行任何特定的测试,但是如果MyClass从Array扩展并且没有定义valueOf函数,那么仍然可以根据MyClass的构造函数和Flash的作用进行类型转换。未定义valueOf的情况。