Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Tipo Nullable
  2. Tipagem dinâmica
  3. Objeto dinâmico

VB.NEt permite que os tipos de dados primitivos e outros possam também conter o valor Nothing(null ou nulo) além do valor primitivo padrão.

Por exemplo, uma variável do tipo Boolean pode ter três valores: Nothing, True ou False. Para isso, utilizamos o operador Nullable(Of) ou (?) para declaração de tipo nullable como mostrado na sintaxe a seguir:

Sintaxe
Dim nome_variavel As Nullable(Of <tipo_dado>) = [Nothing]
Dim nome_variavel As <tipo_dado>? = [Nothing]
                                    
Exemplo 1
Imports System

Public Class Program
    Public Shared Sub Main()
        Dim flag As Boolean? = Nothing

        flag = True
        Console.WriteLine(flag)
        flag = False
        Console.WriteLine(flag)
    End Sub
End Class
Saída
True
False

Quando esse tipo de dado Nullable é declarado, precisamos utilizar a propriedade HasValue para verificar se há valor atribuído e a propriedade Value para recuperar seu valor.

Sintaxe
Boolean nome_variavel.HasValue

nome_variavel.Value
Sintaxe
se nome_variavel tem valor, true
se nome_variavel não tem valor, false
Exemplo 2
Imports System

Public Class Program
    Public Shared Sub Main()
        Dim variavel As Integer? = Nothing
        Console.WriteLine(variavel.HasValue)
        variavel = True
        Console.WriteLine(variavel.Value)
    End Sub
End Class
Saída
False
777

Caso a propriedade Value da variável seja acessada diretamente, um erro será lançado como mostrado abaixo:

Saída
System.InvalidOperationException: Nullable object must have a value.

VB.Net, possui um recurso que a torna mais flexível em relação a tipagem. Nativamente, suporta inferência de dados ou late-binding. Assim, a tipagem de uma variável é definida baseada no valor atribuído à variável no momento da declaração:

Sintaxe
Dim nome_variavel = <valor>
Exemplo 3: Inteiro
Imports System

Public Class Program
    Public Shared Sub Main()
        Dim valor = 100
    End Sub
End Class
Saída
-
Exemplo 4: Objeto
Imports System

Public Class Test
    Public Shared Sub Main()
        Dim  minhaTupla = New MinhaClasse()
    End Sub
End Class

Public Class MinhaClasse 
        Public Campo1 As String
End Class

Uma mesma variável inicialmente atribuída seu tipo baseado na inferência, pode ter seu tipo alterado quando um novo valor for atribuído:

Exemplo 5
Imports System

Public Class Program
    Public Shared Sub Main(ByVal args As String())
    Dim variavel = 10 'tipo inteiro
    
    variavel = "string" 'tipo string
    
    If TypeOf variavel Is String Then 'verifica tipo 
        Console.WriteLine("string")
    End If
    
    End Sub
End Class
Saída
string

A forma mais rápida de criar objetos dinâmicos em VB.NET é utilizando o operador New em conjunto com a palavra reservada With como mostrado na sintaxe a seguir:

Sintaxe
Dim objeto = New With {.nome_campo1 = valor1, .CampoN = valorN} 
Exemplo 6
Imports System

Public Class Test
    Public Shared Sub Main()
        Dim  obj = New With {.Nome = "nome", .Idade = 100}
        Console.WriteLine(obj.Nome)
        Console.WriteLine(obj.Idade)
    End Sub
End Class
Saída
nome
100

Outra forma de trabalhar com objetos dinâmicos em VB.NET é utilizando a classe .NET ExpandoObject. Esse tipo aceita a adição de propriedades e métodos dinamicamente como visto no exemplo a seguir:

Exemplo 7
Module Modulo
    Sub Main()

        Dim obj As Object = New System.Dynamic.ExpandoObject()
        'adição dinâmica de campos
        obj .nome = "VB.NET"
        obj .codigo = 999
        
        Console.WriteLine(obj .nome)
        Console.WriteLine(obj .codigo)
    End Sub
End Module
Saída
VB.NET
999
  1. 05/03/2024 - versão inicial - tipo nullable, tipagem dinâmica e objeto dinâmico