Typ gjutning i Visual Basic. NET

tillhandahålls av Molly Pell, Senior systemanalytiker

Visual Basic.NET ger två alternativ för gjutning.

  • CType: kastar eller konverterar en typ till en annan typ. Om typerna inte matchar kan tvång utföras.
  • DirectCast: kastar en typ till en annan typ med bättre prestanda än CType, men utför inte tvång om typerna inte matchar.

Obs: CType innehåller alla VB-konverteringsfunktioner. Dessa är CBool, CByte, CChar, CDate, CDec, CDbl, CInt, CLng, CObj, CShort, CSng och CStr.

huvudskillnaden mellan de två är att DirectCast bara fungerar om den angivna typen och körtidstypen för uttrycket är desamma. Den här Skillnaden visas bara när du konverterar från en objekttyp till en värdetyp eller unboxar ett värde.

till exempel kommer följande DirectCast-operation att misslyckas eftersom den boxade typen av objektet O inte är ett heltal:

Dim O Som objekt = 1,5

Dim I som heltal = DirectCast(O, heltal) ’ orsakar ett körtidsfel.

Dim I som heltal = CType(O, heltal) ’ orsakar inte ett run-time-fel.

DirectCast-operationen i det här exemplet kommer å andra sidan att lyckas:

Dim O som Objekt = 1

Dim I som heltal = DirectCast(O, heltal) ’ lyckas.

Dim I som heltal = CType(O, heltal) ’ lyckas, men är långsammare än DirectCast

när du konverterar från ett objekt till en värdetyp eller unboxing har DirectCast-operatören bättre prestanda än ctype-operatören. Visual Basic .NET compiler genererar fyra rader av IL-kod för DirectCast. Men med hjälp av CType orsakar Visual Basic. NET-kompilatorn att generera ett samtal till en konverteringsmetod som är över hundra rader IL-kod. Denna metod kallar i sin tur andra metoder. I prestandakritisk kod kan skillnaden vara väsentlig. Om tvång är nödvändigt måste du dock fortfarande använda ctype-operationen eller utföra tvång manuellt.

till exempel:

Dim O som Objekt = 1.5

Dim f som singel = DirectCast ( O, singel) ’Cast till runtime type

Dim I som heltal = CType (f, heltal)’ CType är OK här, eftersom denna
’cast inte unbox ’f’

slutsats

när du skriver gjutning från en objekttyp till en värdetyp, eller unboxing, bör du först avgöra om typ tvång är nödvändig. Om ingen tvång är nödvändig (dvs. den boxade typen av värdet är densamma som den typ som anges i cast-uttrycket), använd DirectCast-uttrycket för att öka programmets prestanda.

detta tips och mer upptäckt för dig med Total. net Analyzer! Se FMS. Net Analyzer för mer information.