Tyyppivalinta Visual Basic.netissä

toimittanut Molly Pell, Senior Systems Analyst

Visual Basic. Net tarjoaa kaksi vaihtoehtoa castingille.

  • CType: valaa tai muuntaa yhden tyypin toiseksi tyypiksi. Jos tyypit eivät täsmää, pakottaminen voidaan suorittaa.
  • DirectCast: heittää yhdestä tyypistä toiseen paremman suorituskyvyn kuin CType, mutta ei suorita pakkokeinoja, jos tyypit eivät täsmää.

Huom. Ctype sisältää kaikki VB-muunnostoiminnot. Nämä ovat CBool, CByte, Cchar, CDate, CDec, CDbl, CInt, CLng, CObj, CShort, CSng ja CStr.

suurin ero näiden kahden välillä on se, että DirectCast toimii vain, jos lausekkeen määritelty tyyppi ja ajonaikatyyppi ovat samat. Tämä ero näkyy vain muunnettaessa objektityypistä arvotyypiksi tai unboxattaessa arvoa.

esimerkiksi seuraava DirectCast-operaatio epäonnistuu, koska kappaleen boksityyppi O ei ole kokonaisluku:

Dim O as Object = 1,5

Dim I As Integer = DirectCast(O, Integer) ” aiheuttaa ajonaikaisen virheen.

Dim I as Integer = CType (O, Integer) ” ei aiheuta ajoaikavirhettä.

tässä esimerkissä DirectCast-operaatio sen sijaan onnistuu:

Dim O as Object = 1

Dim I As Integer = DirectCast (O, Integer) ” menestyy.

Dim I as Integer = Ctype(O, kokonaisluku) ” onnistuu, mutta on hitaampi kuin DirectCast

muunnettaessa objektista arvotyypiksi eli unboxattaessa DirectCast-operaattorilla on parempi suorituskyky kuin CType-operaattorilla. Visual Basic .NET kääntäjä luo neljä riviä Il koodi DirectCast. Ctypen käyttö saa Visual Basic.Net-kääntäjän kuitenkin tuottamaan kutsun muunnosmenetelmään, joka on reilusti yli sata riviä IL-koodia. Tämä menetelmä puolestaan kutsuu muita menetelmiä. Suorituskyvyn kriittisessä koodissa ero voi olla huomattava. Jos pakottaminen on välttämätöntä, sinun on kuitenkin käytettävä CType-toimintoa tai suoritettava pakottaminen manuaalisesti.

esimerkiksi:

Dim O objektina = 1.5

Dim f as Single = DirectCast (O, Single) ”Cast to the runtime type

Dim i As Integer = ctype (f, Integer)” CType is OK here, as this
”cast doesn’ t unbox ”f’

johtopäätös

kirjoitettaessa objektityypistä arvotyyppiin eli unboxattaessa tulee ensin selvittää, onko tyyppipakottaminen tarpeen. Jos pakkoa ei tarvita (eli arvon boxed-tyyppi on sama kuin valulausekkeessa määritelty Tyyppi), käytä directcast-lauseketta sovelluksen suorituskyvyn lisäämiseksi.

tämä vinkki ja lisää havaittu sinulle Total. Net-analysaattorilla! Katso lisätietoja FMS. Net-analysaattorista.