2009-11-26 206 views
4

有誰知道Flex 3中兩種類型鑄造方式之間的真正區別嗎?flex3類型鑄造

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

我更喜歡使用第二種方法,因爲當類型轉換失敗將拋出一個錯誤,而第一種方法只會返回null。但是還有其他的區別嗎?也許使用第一種方法有什麼好處?

回答

5

第二種類型的鑄造對頂級(http://livedocs.adobe.com/flex/2/langref/)類型具有不同的行爲,例如,數組(obj)不會以您描述的直接方式進行轉換;它可以從obj創建一個新的數組,即使obj是一個數組。

我敢肯定,這會造成意想不到的行爲的時代將是罕見的,但我總是使用「爲」的原因。這意味着,如果我做

int(str) 

我知道這是在「試圖轉換」不能在「我保證這是」感覺意義上的字的演員。

裁判:有一些這方面的確認函http://raghuonflex.wordpress.com/2007/07/27/casting-vs-the-as-operator/

+0

因此''as數組和(')'其餘。 – Amarghosh

+0

我總是使用「as」來鑄造。 –

2
  • 如果轉換失敗,as方法返回null
  • 如果轉換失敗,()方法會拋出並出錯。

如果variable值不與MyObject兼容,myObject1將包含null,你會被一個null指針誤差驚訝(1009:無法訪問空對象引用的屬性或方法)某處稍後在程序中嘗試訪問它時。如果您使用MyObject(variable)語法進行投射,您將在同一行本身獲得類型強制錯誤(1034:類型強制失敗:無法將_轉換爲_) - 這比稍後在某處獲得1009更有幫助,想知道出了什麼問題。

+0

是的,這就是我在問題中所說的。我想知道是否還有其他的區別,因爲我真的不知道'as'方法的優點是什麼...... –

+0

我能想到的沒有什麼優勢 - 我總是使用第二個。 – Amarghosh

+2

有一些副作用:Array(obj)不會以您描述的直接方式進行轉換;它可以從obj創建一個新的數組,即使obj是一個數組。我敢肯定,這會造成意想不到的行爲的時代將是罕見的,但我總是使用「爲」這個原因。這意味着如果我做int(str),我知道這是一個在「rebo​​x」意義上的單詞,而不是「我保證它是」的意思。 – susichan

1

我覺得我在這個網站上as是略低的速度比()在其他地方見過,但我不能再次找到的問題。

除此之外,這個問題已被詢問了很多次,你會發現一個更深入的答案here

我最近在StackOverflow上搜索時發現了非常有用的[]標籤,它只允許在標有指定標籤的問題上進行搜索。所以你可以做一個像[actionscript-3] as vs cast的搜索。這裏有更多的搜索提示:https://stackoverflow.com/search

而且沒有;具有諷刺意味的是,我找不到關於性能的問題,並且寫下關於如何搜索的問題並不會在我身上丟失;)

0

我認爲當返回基類時不會返回null,並且()拋出一個錯誤。

+0

你讀過其他答案嗎? –