日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

as和强制类型转换的区别

發布時間:2025/3/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 as和强制类型转换的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?之前一直以為as就是強制類型轉換,只是as是AS3中新的語法,之前用在有繼承關系的對象之間的轉換也無甚區別,但是今天卻讓我領悟到了它倆之間的區別。

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

經過:

  • var color:uint = str as uint;//str是String類型,大概是這個樣子

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

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


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

    以前AS中是這樣進行強制類型轉換的:假設有一個類叫做Class1,我們聲明了一個它的對象

    c1,如果想要將它轉換成Class2類型,只要這樣寫:

    Class2(c1);


    在AS3中你依然可以這樣寫,但是AS3 中提供了一個新的操作符: as ,并且推薦使用as
    進行強制轉換,上述的例子用 as 操作符實現就是這樣:

    c1 as Class2;

    使用 as 操作符有幾個好處:

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

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

    num = str as Number;

    這樣寫是沒有用的,你只能通過第一種方法來達到強制轉換的目的:

    num = Number(str);

    PS:如果我們用as來轉換的話,除非MyObj1和MyObj2有繼承關系,否則轉換將失敗,而用強制類型轉換則不一定,只要MyObj1類有自定義類型轉換函數MyObj2,則可能轉換成功,因為強制類型轉換針對的是編譯時類型,而對于編譯時類型o1為object類型,并沒有自定義轉換為MyObj2的函數.

    as和強制類型轉換的區別在于,as不會在意是否存在自定義類型轉換函數,它針對的時運行時類型,所以as轉換成功的可能性只有2者具有同一運行時類型,即2者具有相互繼承關系;而強制類型轉換會執行自定義轉換函數,并且它針對的是編譯時類型,所以要注意(2)類似的錯誤.

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

    我們常用到的foreach用的是強制類型轉換,因為它需要能對Int等類型支持.

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

    以上是引用內容。

    ? ? ? 結論:as和強制類型轉換原理是不一樣的,前者適用于存在繼承關系的對象中,針對的是運行時類型,后者執行自定義轉換函數,針對的是編譯時類型。


    轉載于:https://blog.51cto.com/4769069/1215710

    總結

    以上是生活随笔為你收集整理的as和强制类型转换的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。