Operador TypeOf (Visual Basic)

Verifica se o tipo de runtime do resultado de uma expressão é compatível com o tipo especificado.

Sintaxe

result = TypeOf objectexpression Is typename  
result = TypeOf objectexpression IsNot typename  

Partes

result
Retornou. Um valor Boolean.

objectexpression
Obrigatórios. Qualquer expressão avaliada como um tipo de referência.

typename
Obrigatórios. Qualquer nome de tipo de dados.

Comentários

O operador TypeOf determina se o tipo de tempo de execução objectexpression é compatível com typename. A compatibilidade depende da categoria de tipo de typename. A tabela a seguir mostra como a compatibilidade é determinada.

Categoria de tipo de typename Critério de compatibilidade
Classe objectexpression é do tipo typename ou herda de typename
Estrutura objectexpression é do tipo typename
Interface objectexpression implementa typename ou herda de uma classe que implementa typename

Se o tipo de tempo de execução de objectexpression atender ao critério de compatibilidade, result será True. Caso contrário, result é False. Se objectexpression for nulo, então TypeOf...Is retornará False e ...IsNot retornará True.

TypeOf é sempre usado com a palavra-chave Is para construir uma expressão TypeOf...Is ou com a palavra-chave IsNot para construir uma expressão TypeOf...IsNot.

Exemplo

O exemplo a seguir usa expressões TypeOf...Is para testar a compatibilidade de tipo de duas variáveis de referência de objeto com vários tipos de dados.

Dim refInteger As Object = 2
MsgBox("TypeOf Object[Integer] Is Integer? " & TypeOf refInteger Is Integer)
MsgBox("TypeOf Object[Integer] Is Double? " & TypeOf refInteger Is Double)
Dim refForm As Object = New System.Windows.Forms.Form
MsgBox("TypeOf Object[Form] Is Form? " & TypeOf refForm Is System.Windows.Forms.Form)
MsgBox("TypeOf Object[Form] Is Label? " & TypeOf refForm Is System.Windows.Forms.Label)
MsgBox("TypeOf Object[Form] Is Control? " & TypeOf refForm Is System.Windows.Forms.Control)
MsgBox("TypeOf Object[Form] Is IComponent? " & TypeOf refForm Is System.ComponentModel.IComponent)

A variável refInteger tem um tipo de tempo de execução de Integer. Ela é compatível com Integer, mas não com Double. A variável refForm tem um tipo de tempo de execução de Form. Ela compatível com Form porque esse é o tipo dela, com Control porque Form herda de Control e com IComponent porque Form herda de Component, que implementa IComponent. No entanto, refForm não é compatível com Label.

Confira também