Type Casting in Visual Basic. net

Provided by Molly Pell, Senior Systems Analyst

Visual Basic.net provides two options for casting.

  • CType: lança ou converte um tipo em outro tipo. Se os tipos não coincidem, coação pode ser realizada.
  • DirectCast: lança um tipo para outro tipo com melhor desempenho do que CType, mas não executa coerção se os tipos não coincidem.

Nota: CType inclui todas as funções de conversão de VB. Estes são CBool, CByte, CChar, CDate, CDec, CDbl, CInt, CLng, CObj, CShort, CSng, e CStr.

a principal diferença entre os dois é que o DirectCast só funciona se o tipo especificado e o tipo de tempo de execução da expressão forem os mesmos. Esta diferença só aparece ao converter de um tipo de objeto para um tipo de valor, ou ao desligar um valor.

por exemplo, a seguinte operação de transmissão directa irá falhar porque o tipo de caixa do objecto O não é um inteiro:

Dim o como Object = 1.5

Dim i As Integer = DirectCast (o, Integer) ‘ Causes a run-time error.

Dim i As Integer = CType (O, Integer) ‘ Does not cause a run-time error.

a operação DirectCast neste exemplo, por outro lado, terá sucesso:

Dim o As Object = 1

Dim i As Integer = DirectCast ( O, Integer) ‘ Succeeds.

Dim i As Integer = CType ( o, Integer) ‘ Succeeds, but is slower than DirectCast

When converting from an object to a value type, or unboxing, the DirectCast operator has better performance than the CType operator. O Visual Básico .NET compiler gera quatro linhas de código IL para DirectCast. No entanto, usando CType faz com que o compilador Visual Basic.NET para gerar uma chamada para um método de conversão que é bem mais de cem linhas de código IL. Este método, por sua vez, chama outros métodos. Em código crítico de desempenho, a diferença pode ser substancial. Se a coerção for necessária, no entanto, você ainda deve usar a operação CType, ou realizar a coerção manualmente.

por exemplo:

Dim o As Object = 1.5

Dim F como Single = DirectCast(o, Single) ‘Cast to the runtime type

Dim i As Integer = CType (f, inteiro)’ CType is OK here, since this
‘cast doesn’t unbox ‘f’

conclusão

quando o tipo de vazamento de um tipo de objeto para um tipo de valor, ou descompressão, você deve primeiro determinar se o tipo coerção é necessário. Se não for necessária coerção (ou seja, o tipo de caixa do valor é o mesmo que o tipo especificado na expressão cast), use a expressão DirectCast para aumentar o desempenho da aplicação.

esta ponta e mais detectada para si com o analisador total. net! Veja o analisador FMS. NET para mais informações.