Inferencia de tipo de variable local (Visual Basic)

El Visual Basic utiliza la inferencia de tipos para determinar los tipos de datos de las variables locales declaradas sin una As cláusula . El compilador deduce el tipo de la variable del tipo de la expresión de inicialización. Esto le permite declarar variables sin indicar explícitamente un tipo, como se muestra en el ejemplo siguiente. Como resultado de las declaraciones, tanto num1 como num2 se escriben fuertemente como enteros.

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub

Nota

Si no desea que en el ejemplo anterior se escriba como , puede especificar otro tipo mediante una num2 Integer declaración como o Dim num3 As Object = 3 Dim num4 As Double = 3 .

Nota

La inferencia de tipos solo se puede usar para variables locales no estáticas; no se puede usar para determinar el tipo de campos de clase, propiedades o funciones.

La inferencia de tipos local se aplica en el nivel de procedimiento. No se puede usar para declarar variables en el nivel de módulo (dentro de una clase, estructura, módulo o interfaz, pero no dentro de un procedimiento o bloque). Si en el ejemplo anterior hubiera un campo de una clase en lugar de una variable local en un procedimiento, la declaración produciría un error con on y se clasificaría como num2 Option Strict con num2 Object Option Strict off. De forma similar, la inferencia de tipos locales no se aplica a las variables de nivel de procedimiento declaradas como Static .

Inferencia de tipos frente a enlace en tiempo de inferencia

El código que usa la inferencia de tipos es similar al código que se basa en el enlace en tiempo de tarde. Sin embargo, la inferencia de tipos escribe fuertemente la variable en lugar de dejarla como Object . El compilador usa el inicializador de una variable para determinar el tipo de la variable en tiempo de compilación para generar código enlazado en tiempo de compilación. En el ejemplo anterior, num2 , como , se escribe como num1 Integer .

El comportamiento de las variables enlazadas en tiempo de ejecución difiere del de las variables enlazadas en tiempo de ejecución, para las que el tipo solo se conoce en tiempo de ejecución. Conocer el tipo al principio permite al compilador identificar problemas antes de la ejecución, asignar memoria con precisión y realizar otras optimizaciones. El enlace temprano también permite que Visual Basic entorno de desarrollo integrado (IDE) proporcione ayuda de IntelliSense sobre los miembros de un objeto. También se prefiere el enlace temprano para el rendimiento. Esto se debe a que todos los datos almacenados en una variable enlazada en tiempo de ejecución deben ajustarse como de tipo y el acceso a los miembros del tipo en tiempo de ejecución hace Object que el programa sea más lento.

Ejemplos

La inferencia de tipos se produce cuando una variable local se declara sin As una cláusula y se inicializa. El compilador usa el tipo del valor inicial asignado como tipo de la variable. Por ejemplo, cada una de las siguientes líneas de código declara una variable de tipo String .

' Using explicit typing.
Dim name1 As String = "Springfield"

' Using local type inference.
Dim name2 = "Springfield"

El código siguiente muestra dos maneras equivalentes de crear una matriz de enteros.

' Using explicit typing.
Dim someNumbers1() As Integer = New Integer() {4, 18, 11, 9, 8, 0, 5}

' Using local type inference.
Dim someNumbers2 = New Integer() {4, 18, 11, 9, 8, 0, 5}

Es conveniente usar la inferencia de tipos para determinar el tipo de una variable de control de bucle. En el código siguiente, el compilador deduce que es porque number del ejemplo anterior es una Integer someNumbers2 matriz de enteros.

Dim total = 0
For Each number In someNumbers2
    total += number
Next

La inferencia de tipos local se puede usar en instrucciones para establecer el tipo del nombre del recurso, como se muestra Using en el ejemplo siguiente.

Using proc = New System.Diagnostics.Process
    ' Insert code to work with the resource.
End Using

El tipo de una variable también se puede inferir de los valores devueltos de las funciones, como se muestra en el ejemplo siguiente. y pList1 pList2 son matrices de procesos porque Process.GetProcesses devuelve una matriz de procesos.

' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()

' Using local type inference.
Dim pList2 = Process.GetProcesses()

Option Infer

Option Infer permite especificar si se permite la inferencia de tipos locales en un archivo determinado. Para habilitar o bloquear la opción, escriba una de las siguientes instrucciones al principio del archivo.

Option Infer On

Option Infer Off

Si no especifica un valor para en el código, el valor predeterminado Option Infer del compilador es Option Infer On .

Si el valor establecido para Option Infer en un archivo entra en conflicto con el valor establecido en el IDE o en la línea de comandos, el valor del archivo tiene prioridad.

Para obtener más información, vea Option Infer Statement y Compile Page, Project Designer (Visual Basic).

Consulta también