溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

as和強(qiáng)制類型轉(zhuǎn)換的區(qū)別

發(fā)布時(shí)間:2020-07-01 06:09:18 來源:網(wǎng)絡(luò) 閱讀:586 作者:liky1986 欄目:編程語言

 之前一直以為as就是強(qiáng)制類型轉(zhuǎn)換,只是as是AS3中新的語法,之前用在有繼承關(guān)系的對象之間的轉(zhuǎn)換也無甚區(qū)別,但是今天卻讓我領(lǐng)悟到了它倆之間的區(qū)別。

原起:今天要給ColorPicker控件動(dòng)態(tài)賦值,它的selectedColor屬性接收的是一個(gè)uint屬性,而我要從另一個(gè)對象中拿過來的屬性是String的,理所當(dāng)然的我寫了如下的代碼:

經(jīng)過:

  1. var color:uint = str as uint;//str是String類型,大概是這個(gè)樣子

var color:uint = str as uint;//str是String類型,大概是這個(gè)樣子
      顯然,沒有效果,跟蹤之后,color是null值,于是換成
  1. var color:uint = uint(str);  

var color:uint = uint(str);
      這樣卻好使了,好奇的我google了一下,果然有關(guān)于我遇到的問題。


      文中是這樣說的,作者與我遇到了同樣的問題,以下是引用內(nèi)容,轉(zhuǎn)自http://www.cnblogs.com/Longbin/articles/2064004.html:

以前AS中是這樣進(jìn)行強(qiáng)制類型轉(zhuǎn)換的:假設(shè)有一個(gè)類叫做Class1,我們聲明了一個(gè)它的對象

c1,如果想要將它轉(zhuǎn)換成Class2類型,只要這樣寫:

Class2(c1);


在AS3中你依然可以這樣寫,但是AS3 中提供了一個(gè)新的操作符: as ,并且推薦使用as
進(jìn)行強(qiáng)制轉(zhuǎn)換,上述的例子用 as 操作符實(shí)現(xiàn)就是這樣:

c1 as Class2;

使用 as 操作符有幾個(gè)好處:

1.它的效果和第一種方法是一樣的。
2.如果類型不兼容無法轉(zhuǎn)換,就會返回null,而不是出錯(cuò)。這樣你就可以自定義錯(cuò)誤的時(shí)候該做什么。
3.沒有運(yùn)行時(shí)錯(cuò)誤(Run Time Error)提示。

不過有些時(shí)候我在使用 as 的時(shí)候并不能達(dá)到強(qiáng)制轉(zhuǎn)換的目的,在AS3.0類庫中最高層類(Top Level classes,所有Top Level
classes的列表)之間進(jìn)行強(qiáng)制轉(zhuǎn)換時(shí), as 操作符是不起作用的。比如,假如你想要將一個(gè)String 類型的字符串 str 轉(zhuǎn)換成
Number 類型的數(shù)字 num 時(shí),可能想要這樣寫:

num = str as Number;

這樣寫是沒有用的,你只能通過第一種方法來達(dá)到強(qiáng)制轉(zhuǎn)換的目的:

num = Number(str);

PS:如果我們用as來轉(zhuǎn)換的話,除非MyObj1和MyObj2有繼承關(guān)系,否則轉(zhuǎn)換將失敗,而用強(qiáng)制類型轉(zhuǎn)換則不一定,只要MyObj1類有自定義類型轉(zhuǎn)換函數(shù)MyObj2,則可能轉(zhuǎn)換成功,因?yàn)閺?qiáng)制類型轉(zhuǎn)換針對的是編譯時(shí)類型,而對于編譯時(shí)類型o1為object類型,并沒有自定義轉(zhuǎn)換為MyObj2的函數(shù).

as和強(qiáng)制類型轉(zhuǎn)換的區(qū)別在于,as不會在意是否存在自定義類型轉(zhuǎn)換函數(shù),它針對的時(shí)運(yùn)行時(shí)類型,所以as轉(zhuǎn)換成功的可能性只有2者具有同一運(yùn)行時(shí)類型,即2者具有相互繼承關(guān)系;而強(qiáng)制類型轉(zhuǎn)換會執(zhí)行自定義轉(zhuǎn)換函數(shù),并且它針對的是編譯時(shí)類型,所以要注意(2)類似的錯(cuò)誤.

還有as不能用于Int(float)等值類型.

我們常用到的foreach用的是強(qiáng)制類型轉(zhuǎn)換,因?yàn)樗枰軐nt等類型支持.

is的原理與as類似,不過它返回bool類型,is可與強(qiáng)制類型轉(zhuǎn)換搭配使用,可避免轉(zhuǎn)換異常,但最好不要把is和as搭配,實(shí)際上is也做了as的轉(zhuǎn)換操作,這樣會影響效率.

以上是引用內(nèi)容。

      結(jié)論:as和強(qiáng)制類型轉(zhuǎn)換原理是不一樣的,前者適用于存在繼承關(guān)系的對象中,針對的是運(yùn)行時(shí)類型,后者執(zhí)行自定義轉(zhuǎn)換函數(shù),針對的是編譯時(shí)類型。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI