我有什么方法可以在ActionScript中定义隐式或显式类型转换吗?
例如,我想定义一个转换,以便Array
可以隐式地转换为MyClass
。如果没有,那么显式演员会很有用。我知道我总是可以将它传递给我的构造函数,但我在这里处理语义,如果它存在,我最感兴趣的是转换解决方案。
答案 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的情况。