flex3型铸造

时间:2009-11-26 12:12:40

标签: actionscript-3 flex flex3

有没有人知道Flex 3中两种类型转换方式之间的真正区别?

var myObject1:MyObject = variable as MyObject;
var myObject2:MyObject = MyObject(variable);

我更喜欢使用第二种方法,因为它会在类型转换失败时抛出Error,而第一种方法只返回n​​ull。但是还有其他差异吗?使用第一种方法可能有什么好处?

4 个答案:

答案 0 :(得分:5)

第二种类型的投射对于顶级(http://livedocs.adobe.com/flex/2/langref/)类型具有不同的行为,例如Array(obj)不会以您描述的直接方式进行转换;如果可能的话,它会从obj创建一个新的数组,即使obj是一个数组。

我确定这会导致意外行为的时间很少,但我总是因此而使用“as”。这意味着如果我

int(str) 

我知道这是“尝试转换”这个词的意思而不是“我保证是这样”的意思。

参考:从http://raghuonflex.wordpress.com/2007/07/27/casting-vs-the-as-operator/

获得了一些确认

答案 1 :(得分:2)

  • 如果演员失败,as方法会返回null
  • 如果转换失败,()方法将抛出错误。

如果variable的值与MyObject不兼容,myObject1将包含null,您会对null指针错误感到惊讶(< em> 1009:当您尝试访问它时,无法访问程序中稍后某处的空对象引用的属性或方法。。如果您使用MyObject(variable)语法进行投射,则会在同一行本身遇到类型强制错误( 1034:类型强制失败:无法将_转换为_ ) - 这是比以后在某个地方获得1009更有帮助,并想知道出了什么问题。

答案 2 :(得分:1)

我想我在本网站的某个地方看到as()稍微快一点,但我再也找不到问题了。

除了已多次询问此问题之外,您还会找到更深入的答案here

我最近在StackOverflow上搜索时发现了非常有用的[]标记,它只允许搜索用指定标记标记的问题。所以你可以像[actionscript-3] as vs cast那样进行搜索。这里有更多搜索提示:https://stackoverflow.com/search

不;具有讽刺意味的是,我无法找到关于性能的问题,并写下如何搜索不会丢失在我身上;)

答案 3 :(得分:0)

我认为当返回基类时,如果转换失败并且()抛出错误,则返回非null。