Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução
a BAIXAR
b COMEÇAR AGORA
Passo a passo
Recursos adicionais
Conceitos básicos
e VISÃO GERAL
Conceitos de programação
h NOVIDADES
p CONCEITO
Funcionalidades da linguagem
b COMEÇAR AGORA
Referência da linguagem
i REFERÊNCIA
Índice
Palavras-chave
Operadores
Tipos de dados
Especificação do idioma
Novidades do Visual Basic
Artigo • 15/02/2023 • 13 minutos para o fim da leitura
Este tópico lista os nomes dos principais recursos para cada versão do Visual Basic, com
descrições detalhadas das funcionalidades novas e aprimoradas nas versões mais
recentes da linguagem.
Versão atual
Visual Basic 16.9 / Visual Studio 2019 Versão 16.9
Você pode baixar o SDK mais recente do .NET na página de downloads do .NET .
Versões anteriores
Visual Basic 16.0 / Visual Studio 2019 Versão 16.0
LINQ (consulta integrada à linguagem), literais XML, inferência de tipos de variável local,
inicializadores de objeto, tipos anônimos, métodos de extensão, inferência de tipos var
local, expressões lambda, operador if , métodos parciais, tipos de valor anulável
VB
End Sub
Nas versões anteriores do Visual Basic, a conversão de valores Duplos e Únicos como
inteiros apresentava um desempenho relativamente baixo. O Visual Basic 15.8 melhora
significativamente o desempenho das conversões de ponto flutuante para inteiros
quando você passa o valor retornado por qualquer um dos seguintes métodos para
uma das funções de conversão de inteiros intrínsecas do Visual Basic (CByte, CShort,
CInt, CLng, CSByte, CUShort, CUInt, CULng) ou quando o valor retornado por qualquer
um dos métodos a seguir é implicitamente convertido em um tipo integral quando
Opção Strict está definida como Off :
Conversion.Fix(Double)
Conversion.Fix(Object)
Conversion.Fix(Single)
Conversion.Int(Double)
Conversion.Int(Object)
Conversion.Int(Single)
Math.Ceiling(Double)
Math.Floor(Double)
Math.Round(Double)
Math.Truncate(Double)
Essa otimização permite que o código seja executado mais rapidamente – até duas
vezes mais rápido para o código que faz um grande número de conversões para tipos
de inteiro. O exemplo a seguir ilustra algumas chamadas de método simples que são
afetadas por essa otimização:
VB
Dim d As Double = s
Por exemplo, a seguinte chamada de método tem dois argumentos posicionais entre
um argumento nomeado. O argumento nomeado deixa claro que o valor 19 representa
uma idade.
VB
Essa nova combinação de palavra-chave definirá um membro que é acessível por todos
os membros em sua classe recipiente, bem como por tipos derivados da classe
recipiente, mas somente se eles também forem encontrados no assembly de contenção.
Como estruturas não podem ser herdadas, Private Protected só pode ser aplicado aos
membros de uma classe.
O Visual Basic 2017 agora tem suporte para o caractere de sublinhado ( _ ) como um
separador de dígito. A partir do Visual Basic 15.5, você pode usar o caractere de
sublinhado como separador à esquerda entre o prefixo e os dígitos binários,
hexadecimais ou octais. O exemplo a seguir usa um separador de dígito à esquerda para
definir 3.271.948.384 como um número hexadecimal:
VB
Para usar o caractere de sublinhado como separador à esquerda, você deve adicionar o
seguinte elemento ao arquivo de projeto do Visual Basic (*.vbproj):
XML
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Quando você atribui o valor de elementos de tupla com base em variáveis, o Visual
Basic infere o nome dos elementos de tupla dos nomes de variável correspondentes;
não é necessário nomear explicitamente um elemento de tupla. O exemplo a seguir usa
a inferência para criar uma tupla com três elementos nomeados, state , stateName e
capital .
VB
Visual Basic 15
Tuplas
As tuplas são uma estrutura de dados leve que é mais comumente usada para retornar
vários valores de uma única chamada de método. Normalmente, para retornar vários
valores de um método, você precisa realizar uma das seguintes ações:
O suporte do Visual Basic para tuplas permite definir rapidamente uma tupla,
opcionalmente atribuir nomes semânticos para seus valores e recuperar rapidamente
seus valores. O exemplo a seguir encapsula uma chamada para o método TryParse e
retorna uma tupla.
VB
Imports System.Globalization
End Function
End Module
O chamador pode então chamar o método e manipular a tupla retornada com o código
semelhante ao seguinte.
VB
Console.ReadLine()
Você pode definir um literal binário usando o prefixo &B ou &b . Além disso, você pode
usar o caractere de sublinhado, _ , como um separador de dígitos para melhorar a
legibilidade. O exemplo a seguir usa as duas funcionalidades para atribuir um valor
Byte e exibi-lo como um número decimal, hexadecimal e binário.
VB
Para obter mais informações, consulte a seção "Atribuições de literal" dos tipos de
dados Byte, Integer, Long, Short, SByte, UInteger, ULong e UShort.
Por exemplo, a classe Sentence a seguir escrita em C# inclui um método FindNext que
localiza a próxima palavra em uma sentença que começa com uma subcadeia de
caracteres especificada. A cadeia de caracteres é retornada como um valor retornado de
referência e uma variável Boolean passada pela referência para o método indica se a
pesquisa foi bem-sucedida. Isso significa que, além de ler o valor retornado, o chamador
também pode modificá-lo e essa modificação é refletida na Sentence classe.
C#
using System;
currentSearchPointer = -1;
if (words[count].StartsWith(startWithString))
currentSearchPointer = count;
found = true;
currentSearchPointer = -1;
found = false;
return stringToReturn.Trim();
Em sua forma mais simples, você pode modificar a palavra encontrada na frase usando
um código semelhante ao seguinte. Observe que você não está atribuindo um valor ao
método, mas para a expressão que o método retorna, que é o valor retornado de
referência.
VB
Console.WriteLine(sentence.GetSentence())
Um problema com esse código, no entanto, é que, se uma correspondência não for
encontrada, o método retornará a primeira palavra. Como o exemplo não examina o
valor do argumento Boolean para determinar se uma correspondência foi encontrada,
ele modificará a primeira palavra se não houver nenhuma correspondência. O exemplo
a seguir corrige isso substituindo a primeira palavra por ela mesma se não há nenhuma
correspondência.
VB
Console.WriteLine(sentence.GetSentence())
Uma solução melhor é usar um método auxiliar para o qual o valor retornado de
referência é passado por referência. O método auxiliar pode modificar o argumento
passado para ele por referência. O exemplo a seguir faz isso.
VB
Module Example
Console.WriteLine(sentence.GetSentence())
End Sub
End Function
End Module
Para obter mais informações, consulte Reference return values (Valores retornados de
referência).
Visual Basic 14
NameOf
Você pode testar a nulidade de uma maneira sintática muito simples antes de executar
uma operação de acesso de membro ( ?. ) ou índice ( ?[] ). Esses operadores ajudam a
escrever menos código para lidar com verificações de nulidade, especialmente para
entrar em estruturas de dados. Se a referência de objeto ou o operando esquerdo for
nulo, as operações serão nulas.
Comentários
Você pode ter literais de data no formato aaaa-mm-dd, #2015-03-17 16:10 PM# .
Para facilitar a leitura do seu código, agora você pode usar TypeOf com IsNot .
Além das classes e structs, você pode declarar interfaces e módulos parciais.
As diretivas #Region dentro de corpos de método
O compilador apresentava um erro de que CObj(...) não era uma constante quando
usado em construções de atributo.
Anteriormente, o código a seguir gerava erros que impediam você de declarar IMock ou
chamar GetDetails (se eles tivessem sido declarados em C#):
VB
Interface ICustomer
End Interface
Interface ITime
End Interface
End Interface
End Interface
Confira também
Novidades no Visual Studio 2017
Novidades no Visual Studio 2019
Saiba mais sobre alterações
interruptivas no compilador de Visual
Basic
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Informações adicionais
O que há de novo no Visual Basic Lista os novos recursos em cada uma das
versões do Visual Basic .NET.
Recursos Adicionais para Programadores que Usam o Visual Basic Fornece uma
lista de sites e grupos de notícias que podem ajudá-lo a encontrar respostas para
problemas comuns.
Confira também
Obter o Visual Basic Fornece links de download para versões do Visual Studio que
incluem suporte ao Visual Basic e versões gratuitas.
Recursos da Microsoft
Na Web
URL Descrição
Design de linguagem Visual Basic Repositório oficial no GitHub para design de linguagem
.NET Visual Basic .NET.
Blog da equipe do Microsoft Visual Fornece acesso ao blog da equipe do Visual Basic.
Basic
Exemplos de código
URL Descrição
Fóruns
URL Descrição
Vídeos e webcasts
URL Descrição
GitHub: .NET do Visual O repositório oficial para design de linguagem .NET do Visual
Basic Basic.
Suporte
URL Descrição
Perguntas Permite arquivar bugs ou fornecer sugestões à Microsoft sobre o .NET e o Visual
sobre o Studio. Você também pode relatar um bug ao selecionar Ajuda>Enviar
Visual Comentários>Relatar um Problema no Visual Studio.
Studio
Recursos de terceiros
URL Descrição
VBForums Fornece um fórum para discussão de Visual Basic, .NET e muito mais.
vbCity Um site da comunidade para que pessoas aprendam e façam perguntas sobre
Visual Basic e .NET.
Confira também
Introdução ao Visual Basic
Opções de comentários do Visual Studio
Desenvolvendo aplicativos com o Visual
Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Nesta seção
Programando no Visual Basic
Desenvolvimento com My
Fornece informações sobre como criar aplicativos do Windows Forms usando o Visual
Studio.
Descreve como você pode personalizar modelos de projeto para fornecer mais objetos
My .
Seções relacionadas
Guia de programação do Visual Basic
Esta seção aborda tarefas de programação que você talvez queira saber mais sobre
como criar seu aplicativo Visual Basic.
Nesta seção
Acessando recursos de computador
Contém documentação sobre tarefas que você pode realizar usando o objeto My.User .
Confira também
Recursos da linguagem do Visual Basic
Conceitos de Programação
Coleções
Desenvolvendo aplicativos com o Visual Basic
Acessar recursos de computador (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Audio
Área de Transferência (ClipboardProxy)
Clock
FileSystem
Info
Keyboard
Mouse
Network
Ports
Registro (RegistryProxy)
Nesta seção
Executando sons
Acessar o teclado
Acessar o mouse
Esta seção contém tópicos que abordam como registrar informações em log do
aplicativo usando os objetos My.Application.Log ou My.Log e como estender os
recursos de registro em log do aplicativo.
O objeto Log fornece métodos para gravar informações nos ouvintes de log do
aplicativo e a propriedade avançada TraceSource do objeto Log fornece informações
detalhadas de configuração. O objeto Log será configurado pelo arquivo de
configuração de aplicativo.
O objeto My.Log está disponível somente para aplicativos do ASP.NET. Para aplicativos
cliente, use My.Application.Log . Para obter mais informações, consulte Log.
Tarefas
Para Consulte
Altere o local em que My.Application.Log grava as Passo a passo: alterar o local no qual
informações. My.Application.Log grava informações
Crie um ouvinte de log personalizado para Passo a passo: criar ouvintes de log
My.Application.Log . personalizados
Para Consulte
Confira também
Microsoft.VisualBasic.Logging.Log
Trabalhar com logs do aplicativo
Solução de problemas: ouvintes de log
Acessando dados do usuário (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Esta seção contém tópicos que lidam com o objeto My.User e com as tarefas que você
pode realizar com ele.
Tarefas
Para Consulte
Confira também
User
Acessando formulários de aplicativo
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O objeto My.Forms fornece uma maneira fácil de acessar uma instância de cada
Windows Form declarado no projeto do aplicativo. Você também pode usar as
propriedades do objeto My.Application para acessar a tela inicial e o formulário
principal do aplicativo e obter uma lista dos formulários abertos do aplicativo.
Tarefas
A tabela a seguir lista exemplos que mostram como acessar os formulários de um
aplicativo.
Para Consulte
Confira também
OpenForms
SplashScreen
Objeto My.Forms
Acessando serviços Web do aplicativo
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O objeto My.WebServices fornece uma instância de cada serviço Web referenciado pelo
projeto atual. Cada instância é instanciada sob demanda. É possível acessar esses
serviços Web por meio das propriedades do objeto My.WebServices . O nome da
propriedade é igual ao nome do serviço Web acessado pela propriedade. Qualquer
classe que herda de SoapHttpClientProtocol é um serviço Web.
Tarefas
A tabela a seguir lista as possíveis maneiras de acessar serviços Web referenciados por
um aplicativo.
Para Consulte
Chamar um serviço Web de forma assíncrona e manipular um Como: Chamar um serviço Web
evento quando ele for concluído de forma assíncrona
Confira também
Objeto My.WebServices
Como chamar um serviço Web de forma
assíncrona (Visual Basic)
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Quando você faz referência a um serviço Web em seu projeto no IDE (Ambiente de
Desenvolvimento Integrado) do Visual Studio, ele é adicionado ao objeto
My.WebServices , e o IDE gera uma classe proxy do cliente para acesso a um serviço Web
especificado
A classe proxy permite chamar os métodos de serviço Web de forma síncrona, em que
seu aplicativo aguarda até que a função seja concluída. Além disso, o proxy cria
membros adicionais para ajudar a chamar o método de forma assíncrona. Para cada
função de serviço Web, NameOfWebServiceFunction, o proxy cria uma sub-rotina
NameOfWebServiceFunction Async , um evento NameOfWebServiceFunction Completed e
uma classe NameOfWebServiceFunction CompletedEventArgs . Este exemplo demonstra
como usar os membros assíncronos para acessar a função getTemp do serviço Web
DemoTemperatureService.
7 Observação
Esse código não funciona em aplicativos Web, pois o ASP.NET não oferece suporte
ao objeto My.WebServices .
HTTP
http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
ByVal e As net.xmethods.www.getTempCompletedEventArgs)
End Sub
7 Observação
VB
VB
AddHandler My.WebServices.
TemperatureService.getTempCompleted,
AddressOf Me.TS_getTempCompleted
handlerAttached = True
End If
My.WebServices.TemperatureService.getTempAsync(zipCode)
End Sub
Confira também
Como acessar serviços Web de aplicativo
Objeto My.WebServices
Acessando configurações de aplicativo
(Visual Basic)
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Esta seção contém tópicos que descrevem o objeto My.Settings e as tarefas que ele
permite que você realize.
My.Settings
As propriedades do objeto My.Settings fornecem acesso às configurações do seu
aplicativo. Para adicionar ou remover configurações, use o painel Configurações do
Designer de Projeto.
Tarefas
A tabela a seguir lista exemplos que mostram como acessar os formulários de um
aplicativo.
Para Consulte
Confira também
Gerenciando configurações de aplicativo (.NET)
Objeto My.Settings
Processando unidades, diretórios e
arquivos (Visual Basic)
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Você pode usar o Visual Basic para processar unidades, pastas e arquivos com o objeto
My.Computer.FileSystem , que fornece um melhor desempenho e é mais fácil de usar que
os métodos tradicionais, como as funções FileOpen e Write (embora elas ainda estejam
disponíveis). As seções a seguir discutem esses métodos em detalhes.
Nesta seção
Access de arquivo com o Visual Basic
Fornece uma visão geral dos conceitos de E/S de arquivo no .NET Framework, incluindo
fluxos, armazenamento isolado, eventos de arquivo, atributos de arquivo e acesso a
arquivos.
Seções relacionadas
Estrutura do Programa e Convenções de Código
FileSystem
O Visual Basic apresenta novos recursos para o método RAD que aumentam a
produtividade, facilitam o uso e dão mais robustez. Um desses recursos, chamado My ,
oferece acesso a informações e a instâncias de objeto padrão relacionadas ao aplicativo
e ao seu ambiente de tempo de execução. Essas informações são organizadas em um
formato que pode ser descoberto por meio do IntelliSense e que é logicamente
delineado de acordo com o uso.
Os membros de alto nível do My são expostos como objetos. Cada objeto se comporta
de forma semelhante a um namespace ou uma classe com membros Shared e um
conjunto de membros relacionados são expostos.
Esta tabela mostra objetos My de nível superior e suas relações uns com os outros.
Nesta seção
Como executar tarefas com My.Application, My.Computer e My.User
Fornece detalhes sobre quais os recursos My que estão disponíveis em diferentes tipos
de projeto.
Confira também
ApplicationBase
Computer
User
Objeto My.Forms
Objeto My.WebServices
Como My depende do tipo de projeto
Executando tarefas com My.Application,
My.Computer e My.User (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
VB
' Displays a message box that shows the full command line for the
' application.
Next
MsgBox(args)
VB
My.Computer.FileSystem.GetDirectories(
Além de recuperar informações, os membros expostos por meio desses três objetos
também permitem executar métodos relacionados àquele objeto. Por exemplo, você
pode acessar uma série de métodos para manipular arquivos ou atualizar o registro por
meio de My.Computer .
A E/S do arquivo é bem mais fácil e rápida com My , que inclui uma série de métodos e
propriedades para manipular arquivos, diretórios e unidades. O objeto TextFieldParser
permite que você leia arquivos estruturados grandes que tenham campos delimitados
ou de largura fixa. Este exemplo abre o TextFieldParser reader e o usa para ler
C:\TestFolder1\test1.txt .
VB
Dim reader =
My.Computer.FileSystem.OpenTextFieldParser("C:\TestFolder1\test1.txt")
reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
Try
currentRow = reader.ReadFields()
MsgBox(currentField)
Next
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
End Try
End While
VB
' Changes the current culture for the application to Jamaican English.
My.Application.ChangeCulture("en-JM")
Confira também
ApplicationBase
Computer
User
Como My depende do tipo de projeto
Instâncias de objeto padrão fornecidas
por My.Forms e My.WebServices (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Instâncias Padrão
Uma instância padrão é uma instância da classe fornecida pelo runtime e não precisa ser
declarada e instanciada com o uso das instruções Dim e New . O exemplo a seguir
demonstra como você pode ter declarado e instanciado uma instância de uma classe
Form chamada Form1 e como agora pode obter uma instância padrão dessa classe
Form por meio de My.Forms .
VB
myForm.show()
VB
' With My.Forms, you can directly call methods on the default
' instance()
My.Forms.Form1.Show()
O My.Forms objeto retorna uma coleção de instâncias padrão para cada classe Form
existente em seu projeto. Da mesma forma, My.WebServices fornece uma instância
padrão da classe proxy para cada serviço Web ao qual você criou uma referência em seu
aplicativo.
Confira também
Objeto My.Forms
Objeto My.WebServices
Como My depende do tipo de projeto
Desenvolvimento de aplicativo rápido
com My.Resources e My.Settings (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O objeto My.Resources fornece acesso aos recursos do aplicativo e permite que você
recupere dinamicamente recursos para o aplicativo.
Recuperando recursos
Vários recursos, como arquivos de áudio, ícones, imagens e cadeias de caracteres,
podem ser recuperados por meio do objeto My.Resources . Por exemplo, você pode
acessar os arquivos de recursos específicos da cultura do aplicativo. O exemplo a seguir
define o ícone do formulário como aquele nomeado Form1Icon armazenado no arquivo
de recurso do aplicativo.
VB
Sub SetFormIcon()
Me.Icon = My.Resources.Form1Icon
End Sub
O objeto My.Resources expõe apenas recursos globais. Ele não fornece acesso a
arquivos de recursos associados a formulários. Acesse no formulário os respectivos
recursos.
Confira também
Objeto My.Resources
Objeto My.Settings
Acessando configurações de aplicativo
Visão geral do modelo de aplicativo do
Visual Basic
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Você pode configurar o aplicativo para mostrar uma tela inicial enquanto o código
de inicialização do aplicativo é executado. Por padrão, o modelo de aplicativo
suprime a tela inicial quando o argumento de linha de comando /nosplash ou -
nosplash é usado.
Disponibilidade
Por padrão, o modelo de aplicativo do Visual Basic está disponível para projetos do
Windows Forms. Se você configurar o aplicativo para usar um objeto de inicialização
diferente ou iniciar o código do aplicativo com um Sub Main personalizado, talvez esse
objeto ou classe precise fornecer uma implementação da classe
WindowsFormsApplicationBase para usar o modelo de aplicativo. Para obter
informações sobre como alterar o objeto de inicialização, confira Página do aplicativo,
Designer de projeto (Visual Basic).
Confira também
WindowsFormsApplicationBase
Startup
StartupNextInstance
UnhandledException
Shutdown
NetworkAvailabilityChanged
WindowsFormsApplicationBase
Estendendo o modelo de aplicativo do Visual Basic
Como My depende do tipo de projeto
(Visual Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
My expõe somente os objetos exigidos por um tipo de projeto específico. Por exemplo, o
objeto My.Forms está disponível em um aplicativo do Windows Forms, mas não está
disponível em um aplicativo de console. Esse tópico descreve quais objetos My estão
disponíveis em diferentes tipos de projeto.
Meu objeto Aplicativo Biblioteca Aplicativo Biblioteca Biblioteca Serviço Vazio Site
do de do de de Windows
Windows Classes Console Controle Controles
do da Web
Windows
6 Versão do Windows de My.User . Esse objeto está associado à identidade atual do thread.
7
Versão da Web de My.User . Esse objeto está associado à identidade do usuário da
solicitação HTTP atual do aplicativo.
Confira também
ApplicationBase
Computer
Log
User
Como personalizar quais objetos estão disponíveis em My
Compilação Condicional
-define (Visual Basic)
Objeto My.Forms
Objeto My.Request
Objeto My.Response
Objeto My.WebServices
Acessando dados em aplicativos do
Visual Basic
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Seções relacionadas
Acesso a dados no Visual Studio
Fornece links para páginas sobre como usar o Visual Studio para criar aplicativos que
funcionam com dados.
LINQ
Fornece links para tópicos que descrevem como usar LINQ com Visual Basic.
LINQ to SQL
Fornece links para tópicos sobre como criar um modelo de objeto LINQ to SQL em
aplicativos.
Fornece links para tópicos sobre como criar aplicativos de dados multicamadas.
Fornece links para páginas sobre como usar o Visual Studio para conectar o aplicativo a
dados com ferramentas de tempo de design e objetos de conexão ADO.NET.
Fornece links para páginas que descrevem como carregar dados em conjuntos de dados
e como executar instruções SQL e procedimentos armazenados.
Associar controles a dados no Visual Studio
Fornece links para páginas que explicam como exibir dados no Windows Forms através
de controles associados a dados.
Fornece links para páginas que descrevem como manipular os dados nas tabelas de
dados de um conjunto de dados.
Fornece links para páginas que descrevem como adicionar validação a um conjunto de
dados durante alterações de coluna e linha.
Fornece links para páginas que explicam como enviar dados atualizados de um
aplicativo para o banco de dados.
ADO.NET
Contém links para páginas que explicam como os dados funcionam em soluções do
Office, incluindo informações sobre programação orientada a esquemas, cache de
dados e acesso a dados no lado do servidor.
Criando e usando componentes no
Visual Basic
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Um recurso importante dos componentes é que eles são projetáveis, o que significa que
uma classe que é um componente pode ser usada no ambiente de desenvolvimento
integrado do Visual Studio. Um componente pode ser adicionado à Caixa de
Ferramentas, arrastado e solto em um formulário e manipulado em uma superfície de
design. O suporte ao tempo de design de base para componentes é integrado ao .NET.
Um desenvolvedor de componentes não precisa fazer nenhum trabalho adicional para
aproveitar a funcionalidade de base do tempo de design.
Classes de componentes
O namespace System.ComponentModel fornece classes que são usadas para
implementar o comportamento de tempo de design e tempo de execução de
componentes e controles. Este namespace inclui as classes e interfaces base para
implementar atributos e conversores de tipo, associar a fontes de dados e licenciar
componentes.
License. A classe base abstrata para todas as licenças. Uma licença é concedida a
uma instância específica de um componente.
Confira também
Como acessar o suporte a tempo de design no Windows Forms
Noções básicas de Aplicativo do
Windows Forms (Visual Basic)
Artigo • 09/02/2023 • 7 minutos para o fim da leitura
nos Windows Forms, um formulário é uma superfície visual na qual são exibidas
informações para o usuário. Normalmente, você compila os aplicativos do Windows
Forms colocando controles nos formulários e elaborando respostas para as ações do
usuário, como cliques com o mouse ou pressionamentos de teclas. Um controle é um
elemento discreto de interface do usuário que exibe dados ou aceita a entrada de
dados.
Eventos
Quando um usuário executa alguma ação no formulário ou em um dos controles, isso
gera um evento. O seu aplicativo reage a esses eventos usando código e os processa
quando eles acontecem. Para obter mais informações, consulte Criando manipuladores
de eventos nos Windows Forms.
Controles
O Windows Forms contém uma variedade de controles que podem ser colocados nos
formulários: controles que exibem caixas de texto, botões, caixas suspensas, botões de
opção e até mesmo páginas da Web. Para obter uma lista de todos os controles que
podem ser usados em um formulário, consulte Controles que podem ser usados nos
Windows Forms. Se os controles existentes não atenderem às suas necessidades, o
Windows Forms também dará suporte aos seus próprios controles personalizados
usando a classe UserControl.
Com o designer de formulários do tipo "arrastar e soltar" do Visual Studio, você pode
criar facilmente os aplicativos do Windows Forms: basta selecionar os controles com o
cursor e colocá-los onde desejar no formulário. O designer oferece ferramentas, como
linhas de grade e linhas de alinhamento, para facilitar o alinhamento dos controles. E se
você usar o Visual Studio ou compilar na linha de comando, poderá usar os controles
FlowLayoutPanel, TableLayoutPanel ou SplitContainer para criar layouts de formulário
avançados com tempo e esforço mínimos.
Para Consulte
A conexão a fontes de dados pela rede é uma tarefa simples com clientes inteligentes
dos Windows Forms. O componente BindingSource, novo no Windows Forms do Visual
Studio 2005 e do .NET Framework 2.0, representa uma conexão com uma fonte de
dados e expõe os métodos para associar dados aos controles, navegar pelos registros
anteriores e posteriores, editar registros e salvar alterações na fonte original. O controle
BindingNavigator fornece uma interface simples pelo componente BindingSource para
que os usuários naveguem entre os registros.
Configurações
Outro tipo de vinculação de dados que você pode gerenciar nos Windows Forms é
chamado de configurações. A maioria dos aplicativos de cliente inteligente deve manter
algumas informações sobre o estado de tempo de execução, como o último tamanho
de formulário conhecido, e reter os dados de preferência do usuário, como os locais
padrão dos arquivos salvos. O recurso de configuração de aplicativo lida com esses
requisitos ao oferecer uma forma fácil de armazenar ambos os tipos de configuração no
computador cliente. Uma vez definidas usando o Visual Studio ou um editor de código,
essas configurações são mantidas como XML e lidas automaticamente na memória em
tempo de execução.
Para obter informações passo a passo sobre como usar esses recursos, confira os
seguintes tópicos de Ajuda.
Para Consulte
Trabalhar com fontes de Como: Classificar e filtrar dados ADO.NET com o componente
dados do ADO.NET BindingSource do Windows Forms
Para Consulte
Para obter informações passo a passo sobre como usar esses recursos, confira os
seguintes tópicos de Ajuda:
Para Consulte
formulário
Como: imprimir um arquivo de texto de várias páginas
nos Windows Forms
Saiba mais sobre a segurança dos Visão geral da Segurança do Windows Forms
Windows Forms
Confira também
WindowsFormsApplicationBase
Visão geral dos Windows Forms
Objeto My.Forms
Personalizando projetos e estendendo
My com o Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você pode personalizar modelos de projeto para fornecer mais objetos My . Isso facilita a
localização e o uso dos seus objetos por outros desenvolvedores.
Nesta seção
Estendendo o Meu Namespace no Visual Basic
Seções relacionadas
Desenvolvimento com My
Confira também
Desenvolvendo aplicativos com o Visual Basic
Estendendo o namespace My no Visual
Basic
Artigo • 21/02/2023 • 9 minutos para o fim da leitura
Por exemplo, suponha que você use frequentemente o objeto My.User para acessar o
contexto de segurança atual para o usuário que executa seu aplicativo. No entanto, sua
empresa usa um objeto de usuário personalizado para expor informações e recursos
adicionais para usuários dentro da empresa. Nesse cenário, você pode substituir o valor
padrão da propriedade My.User.CurrentPrincipal por uma instância do seu próprio
objeto principal personalizado, conforme mostrado no exemplo a seguir:
VB
My.User.CurrentPrincipal = CustomPrincipal
criando uma classe Partial chamada MyApplication ou MyComputer . A classe não pode
ser uma classe Private . Se você especificar a classe como parte do namespace My ,
poderá adicionar propriedades e métodos que serão incluídos com os objetos
My.Application ou My.Computer .
VB
Imports System.Net.NetworkInformation
Namespace My
Get
NetworkInterface.GetAllNetworkInterfaces()
dnsAddressList = dnsServers
Else
dnsAddressList.Union(dnsServers)
End If
Next adapter
Return dnsAddressList
End Get
End Property
End Class
End Namespace
VB
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
VB
Namespace My
<HideModuleName()>
Module MyCustomExtensions
Get
Return _extension.GetInstance()
End Get
End Property
End Module
End Namespace
VB
Namespace My
End Class
End Namespace
VB
Namespace My
End If
_sampleExtensionHandlers =
System.Delegate.Combine(_sampleExtensionHandlers, value)
End AddHandler
_sampleExtensionHandlers =
System.Delegate.Remove(_sampleExtensionHandlers, value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
_sampleExtensionHandlers.Invoke(sender, e)
End If
End RaiseEvent
End Event
<Global.System.ComponentModel.EditorBrowsable(
Global.System.ComponentModel.EditorBrowsableState.Advanced)>
RaiseEvent SampleExtensionLoad(sender, e)
End Sub
) Handles Me.SampleExtensionLoad
End Sub
End Class
End Namespace
Diretrizes de design
Ao desenvolver extensões para o namespace My , use as seguintes diretrizes para ajudar
a minimizar os custos de manutenção dos componentes de extensão:
Essas diretrizes não impedem princípios gerais de design para bibliotecas de classes. Em
vez disso, são recomendações otimizadas para desenvolvedores que estão usando o
Visual Basic e o namespace My . Para obter princípios gerais de design para criar
bibliotecas de classes, confira Diretrizes de Design da Estrutura.
Confira também
Como empacotar e implantar extensões personalizadas de My
Estendendo o modelo de aplicativo do Visual Basic
Como personalizar quais objetos estão disponíveis em My
Página Minhas extensões, Designer de projeto
Página de Aplicativo, Designer de Projeto (Visual Basic)
Parcial
Empacotar e implantar Minhas
extensões personalizadas (Visual Basic)
Artigo • 07/04/2023 • 4 minutos para o fim da leitura
Este tópico discute como empacotar uma extensão My personalizada como um modelo
de item oculto que pode ser gerenciado na página Minhas extensões do Designer de
Projeto do Visual Basic. A extensão My personalizada também pode ser adicionada
automaticamente quando uma referência a um assembly especificado é adicionada a
um projeto.
7 Observação
XML
<VBMyExtensionTemplate
ID="Microsoft.VisualBasic.Samples.MyExtensions.MyPrinterInfo"
Version="1.0.0.0"
AssemblyFullName="Microsoft.VisualBasic.PowerPacks.vs"
/>
Atributo Descrição
XML
<CustomDataSignature>Microsoft.VisualBasic.MyExtension</CustomDataSignature>
Você não pode modificar arquivos em uma pasta compactada (arquivo .zip)
diretamente. Você deve copiar o arquivo .vstemplate da pasta compactada, modificá-lo
e substituir o arquivo .vstemplate na pasta compactada pela cópia atualizada.
O exemplo a seguir mostra o conteúdo de um arquivo .vstemplate que tem o elemento
<CustomDataSignature> adicionado.
XML
<VSTemplate Version="2.0.0"
xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
<TemplateData>
<DefaultName>MyCustomExtensionModule.vb</DefaultName>
<Name>MyPrinterInfo</Name>
<ProjectType>VisualBasic</ProjectType>
<SortOrder>10</SortOrder>
<Icon>__TemplateIcon.ico</Icon>
<CustomDataSignature
>Microsoft.VisualBasic.MyExtension</CustomDataSignature>
</TemplateData>
<TemplateContent>
<References />
<ProjectItem SubType="Code"
TargetFileName="$fileinputname$.vb"
ReplaceParameters="true"
>MyCustomExtensionModule.vb</ProjectItem>
</TemplateContent>
</VSTemplate>
Instalar o modelo
Para instalar o modelo, você pode copiar a pasta compactada (arquivo .zip) para a pasta
de modelos de item do Visual Basic. Por padrão, os modelos de item do usuário estão
localizados em %USERPROFILE%\Documents\Visual Studio
<Version>\Templates\ItemTemplates\Visual Basic. Como alternativa, você pode publicar
o modelo como um arquivo do Instalador do Visual Studio (.vsi).
Confira também
Estendendo o Meu Namespace no Visual Basic
Estendendo o modelo de aplicativo do Visual Basic
Como personalizar quais objetos estão disponíveis em My
Página Minhas extensões, Designer de projeto
Estendendo o modelo de aplicativo do
Visual Basic
Artigo • 21/02/2023 • 5 minutos para o fim da leitura
executado.
O método ShowSplashScreen contém o código que exibe a tela inicial por, pelo
menos, o número de milissegundos especificado pela propriedade
MinimumSplashScreenDisplayTime. Para usar essa funcionalidade, você deve
adicionar a tela inicial ao aplicativo usando o Designer de Projeto (que define a
propriedade My.Application.MinimumSplashScreenDisplayTime como dois
segundos) ou definir a propriedade
My.Application.MinimumSplashScreenDisplayTime em um método que substitui
Por padrão, esse método não faz nada. Se você selecionar uma tela inicial para
o aplicativo no Designer de Projeto do Visual Basic, o designer substituirá o
método OnCreateSplashScreen por um que defina a propriedade SplashScreen
como uma nova instância do formulário de tela inicial.
3. OnRun. Fornece o ponto de partida para quando o aplicativo principal está pronto
para começar a ser executado, após a inicialização ser feita.
Por padrão, esse método não faz nada. No entanto, quando você seleciona um
formulário principal para o aplicativo no Designer de Projeto do Visual Basic, o
designer substitui o método OnCreateMainForm por um que defina a
propriedade MainForm como uma nova instância do formulário principal.
ShutdownStyle O que faz com que o aplicativo seja encerrado, Lista de Modo de
como quando o formulário de inicialização é desligamento
fechado ou quando o último formulário é
fechado.
Confira também
ApplicationBase
Startup
StartupNextInstance
UnhandledException
Shutdown
NetworkAvailabilityChanged
Visão geral do modelo de aplicativo do Visual Basic
Página de Aplicativo, Designer de Projeto (Visual Basic)
Personalizando quais objetos estão disponíveis em My
(Visual Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Esse tópico descreve como controlar quais objetos My são habilitados definindo-se a constante de compilação condicional
_MYTYPE do projeto. O IDE (Ambiente de Desenvolvimento Integrado) do Visual Studio mantém a constante de compilação
Console
/define:_MYTYPE=\"WindowsForms\"
Esta tabela mostra como a constante de compilação condicional _MYTYPE está definida para vários tipos de projeto.
Web "Web"
Vazio "Empty"
7 Observação
Por padrão, as constantes de compilação condicional indefinidas são resolvidas para FALSE . Você pode especificar valores
para as constantes indefinidas ao compilar seu projeto para substituir o comportamento padrão.
7 Observação
Quando _MYTYPE é definido como "Personalizado", o projeto contém o namespace My , mas não contém objetos. No
entanto, a configuração _MYTYPE como "Vazio" impede que o compilador adicione o namespace My e seus objetos.
Esta tabela descreve os efeitos dos valores predefinidos das constantes de compilação _MY .
Constante Significado
– A versão de "Console" deriva de ConsoleApplicationBase. e tem menos membros do que a versão "Windows".
– A versão "Windows" deriva de ApplicationBase e tem menos membros do que a versão "WindowsForms".
– A versão "Web" deriva de ServerComputer e tem menos membros do que a versão "Windows".
– A versão "Web" My.User está associada à identidade do usuário da solicitação HTTP atual.
Confira também
ApplicationBase
Computer
Log
User
Como My depende do tipo de projeto
Compilação Condicional
-define (Visual Basic)
Objeto My.Forms
Objeto My.Request
Objeto My.Response
Objeto My.WebServices
Conceitos de Programação (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Nesta seção
Título Descrição
Visão geral de Discute como fornecer informações adicionais sobre como programar
atributos (Visual elementos como tipos, campos, métodos e propriedades por meio de
Basic) atributos.
Coleções (Visual Descreve alguns dos tipos de coleções fornecidos pelo .NET Framework.
Basic) Demonstra como usar coleções simples e coleções de pares chave/valor.
Árvores de Explica como você pode usar árvores de expressão para habilitar a
expressão (Visual modificação dinâmica de código executável.
Basic)
Iteradores (Visual Descreve os iteradores, que são usados para percorrer coleções e retornar
Basic) elementos um por vez.
Reflexão (Visual Explica como usar a reflexão para criar dinamicamente uma instância de um
Basic) tipo, associar o tipo a um objeto existente ou obter o tipo de um objeto
existente e invocar seus métodos ou acessar suas propriedades e campos.
Seções relacionadas
Artigo Descrição
Dicas de Discute várias regras básicas que podem ajudá-lo a aumentar o desempenho
desempenho do seu aplicativo.
Programação assíncrona com Async e
Await (Visual Basic)
Artigo • 15/02/2023 • 17 minutos para o fim da leitura
Este tópico oferece uma visão geral de quando e como usar a programação assíncrona
e inclui links para tópicos de suporte que contêm detalhes e exemplos.
O exemplo a seguir mostra um método assíncrono. Quase tudo no código deve ser
completamente familiar para você. Os comentários chamam os recursos que você deve
adicionar para criar a assincronia.
VB
' - Its return type is Task or Task(Of T). (See "Return Types" section.)
' You can do other work here that doesn't rely on the string from
GetStringAsync.
DoIndependentWork()
' - The Await operator then retrieves the String result from
getStringTask.
Return urlContents.Length
End Using
End Function
Se AccessTheWebAsync não tiver nenhum trabalho que possa fazer entre chamar
GetStringAsync e aguardar a conclusão, você poderá simplificar o código ao chamar e
VB
O método geralmente inclui pelo menos uma expressão await, a qual marca um
ponto onde o método não pode continuar até que a operação assíncrona
aguardada seja concluída. Enquanto isso, o método é suspenso e o controle
retorna para o chamador do método. A próxima seção deste tópico ilustra o que
acontece no ponto de suspensão.
Para obter mais informações sobre assincronia nas versões anteriores do .NET
Framework, consulte Programação assíncrona do .NET Framework tradicional e TPL.
6. AccessTheWebAsync está sem trabalho que ele possa executar sem um resultado de
getStringTask . Em seguida, AccessTheWebAsync deseja calcular e retornar o
7 Observação
retornou uma tarefa na etapa 3.) Em vez disso, o resultado da cadeia de caracteres
é armazenado na tarefa que representa a conclusão do método, getStringTask . O
operador await recupera o resultado de getStringTask . A instrução de atribuição
atribui o resultado retornado a urlContents .
8. Quando AccessTheWebAsync tem o resultado da cadeia de caracteres, o método
pode calcular o comprimento da cadeia de caracteres. Em seguida, o trabalho de
AccessTheWebAsync também é concluído e o manipulador de eventos de espera
Para obter mais informações sobre o fluxo de controle, consulte Fluxo de controle em
programas assíncronos (Visual Basic).
O Windows Runtime também contém vários métodos que você pode usar com Async e
Await em aplicativos do Windows. Para obter mais informações e métodos de exemplo,
confira Chamar APIs assíncronas em C# ou no Visual Basic, Programação assíncrona
(aplicativos do Windows Runtime) e WhenAny: ponte entre o .NET Framework e o
Windows Runtime.
Threads
Os métodos assíncronos destinam-se a ser operações não causadoras de bloqueios.
Uma expressão Await em um método assíncrono não bloqueia o thread atual enquanto
a tarefa aguardada está em execução. Em vez disso, a expressão anterior assina o
restante do método como uma continuação e retorna o controle para o chamador do
método assíncrono.
As palavras-chave Async e Await não fazem com que threads adicionais sejam criados.
Os métodos assíncronos não exigem multithreading, pois um método assíncrono não
executa no próprio thread. O método é executado no contexto de sincronização atual e
usa tempo no thread somente quando o método está ativo. É possível usar Task.Run
para mover o trabalho de CPU associado a um thread em segundo plano, mas um
thread em segundo plano não ajuda com um processo que está apenas aguardando
que os resultados tornem-se disponíveis.
Async e Await
Se especificar que um método é um método assíncrono usando um modificador Async,
você habilitará os dois recursos a seguir.
O método assíncrono marcado pode ele próprio ser aguardado por métodos que
o chamam.
Async e Await são palavras-chave contextuais. Para obter mais informações e exemplos,
consulte os seguintes tópicos:
Async
Operador Await
Você usará Task como o tipo de retorno caso o método não possua nenhuma instrução
return ou tenha uma instrução return que não retorna um operando.
O exemplo a seguir mostra como você declara e chama um método que retorna um
Task(Of TResult) ou um Task:
VB
' . . .
Return hours
End Function
' . . .
End Function
Await returnedTask
Await Task_MethodAsync()
Um método assíncrono também pode ser um método Sub . Esse tipo de retorno é usado
principalmente para definir manipuladores de eventos, nos quais o tipo de retorno é
necessário. Os manipuladores de eventos assíncronos geralmente servem como o ponto
de partida para programas assíncronos.
O método assíncrono não pode declarar parâmetros ByRef, mas pode chamar métodos
com tais parâmetros.
Para obter mais informações e exemplos, consulte Tipos de retorno assíncronos (Visual
Basic). Para obter mais informações sobre como capturar exceções nos métodos
assíncronos, consulte a Instrução Try... Catch... Finally.
Convenção de nomenclatura
Por convenção, deve-se acrescentar "Async" aos nomes dos métodos que têm um
modificador Async .
Como fazer várias Demonstra como iniciar várias tarefas ao mesmo Exemplo de
solicitações da Web tempo. assincronia: fazer
em paralelo usando várias solicitações da
Async e Await (Visual Web paralelamente
Basic)
WhenAny: ponte Mostra como criar uma ponte entre tipos Task no Exemplo de
entre o .NET .NET Framework e IAsyncOperations no Windows assincronia: ponte
Framework e o Runtime para que você possa usar WhenAny entre o .NET e o
Windows Runtime com um método do Windows Runtime. Windows Runtime
(AsTask e WhenAny)
Cancelamento Mostra como criar uma ponte entre tipos Task no Exemplo de
assíncrono: ponte .NET Framework e IAsyncOperations no Windows assincronia: ponte
entre o .NET Runtime para que você possa usar entre o .NET e o
Framework e o CancellationTokenSource com um método do Windows Runtime
Windows Runtime Windows Runtime. (AsTask &
Cancellation)
Exemplo completo
O código a seguir é o arquivo MainWindow.xaml.vb do aplicativo WPF (Windows
Presentation Foundation) discutido neste tópico. É possível baixar o exemplo de
Exemplo de assincronia: exemplo de "Programação assíncrona com Async e Await”.
VB
Imports System.Net.Http
' Example that demonstrates Asynchronous Progamming with Async and Await.
' Working . . . . . . .
'
Class MainWindow
' Mark the event handler with Async so you can use Await in it.
End Sub
' - Its return type is Task or Task(Of T). (See "Return Types"
section.)
client.GetStringAsync("https://docs.microsoft.com/dotnet")
' You can do other work here that doesn't rely on the string
from GetStringAsync.
DoIndependentWork()
' - The Await operator then retrieves the String result from
getStringTask.
Return urlContents.Length
End Using
End Function
Sub DoIndependentWork()
End Sub
End Class
Confira também
Operador Await
Async
Visão geral de atributos (Visual Basic)
Artigo • 22/02/2023 • 4 minutos para o fim da leitura
Usando atributos
Os atributos podem ser colocados em quase qualquer declaração, embora um atributo
específico possa restringir os tipos de declarações nas quais ele é válido. No Visual
Basic, um atributo fica entre colchetes angulares (<>). Ele deverá aparecer
imediatamente antes do elemento ao qual ele é aplicado, na mesma linha.
VB
End Class
VB
Imports System.Runtime.InteropServices
VB
<System.Runtime.InteropServices.DllImport("user32.dll")>
Sub SampleMethod()
End Sub
VB
Imports System.Runtime.InteropServices
VB
End Sub
Alguns atributos podem ser especificados mais de uma vez para uma determinada
entidade. Um exemplo de um atributo multiuso é ConditionalAttribute:
VB
<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub
7 Observação
VB
<DllImport("user32.dll")>
Destinos de Atributos
O destino de um atributo é a entidade à qual o atributo se aplica. Por exemplo, um
atributo pode ser aplicado a uma classe, um método específico ou um assembly inteiro.
Por padrão, um atributo aplica-se ao elemento que ele precede. Mas você pode
identificar explicitamente, por exemplo, se um atributo é aplicado a um método, ou a
seu parâmetro ou a seu valor retornado.
VB
<target : attribute-list>
O exemplo a seguir mostra como aplicar atributos a módulos e assemblies. Para obter
mais informações, consulte Atributos comuns (Visual Basic).
VB
Imports System.Reflection
Module: CLSCompliant(True)>
Marcar métodos usando o atributo WebMethod nos serviços Web para indicar que o
método deve ser chamado por meio do protocolo SOAP. Para obter mais
informações, consulte WebMethodAttribute.
Descrever como fazer mapeamento entre nós XML e membros de classe para
serialização de XML.
Seções relacionadas
Para obter mais informações, consulte:
Confira também
Guia de programação do Visual Basic
Reflexão (Visual Basic)
Atributos
Informações do chamador (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Para obter essas informações, você deve usar os atributos que são aplicadas aos
parâmetros opcionais, cada qual com um valor padrão. A tabela a seguir lista os
atributos de informações do chamador que são definidos no namespace de
System.Runtime.CompilerServices:
Exemplo
O exemplo a seguir mostra como usar os atributos de informações do chamador. Em
cada chamada para o método TraceMessage , as informações do chamador são
substituídas como argumentos para os parâmetros opcionais.
VB
TraceMessage("Something happened.")
End Sub
<System.Runtime.CompilerServices.CallerMemberName> Optional
memberName As String = Nothing,
<System.Runtime.CompilerServices.CallerFilePath> Optional
sourcefilePath As String = Nothing,
<System.Runtime.CompilerServices.CallerLineNumber()> Optional
sourceLineNumber As Integer = 0)
End Sub
Comentários
Você deve especificar um valor padrão explícito para cada parâmetro opcional. Você não
pode aplicar atributos de informações do chamador aos parâmetros que não são
especificados como opcionais.
O gráfico a seguir mostra os nomes de membros que são retornados quando você usa
o atributo CallerMemberName .
Expressões de chamador
Você usa o System.Runtime.CompilerServices.CallerArgumentExpressionAttribute
quando quer capturar a expressão usada para um argumento. As bibliotecas de
diagnóstico podem querer fornecer mais detalhes sobre as expressões passadas para um
argumento. Ao fornecer a expressão que disparou o diagnóstico, além do nome do
parâmetro, os desenvolvedores têm mais detalhes sobre a condição que disparou o
diagnóstico. Essas informações extras facilitam a correção. O método a seguir usa o
CallerArgumentExpressionAttribute para exibir a condição que deve ser True :
VB
End If
End Sub
Confira também
Atributos (Visual Basic)
Atributos comuns (Visual Basic)
Parâmetros Opcionais
Conceitos de Programação (Visual Basic)
Coleções (Visual Basic)
Artigo • 22/02/2023 • 15 minutos para o fim da leitura
Para muitos aplicativos, você desejará criar e gerenciar grupos de objetos relacionados.
Há duas maneiras de agrupar objetos: criando matrizes de objetos e criando coleções
de objetos.
As matrizes são mais úteis para criar e trabalhar com um número fixo de objetos
fortemente tipados. Para obter informações sobre matrizes, consulte Matrizes.
As coleções fornecem uma maneira mais flexível de trabalhar com grupos de objetos.
Ao contrário das matrizes, o grupo de objetos com o qual você trabalha pode crescer e
reduzir dinamicamente conforme as necessidades do aplicativo são alteradas. Para
algumas coleções, você pode atribuir uma chave para qualquer objeto que coloque na
coleção para que você possa recuperar rapidamente o objeto usando a chave.
Uma coleção é uma classe, portanto você deve declarar uma instância da classe antes
de adicionar elementos a essa coleção.
Se a coleção contiver elementos de apenas um tipo de dados, você poderá usar uma
das classes no namespace System.Collections.Generic. Uma coleção genérica impõe
segurança de tipos para que nenhum outro tipo de dados possa ser adicionado a ela.
Ao recuperar um elemento de uma coleção genérica, você não precisa determinar seu
tipo de dados ou convertê-lo.
7 Observação
O exemplo a seguir cria uma lista de cadeias de caracteres e, em seguida, itera nas
cadeias de caracteres usando uma instrução For Each…Next.
VB
' Create a list of strings.
salmons.Add("chinook")
salmons.Add("coho")
salmons.Add("pink")
salmons.Add("sockeye")
Next
Se o conteúdo de uma coleção for conhecido com antecedência, você poderá usar um
inicializador de coleção para inicializar a coleção. Para obter mais informações, consulte
Inicializadores de coleção.
VB
Next
Você pode usar uma instrução For…Next em vez de uma instrução For Each para iterar
em uma coleção. Você realiza isso acessando os elementos da coleção pela posição do
índice. O índice dos elementos começa em 0 e termina na contagem de elementos,
menos de 1.
O exemplo a seguir itera nos elementos de uma coleção usando For…Next em vez de
For Each .
VB
Next
VB
salmons.Remove("coho")
Next
O exemplo a seguir remove elementos de uma lista genérica. Em vez de uma instrução
For Each , é usada uma instrução For…Next que itera em ordem decrescente. Isso é feito
porque o método RemoveAt faz com que os elementos após um elemento removido
tenham um valor de índice menor.
VB
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
numbers.RemoveAt(index)
End If
Next
numbers.ForEach(
' Output: 0 2 4 6 8
Para o tipo dos elementos na List<T>, você também pode definir sua própria classe. No
exemplo a seguir, a classe Galaxy que é usada pela List<T> é definida no código.
VB
With theGalaxy
End With
Next
' Output:
' Pinwheel 25
' Andromeda 3
End Sub
End Class
Tipos de coleções
Várias coleções comuns são fornecidas pelo .NET Framework. Cada tipo de coleção é
projetado para uma finalidade específica.
Classes System.Collections.Generic
Classes System.Collections.Concurrent
Classes System.Collections
Classes System.Collections.Generic
Você pode criar uma coleção genérica usando uma das classes no namespace
System.Collections.Generic. Uma coleção genérica é útil quando cada item na coleção
tem o mesmo tipo de dados. Uma coleção genérica impõe tipagem forte, permitindo
que apenas o tipo de dados desejado seja adicionado.
Classe Descrição
List<T> Representa uma lista de objetos que podem ser acessados por índice.
Fornece métodos para pesquisar, classificar e modificar listas.
Classes System.Collections.Concurrent
No .NET Framework 4 ou mais recente, as coleções no namespace
System.Collections.Concurrent fornecem operações thread-safe eficientes para acessar
itens da coleção de vários threads.
Classes System.Collections
As classes no namespace System.Collections não armazenam elementos como objetos
especificamente tipados, mas como objetos do tipo Object .
Classe Descrição
Hashtable Representa uma coleção de pares chave-valor organizados com base no código hash
da chave.
Queue Representa uma coleção de objetos PEPS (primeiro a entrar, primeiro a sair).
Stack Representa uma coleção de objetos UEPS (último a entrar, primeiro a sair).
A classe Collection do Visual Basic armazena todos os seus elementos como tipo
Object , para que você possa adicionar um item de qualquer tipo de dados. Não há
proteção contra tipos de dados inadequados que estejam sendo adicionados.
Quando você usa a classe Collection do Visual Basic, o primeiro item em uma coleção
tem um índice de 1. Isso difere das classes de coleção do .NET Framework, para as quais
o índice inicial é 0.
O exemplo a seguir cria uma coleção Dictionary e itera no dicionário usando uma
instrução For Each .
VB
With theElement
End With
Next
End Sub
Return elements
End Function
theElement.Symbol = symbol
theElement.Name = name
theElement.AtomicNumber = atomicNumber
elements.Add(Key:=theElement.Symbol, value:=theElement)
End Sub
End Class
Para, em vez disso, usar um inicializador de coleção para criar a coleção Dictionary ,
você pode substituir os métodos BuildDictionary e AddToDictionary pelo seguinte
método.
VB
End Function
VB
Else
End If
End Sub
O exemplo a seguir usa o método TryGetValue para localizar rapidamente um item por
chave.
VB
Else
End If
End Sub
O exemplo a seguir executa uma consulta LINQ em uma List genérica. A consulta LINQ
retorna uma coleção diferente que contém os resultados.
VB
Order By theElement.Name
Next
' Output:
' Calcium 20
' Potassium 19
' Scandium 21
End Sub
End Function
End Class
Cada chamada ao método CompareTo faz uma comparação única que é usada para
classificação. Os códigos escritos pelo usuário no método CompareTo retornam um valor
para cada comparação do objeto atual com outro objeto. O valor retornado será menor
que zero se o objeto atual for menor que o outro objeto, maior que zero se o objeto
atual for maior que o outro objeto e zero, se eles forem iguais. Isso permite que você
defina no código os critérios para maior que, menor que e igual.
VB
cars.Sort()
Console.Write(thisCar.Name)
Console.WriteLine()
Next
' Output:
End Sub
If compare = 0 Then
compare = Me.Speed.CompareTo(other.Speed)
compare = -compare
End If
Return compare
End Function
End Class
Embora seja possível definir uma coleção personalizada, é melhor usar as coleções que
estão incluídas no .NET Framework, que estão descritas em Tipos de coleções
anteriormente neste tópico.
VB
Next
Console.WriteLine()
End Sub
Implements System.Collections.IEnumerable
Implements System.Collections.IEnumerable.GetEnumerator
'Return _colors.GetEnumerator
End Function
Implements System.Collections.IEnumerator
_colors = colors
End Sub
Implements System.Collections.IEnumerator.Current
Get
Return _colors(_position)
End Get
End Property
Implements System.Collections.IEnumerator.MoveNext
_position += 1
End Function
_position = -1
End Sub
End Class
End Class
End Class
Iterators
Um iterador é usado para realizar uma iteração personalizada em uma coleção. Um
iterador pode ser um método ou um acessador get . Um iterador usa uma instrução
Yield para retornar um elemento da coleção por vez.
Você chama um iterador usando uma instrução For Each...Next. Cada iteração do loop
For Each chama o iterador. Quando uma instrução Yield é alcançada no iterador, uma
VB
Next
Console.WriteLine()
' Output: 6 8 10 12 14 16 18
End Sub
As IEnumerable(Of Integer)
Yield number
End If
Next
End Function
Confira também
Inicializadores de Coleção
Conceitos de Programação (Visual Basic)
Instrução Option Strict
LINQ to Objects (Visual Basic)
LINQ paralelo (PLINQ)
Coleções e Estruturas de Dados
Selecionando uma classe de coleção
Comparações e Classificações Dentro de Coleções
Quando Usar Coleções Genéricas
Covariância e contravariância (Visual
Basic)
Artigo • 15/02/2023 • 3 minutos para o fim da leitura
VB
' Covariance.
' Contravariance.
VB
' array(0) = 10
VB
Return Nothing
End Function
End Sub
Return ""
End Function
End Sub
End Sub
VB
Dim strings As IEnumerable(Of String) = New List(Of String)
Tópicos Relacionados
Título Descrição
Você pode compilar e executar código representado por árvores de expressão. Isso
permite a modificação dinâmica de código executável, a execução de consultas LINQ
em vários bancos de dados e a criação de consultas dinâmicas. Para obter mais
informações sobre árvores de expressão no LINQ, consulte Como usar árvores de
expressão para compilar consultas dinâmicas (Visual Basic).
Você pode fazer o compilador C# ou do Visual Basic criar uma árvore de expressões
para você com base em uma expressão lambda anônima ou criar árvores de expressão
manualmente usando o namespace System.Linq.Expressions.
VB
Dim lambda As Expression(Of Func(Of Integer, Boolean)) =
O exemplo de código a seguir demonstra como criar uma árvore de expressão que
representa a expressão lambda Function(num) num < 5 usando a API.
VB
' Manually build the expression tree for the lambda expression num => num <
5.
numLessThanFive,
VB
Expression.Parameter(GetType(Integer), "value")
Expression.Parameter(GetType(Integer), "result")
Expression.Assign(result, Expression.Constant(1)),
Expression.Loop(
Expression.IfThenElse(
Expression.GreaterThan(value, Expression.Constant(1)),
Expression.MultiplyAssign(result,
Expression.PostDecrementAssign(value)),
Expression.Break(label, result)
),
label
Console.WriteLine(factorial)
Para saber mais, confira Gerar métodos dinâmicos com árvores de expressão no Visual
Studio 2010 , que também se aplica a versões mais recentes do Visual Studio.
VB
'
VB
' Invoking the delegate and writing the result to the console.
Console.WriteLine(result(4))
Console.WriteLine(expr.Compile()(4))
Para obter mais informações, consulte Como executar árvores de expressão (Visual
Basic).
Confira também
System.Linq.Expressions
Como executar árvores de expressão (Visual Basic)
Como modificar árvores de expressão (Visual Basic)
Expressões Lambda
Visão geral do Dynamic Language Runtime
Conceitos de Programação (Visual Basic)
Iteradores (Visual Basic)
Artigo • 22/02/2023 • 10 minutos para o fim da leitura
Um iterador pode ser usado para percorrer coleções, como listas e matrizes.
No exemplo a seguir, a primeira iteração do loop For Each faz que a execução continue
no método iterador SomeNumbers até que a primeira instrução Yield seja alcançada. Essa
iteração retorna um valor de 3 e o local atual no método iterador é mantido. Na
próxima iteração do loop, a execução no método iterador continuará de onde parou,
parando novamente quando alcançar uma instrução Yield . Essa iteração retorna um
valor de 5 e o local atual no método iterador é mantido novamente. O loop terminará
quando o final do método iterador for alcançado.
VB
Sub Main()
Next
' Output: 3 5 8
Console.ReadKey()
End Sub
Yield 3
Yield 5
Yield 8
End Function
Você pode usar uma instrução Exit Function ou Return para terminar a iteração.
Neste tópico
Iterador simples
Blocos Try
Métodos anônimos
Informações de sintaxe
Implementação técnica
Uso de iteradores
7 Observação
Iterador simples
O exemplo a seguir contém uma única instrução Yield que está dentro de um loop
For...Next. Em Main , cada iteração do corpo da instrução For Each cria uma chamada à
função iteradora, que avança para a próxima instrução Yield .
VB
Sub Main()
Next
' Output: 6 8 10 12 14 16 18
Console.ReadKey()
End Sub
As System.Collections.Generic.IEnumerable(Of Integer)
Yield number
End If
Next
End Function
O método GetEnumerator retorna cada cadeia de caracteres uma de cada vez usando a
instrução Yield e um modificador Iterator está na declaração de função.
VB
Sub Main()
Next
Console.ReadKey()
End Sub
Implements IEnumerable
Public days =
Implements IEnumerable.GetEnumerator
Yield days(i)
Next
End Function
End Class
O exemplo a seguir cria uma classe Zoo que contém uma coleção de animais.
A instrução For Each , que faz referência à instância de classe ( theZoo ), chama
implicitamente o método GetEnumerator . As instruções For Each , que fazem referência
às propriedades Birds e Mammals , usam o método iterador nomeado AnimalsForType .
VB
Sub Main()
theZoo.AddMammal("Whale")
theZoo.AddMammal("Rhinoceros")
theZoo.AddBird("Penguin")
theZoo.AddBird("Warbler")
Next
Console.WriteLine()
Next
Console.WriteLine()
Next
Console.WriteLine()
Console.ReadKey()
End Sub
Implements IEnumerable
End Sub
End Sub
Implements IEnumerable.GetEnumerator
Yield theAnimal.Name
Next
End Function
Get
Return AnimalsForType(Animal.TypeEnum.Mammal)
End Get
End Property
Get
Return AnimalsForType(Animal.TypeEnum.Bird)
End Get
End Property
Yield theAnimal.Name
End If
Next
End Function
Bird
Mammal
End Enum
End Class
End Class
Blocos try
O Visual Basic permite uma instrução Yield no bloco Try de uma Instrução Try...
Catch... Finally. Um bloco Try que tem uma instrução Yield pode ter blocos Catch e
pode ter um bloco Finally .
O exemplo a seguir inclui blocos Try , Catch e Finally em uma função iteradora. O
bloco Finally na função iteradora é executado antes da iteração For Each ser
concluída.
VB
Sub Main()
Console.WriteLine(number)
Next
' Output:
' 3
' 4
Console.ReadKey()
End Sub
Try
Yield 3
Yield 4
Yield 5
Yield 6
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
Console.WriteLine("Finally is called.")
End Try
End Function
Uma instrução Yield não pode estar dentro de um bloco Catch ou bloco Finally .
Se o corpo For Each (em vez do método iterador) lançar uma exceção, um bloco Catch
na função iteradora não será executado, mas um bloco Finally na função iteradora
será executado. Um bloco Catch dentro de uma função iteradora captura apenas
exceções que ocorrem dentro da função iteradora.
Métodos anônimos
No Visual Basic, uma função anônima pode ser uma função iteradora. O exemplo a
seguir ilustra essa situação.
VB
As IEnumerable(Of Integer)
Yield 1
Yield 2
End Function
Next
' Output: 1 2
Console.ReadKey()
O exemplo a seguir tem um método não iterador que valida os argumentos. O método
retorna o resultado de um iterador anônimo que descreve os elementos da coleção.
VB
Sub Main()
Next
' Output: 5 6 7 8 9 10
Console.ReadKey()
End Sub
As IEnumerable
End If
End If
Yield index
Next
End Function
Return iterateSequence()
End Function
Se a validação estiver dentro da função iteradora, a validação não poderá ser executada
até o início da primeira iteração do corpo For Each .
O exemplo usa iteradores nomeados para dar suporte a várias maneiras de iterar na
mesma coleção de dados. Esses iteradores nomeados são as propriedades TopToBottom
e BottomToTop e o método TopN .
VB
Sub Main()
theStack.Push(number)
Next
Next
Console.WriteLine()
' Output: 9 8 7 6 5 4 3 2 1 0
Next
Console.WriteLine()
' Output: 9 8 7 6 5 4 3 2 1 0
Next
Console.WriteLine()
' Output: 0 1 2 3 4 5 6 7 8 9
Next
Console.WriteLine()
' Output: 9 8 7 6 5 4 3
Console.ReadKey()
End Sub
Implements IEnumerable(Of T)
values(top) = t
top = top + 1
End Sub
top = top - 1
Return values(top)
End Function
Yield values(index)
Next
End Function
Implements IEnumerable.GetEnumerator
Yield GetEnumerator()
End Function
Get
Return Me
End Get
End Property
Get
Yield values(index)
Next
End Get
End Property
As IEnumerable(Of T)
Yield values(index)
Next
End Function
End Class
Informações de sintaxe
Um iterador pode ocorrer como um método ou como um acessador get . Um iterador
não pode ocorrer em um evento, um construtor de instância, um construtor estático ou
um destruidor estático.
Deve existir uma conversão implícita do tipo de expressão na instrução Yield , para o
tipo de retorno do iterador.
No Visual Basic, "Yield" não é uma palavra reservada e tem um significado especial
somente quando é usado em um método Iterator ou acessador get .
Implementação Técnica
Embora você escreva um iterador como um método, o compilador o traduz em uma
classe aninhada que é, na verdade, uma máquina de estado. Essa classe mantém o
controle da posição do iterador enquanto o loop For Each...Next no código cliente
continuar.
Para ver o que o compilador faz, você pode usar a ferramenta Ildasm.exe para exibir o
código Microsoft Intermediate Language que é gerado para um método iterador.
Quando você cria um iterador para uma classe ou struct, não é necessário implementar
toda a interface IEnumerator. Quando o compilador detecta o iterador, ele gera
automaticamente os métodos Current , MoveNext e Dispose da interface IEnumerator ou
IEnumerator<T>.
instrução Yield anterior. Em seguida, ele continuará até a próxima instrução Yield , até
que o final do corpo do iterador seja alcançado ou até que uma instrução Exit
Function ou Return seja encontrada.
Iteradores não dão suporte ao método IEnumerator.Reset. Para iterar novamente desde
o início, você deve obter um novo iterador.
Para obter informações adicionais, consulte a Especificação da linguagem Visual Basic.
Uso de iteradores
Os iteradores permitem que você mantenha a simplicidade de um loop For Each
quando for necessário usar um código complexo para preencher uma sequência de
lista. Isso pode ser útil quando você quiser fazer o seguinte:
Confira também
System.Collections.Generic
IEnumerable<T>
Instrução For Each...Next
Instrução Yield
Iterador
LINQ (consulta integrada à linguagem)
(Visual Basic)
Artigo • 15/02/2023 • 2 minutos para o fim da leitura
Nesta seção
Introdução ao LINQ (Visual Basic)
Fornece uma introdução geral dos tipos de aplicativos que você pode escrever e dos
tipos de problemas que você pode resolver com consultas do LINQ.
Descreve os fatos básicos que você deve saber para entender a documentação do Visual
Basic e exemplos.
Fornece uma introdução aos operadores de consulta padrão. Ele também fornece links
para tópicos que contêm mais informações sobre cada tipo de operação de consulta.
Inclui links para tópicos que explicam como usar o LINQ to Objects para acessar
estruturas de dados na memória.
Inclui links para tópicos que explicam como usar o LINQ to XML, o qual fornece os
recursos de modificação de documentos na memória do DOM (Modelo de Objeto do
Documento) e dão suporte a expressões de consulta do LINQ.
Herança descreve a capacidade de criar novas classes com base em uma classe
existente.
Polimorfismo significa que você pode ter várias classes que podem ser usadas de forma
intercambiável, ainda que cada classe implemente as mesmas propriedades ou métodos
de maneiras diferentes.
Classes e objetos
Membros de classe
Propriedades e campos
Métodos
Construtores
Destruidores
Eventos
Classes aninhadas
Modificadores de acesso e níveis de acesso
Instanciando classes
Classes e membros compartilhados
Tipos anônimos
Herança
Substituindo membros
Interfaces
Genéricos
Representantes
Classes e objetos
Os termos classe e objeto às vezes são usados de forma intercambiável, mas, na verdade,
as classes descrevem o tipo dos objetos, enquanto os objetos são instâncias utilizáveis
das classes. Sendo assim, o ato de criar um objeto é chamado de instanciação. Usando a
analogia da uma planta, uma classe é a planta e um objeto é a construção feita com
base naquela planta.
VB
Class SampleClass
End Class
O C# também oferece uma versão leve das classes chamada de estruturas, que são úteis
quando você precisa criar uma matriz grande de objetos e não quer consumir muita
memória para isso.
VB
Structure SampleStructure
End Structure
Instrução Class
Instrução Structure
Membros de classe
Cada classe tem diferentes membros de classe que incluem propriedades que descrevem
dados da classe, métodos que definem o comportamento da classe e eventos que
fornecem comunicação entre diferentes classes e objetos.
Propriedades e campos
VB
Class SampleClass
End Class
VB
Class SampleClass
End Class
Se você precisar executar operações adicionais para ler e gravar o valor da propriedade,
defina um campo para armazenar o valor da propriedade e forneça a lógica básica para
armazenar e recuperá-la:
VB
Class SampleClass
Get
Return m_Sample
End Get
m_Sample = Value
End Set
End Property
End Class
A maioria das propriedades têm métodos ou procedimentos para definir e obter o valor
da propriedade. No entanto, você pode criar propriedades somente leitura ou somente
gravação para impedir que elas sejam modificadas ou lidas. No Visual Basic, você pode
usar ReadOnly e WriteOnly palavras-chave. No entanto, propriedades
autoimplementadas não podem ser somente leitura ou somente gravação.
Métodos
Um método é uma ação que um objeto pode executar.
7 Observação
No Visual Basic, há duas maneiras de criar um método: a Sub instrução será usada
se o método não retornar um valor; a Function instrução será usada se um método
retornar um valor.
VB
Class SampleClass
End Function
End Class
Uma classe pode ter várias implementações ou sobrecargas, do mesmo método que
diferem quanto ao número de parâmetros ou tipos de parâmetro.
VB
End Sub
End Sub
Na maioria dos casos, você declara um método dentro de uma definição de classe. No
entanto, o C# também dá suporte a métodos de extensão que permitem adicionar
métodos a uma classe existente fora da definição real da classe.
Para obter mais informações, consulte:
Instrução Function
Instrução Sub
Sobrecargas
Métodos de Extensão
Construtores
Construtores são métodos de classe que são executados automaticamente quando um
objeto de um determinado tipo é criado. Os construtores normalmente inicializam os
membros de dados do novo objeto. Um construtor pode ser executado apenas uma vez
quando uma classe é criada. Além disso, o código no construtor sempre é executado
antes de qualquer outro código em uma classe. No entanto, é possível criar várias
sobrecargas de construtor da mesma forma que é feita para qualquer outro método.
VB
Class SampleClass
End Sub
End Class
Para obter mais informações, confira Tempo de vida do objeto: como os objetos são
criados e destruídos.
Destruidores
Destruidores são usados para destruir instâncias de classes. No .NET Framework, o
coletor de lixo gerencia automaticamente a alocação e a liberação de memória para os
objetos gerenciados em seu aplicativo. No entanto, talvez ainda seja necessário usar os
destruidores para limpar recursos não gerenciados que seu aplicativo criar. Pode haver
apenas um destruidor para uma classe.
Eventos
Eventos permitem que uma classe ou objeto notifique outras classes ou objetos quando
algo interessante ocorrer. A classe que envia (ou aciona) o evento é chamada de editor e
as classes que recebem (ou manipulam) os eventos são chamadas assinantes. Para obter
mais informações sobre os eventos e como eles são gerados e manipulados, consulte
Eventos.
Classes aninhadas
Uma classe definida dentro de outra classe é chamada de aninhada. Por padrão, a classe
aninhada é particular.
VB
Class Container
Class Nested
End Class
End Class
Para criar uma instância da classe aninhada, use o nome da classe de contêiner seguido
pelo ponto e, em seguida, seguido pelo nome da classe aninhada:
VB
Público O tipo ou membro pode ser acessado por qualquer outro código no mesmo
assembly ou em outro assembly que faz referência a ele.
Privado O tipo ou membro pode ser acessado somente pelo código na mesma classe.
Protegido O tipo ou membro pode ser acessado somente pelo código na mesma classe
ou em uma classe derivada.
Friend O tipo ou membro pode ser acessado por qualquer código no mesmo
assembly, mas não de outro assembly.
Protected O tipo ou membro pode ser acessado por qualquer código no mesmo
Friend assembly ou por qualquer classe derivada em outro assembly.
Instanciando classes
Para criar um objeto, você precisa instanciar uma classe ou criar uma instância da classe.
VB
Após instanciar uma classe, você pode atribuir valores às propriedades e campos da
instância e invocar métodos da classe.
VB
sampleObject.SampleMethod()
VB
VB
Class SampleClass
End Class
Para acessar o membro estático, use o nome da classe sem criar um objeto dessa classe:
VB
MsgBox(SampleClass.SampleString)
Compartilhado
Instrução Module
Tipos anônimos
Os tipos anônimos permitem criar objetos sem escrever uma definição de classe para o
tipo de dados. Em vez disso, o compilador gera uma classe para você. A classe não tem
nenhum nome utilizável e contém as propriedades que você especificar ao declarar o
objeto.
VB
Dim sampleObject =
Herança
A herança permite que você crie uma nova classe que reutiliza, estende e modifica o
comportamento definido em outras classes. A classe cujos membros são herdados é
chamada classe base e a classe que herda esses membros é chamada classe derivada. No
entanto, todas as classes em C# herdam implicitamente da classe Object que dá suporte
à hierarquia de classes do .NET e fornece serviços de nível baixo para todas as classes.
7 Observação
O Visual Basic não dá suporte a várias heranças. Ou seja, você pode especificar
apenas uma classe base para uma classe derivada.
VB
Class DerivedClass
Inherits BaseClass
End Class
Por padrão, todas as classes podem ser herdadas. No entanto, é possível especificar se
uma classe não deve ser usada como classe base ou criar uma classe que possa ser
usada apenas como classe base.
Para especificar que uma classe não pode ser usada como classe base:
VB
End Class
Para especificar que uma classe pode ser usada apenas como classe base e não pode
ser instanciada:
VB
End Class
Instrução Inherits
NotInheritable
MustInherit
Substituindo membros
Por padrão, uma classe derivada herda todos os membros de sua classe base. Se quiser
alterar o comportamento do membro herdado, você precisa substituí-la. Ou seja, você
pode definir uma nova implementação de método, propriedade ou evento na classe
derivada.
Interfaces
Interfaces, como classes, definem um conjunto de propriedades, métodos e eventos.
Mas, diferente das classes, as interfaces não fornecem implementação. Elas são
implementadas por classes e definidas como entidades separadas das classes. Uma
interface representa um contrato, no sentido em que uma classe que implementa uma
interface deve implementar todos os aspectos da interface exatamente como ela está
definida.
VB
Public Interface ISampleInterface
Sub DoSomething()
End Interface
VB
Class SampleClass
Implements ISampleInterface
Sub DoSomething
End Sub
End Class
Interfaces
Instrução Interface
Instrução Implements
Genéricos
Classes, estruturas, interfaces e métodos do .NET Framework podem incluir parâmetros
de tipo que definem tipos de objetos que podem armazenar ou usar. O exemplo mais
comum dos genéricos é uma coleção, em que você pode especificar o tipo dos objeto a
serem armazenados em uma coleção.
VB
Class SampleGeneric(Of T)
Public Field As T
End Class
VB
Delegados
Um delegado é um tipo que define uma assinatura de método e pode fornecer uma
referência a qualquer método com uma assinatura compatível. Você pode invocar (ou
chamar) o método através do delegado. Delegados são usados para passar métodos
como argumentos a outros métodos.
7 Observação
Os manipuladores de eventos nada mais são do que métodos chamados por meio
de delegados. Para obter mais informações sobre como usar delegados na
manipulação de eventos, consulte Eventos.
VB
Para criar uma referência a um método que corresponde à assinatura especificada pelo
delegado:
VB
Class SampleClass
End Sub
Sub SampleDelegateSub()
sd("Sample string")
End Sub
End Class
Representantes
Instrução Delegate
Operador AddressOf
Confira também
Guia de programação do Visual Basic
Reflexão (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
A reflexão fornece objetos (do tipo Type) que descrevem assemblies, módulos e tipos. É
possível usar a reflexão para criar dinamicamente uma instância de um tipo, associar o
tipo a um objeto existente ou obter o tipo de um objeto existente e invocar seus
métodos ou acessar suas propriedades e campos. Se você estiver usando atributos em
seu código, a reflexão permite acessá-los. Para obter mais informações, consulte
Atributos.
Veja um exemplo simples de reflexão usando o método estático GetType – herdado por
todos os tipos da classe base Object – para obter o tipo de uma variável:
VB
Dim i As Integer = 42
System.Console.WriteLine(type)
A saída é:
System.Int32
O exemplo a seguir usa a reflexão para obter o nome completo do assembly carregado.
VB
System.Console.WriteLine(info)
A saída é:
Quando você precisa acessar atributos nos metadados do seu programa. Para
obter mais informações, consulte Recuperando informações armazenadas em
atributos.
Para examinar e instanciar tipos em um assembly.
Seções relacionadas
Para mais informações:
Reflexão
System.Reflection.Emit
Confira também
Guia de programação do Visual Basic
Assemblies no .NET
Serialização (Visual Basic)
Artigo • 15/02/2023 • 4 minutos para o fim da leitura
Se não desejar que um campo em sua classe seja serializável, aplique o atributo
NonSerializedAttribute. Se um campo de um tipo serializável contiver um ponteiro, um
identificador ou outra estrutura de dados que é específica de um determinado ambiente
e o campo não puder ser reconstituído em um ambiente diferente, será necessário
torná-lo não serializável.
Se uma classe serializada contiver referências a objetos de outras classes que estão
marcadas como SerializableAttribute, esses objetos também serão serializados.
Serialização binária
A serialização binária usa a codificação binária para produzir uma serialização compacta
para usos como armazenamento ou fluxos de rede com base em soquete.
Serialização XML
A serialização XML serializa as propriedades e os campos públicos de um objeto, ou os
parâmetros e os valores de retorno de métodos, em um fluxo XML que esteja de acordo
com um documento XSD (linguagem de definição de esquema XML) específico. A
serialização XML resulta em classes fortemente tipadas com propriedades e campos
públicos que são convertidos em XML. O System.Xml.Serialization contém as classes
necessárias para serializar e desserializar XML.
Você pode aplicar atributos a classes e membros de classe para controlar a maneira
como o XmlSerializer serializa ou desserializa uma instância da classe.
Quando você usa a serialização básica, a versão dos objetos pode criar problemas e,
nesse caso, a serialização personalizada pode ser preferível. A serialização básica é a
maneira mais fácil de executar a serialização, mas ela não fornece muito controle sobre
o processo.
Serialização personalizada
Na serialização personalizada, você pode especificar exatamente quais objetos vão ser
serializados e como isso será feito. A classe deve ser marcada como SerializableAttribute
e implementar a interface ISerializable.
Se você quiser que o objeto também seja desserializado de uma maneira personalizada,
você deverá usar um construtor personalizado.
Serialização de designer
A serialização de designer é um formulário especial de serialização que envolve o tipo
de persistência do objeto geralmente associado a ferramentas de desenvolvimento. A
serialização de designer é o processo de conversão de um grafo do objeto em um
arquivo de origem que pode, posteriormente, ser usado para recuperar o grafo do
objeto. Um arquivo de origem pode conter código, marcação ou até mesmo
informações de tabela do SQL.
Demonstra como a serialização pode ser usada para manter dados de um objeto entre
instâncias, permitindo que você armazene e recupere valores na próxima vez que o
objeto for instanciado.
Mostra como ler dados de objeto que foram previamente gravados em um arquivo XML
usando a classe XmlSerializer.
Como gravar dados de objeto em um arquivo XML (Visual Basic)
Mostra como gravar o objeto de uma classe para um arquivo XML usando a classe
XmlSerializer.
Estrutura do programa e convenções de
código (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Nesta seção
Estrutura de um programa Visual Basic
Fornece uma visão geral dos elementos que compõem um programa em Visual Basic.
Discute o procedimento que serve como ponto de partida e controle geral para seu
aplicativo.
Mostra como dividir instruções longas em várias linhas e combinar instruções curtas em
uma linha.
Mostra como recolher e ocultar seções de código no editor de código do Visual Basic.
Mostra como marcar uma linha de código para identificá-la para uso com instruções
como On Error Goto .
Comentários no código
Descreve como usar colchetes ( [] ) para delimitar nomes de variáveis que também são
palavras-chave no Visual Basic.
Seções relacionadas
Convenções tipográficas e de código
Escrevendo código
Descreve recursos que tornam mais fácil para você escrever e gerenciar seu código.
Estrutura de um programa Visual Basic
Artigo • 22/02/2023 • 3 minutos para o fim da leitura
1. Option instruções
2. Imports instruções
Instruções option
Option as instruções estabelecem regras básicas para o código subsequente, ajudando
a evitar erros de sintaxe e lógica. A Instrução Option Explicit garante que todas as
variáveis sejam declaradas e escritas corretamente, o que reduz o tempo de depuração.
A Instrução Option Strict ajuda a minimizar erros lógicos e perda de dados que podem
ocorrer quando você trabalha entre variáveis de diferentes tipos de dados. A Instrução
Option Compare especifica a forma como as cadeias de caracteres são comparadas
entre si, com base em seus Binary valores ou Text valores.
Importa instruções
Você pode incluir uma Instrução Imports (Namespace e Tipo do .NET) para importar
nomes definidos fora do projeto. Uma Imports instrução permite que seu código faça
referência a classes e outros tipos definidos dentro do namespace importado, sem
precisar qualificá-las. Você pode usar tantas instruções Imports quantas forem
necessárias. Para obter mais informações, consulte Referências e a Instrução Imports.
Instruções de namespace
Namespaces ajudam você a organizar e classificar seus elementos de programação para
facilitar o agrupamento e o acesso. Use a Instrução Namespace para classificar as
instruções a seguir em um namespace específico. Para obter mais informações, consulte
Namespaces no Visual Basic.
Instrução Class
Instrução Structure
Instrução Module
Instrução Interface
Instrução Function
Instrução Sub
Instrução Declare
Instrução Operator
Instrução Property
Instrução Event
O procedimento principal
O Main procedimento é o primeiro código a ser executado quando seu aplicativo foi
carregado. Main serve como o ponto de partida e o controle geral para seu aplicativo.
Há quatro variedades de Main :
Sub Main()
A variedade mais comum deste procedimento é Sub Main() . Para obter mais
informações, consulte o Procedimento Principal no Visual Basic.
Confira também
Procedimento principal no Visual Basic
Convenções de nomenclatura do Visual Basic
Limitações do Visual Basic
Procedimento principal no Visual Basic
Artigo • 22/02/2023 • 3 minutos para o fim da leitura
Todo aplicativo do Visual Basic deve conter um procedimento chamado Main . Este
procedimento serve como ponto de partida e controle geral para seu aplicativo. O .NET
Framework chama o procedimento Main quando ele carrega seu aplicativo e está
pronto para passar o controle para ele. A menos que você esteja criando um aplicativo
do Windows Forms, você deve escrever o procedimento Main para aplicativos
executados por conta própria.
Main contém o código que é executado primeiro. Em Main , você pode determinar qual
formulário deve ser carregado primeiro quando o programa for iniciado, descobrir se
uma cópia do aplicativo já está em execução no sistema, estabelecer um conjunto de
variáveis para o seu aplicativo ou abrir um banco de dados que o aplicativo exige.
Os aplicativos de console são executados por conta própria, e você deve fornecer
pelo menos um procedimento Main .
7 Observação
Se você declarar Main em uma classe, deverá usar a palavra-chave Shared . Em um
módulo, Main não precisa ser Shared .
VB
Module mainModule
Sub Main()
End Sub
End Module
Main também pode retornar um valor Integer , que o sistema operacional usa
VB
Module mainModule
Return returnValue
End Function
End Module
Main também pode tomar uma matriz String como um argumento. Cada cadeia
VB
Module mainModule
Next
End If
Return returnValue
End Function
End Module
Você pode declarar Main para examinar os argumentos de linha de comando, mas
não retornar um código de saída, da seguinte maneira.
VB
Module mainModule
Next
End If
End Sub
End Module
Confira também
MsgBox
Length
UBound
Estrutura de um programa Visual Basic
-main
Compartilhado
Instrução Sub
Instrução Function
Tipo de Dados Integer
Tipo de Dados String
Referências e a instrução Imports (Visual
Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Você pode disponibilizar objetos externos para seu projeto escolhendo o comando
Adicionar Referência no menu Projeto. As referências no Visual Basic podem apontar
para assemblies, que são como bibliotecas de tipos, mas contêm mais informações.
A Instrução Imports
Os assemblies incluem um ou mais namespaces. Ao adicionar uma referência a um
assembly, você também pode adicionar uma instrução Imports a um módulo que
controla a visibilidade dos namespaces desse assembly dentro do módulo. A Imports
instrução fornece um contexto de escopo que permite que você use apenas a parte do
namespace necessária para fornecer uma referência exclusiva.
Aliasname refere-se a um nome curto que você pode usar dentro do código para se
O módulo pode conter qualquer número de instruções Imports . Eles devem aparecer
após quaisquer Option instruções, se presentes, mas antes de qualquer outro código.
7 Observação
VB
Imports as instruções sempre devem ser as primeiras linhas que seguem imediatamente
VB
VB
Confira também
ControlChars
Microsoft.VisualBasic
Namespaces no Visual Basic
Assemblies no .NET
Instrução Imports (tipo e namespace .NET)
Namespaces no Visual Basic
Artigo • 22/02/2023 • 6 minutos para o fim da leitura
VB
Por exemplo, se você criar uma nova classe chamada ListBox , poderá usá-la dentro de
seu projeto sem qualificação. No entanto, se você quiser usar a classe .NET Framework
ListBox no mesmo projeto, deverá usar uma referência totalmente qualificada para
tornar a referência exclusiva. Se a referência não for exclusiva, o Visual Basic produzirá
um erro informando que o nome é ambíguo. O exemplo de código a seguir demonstra
como declarar o controle de botão:
VB
Vários assemblies podem usar o mesmo namespace. O Visual Basic os trata como um
único conjunto de nomes. Por exemplo, você pode definir classes para um namespace
chamado SomeNameSpace em um assembly nomeado Assemb1 e definir classes adicionais
para o mesmo namespace de um assembly chamado Assemb2 .
VB
VB
VB
Dim LBC As LBControl
Se você usar a Imports instrução sem um alias, poderá usar todos os nomes nesse
namespace sem qualificação, desde que eles sejam exclusivos para o projeto. Se o
projeto contiver Imports instruções para namespaces que contenham itens com o
mesmo nome, você deverá qualificar totalmente esse nome quando usá-lo. Suponha,
por exemplo, que seu projeto contiver as duas Imports instruções a seguir:
VB
Imports MyProj1
Imports MyProj2
Se você tentar usar Class1 sem qualificá-lo totalmente, o Visual Basic produzirá um erro
informando que o nome Class1 é ambíguo.
VB
Namespace SpecialSpace
Namespace System
Class abc
Dim n As System.Int32
Return n
End Function
End Class
End Namespace
End Namespace
Como resultado, o compilador do Visual Basic não pode resolver com êxito a referência,
System.Int32pois SpecialSpace.System não define Int32 . Você pode usar a Global
palavra-chave para iniciar a cadeia de qualificação no nível mais externo da biblioteca
de classes .NET Framework. Isso permite que você especifique o System namespace ou
qualquer outro namespace na biblioteca de classes. O exemplo a seguir ilustra essa
situação.
VB
Namespace SpecialSpace
Namespace System
Class abc
Return n
End Function
End Class
End Namespace
End Namespace
Você pode usar Global para acessar outros namespaces de nível raiz, como
Microsoft.VisualBasic, e qualquer namespace associado ao seu projeto.
ConsoleApplication1.Magnetosphere .
Namespace Global.Magnetosphere
End Namespace
Namespace Global
Namespace Magnetosphere
End Namespace
End Namespace
Você pode usar a Página do Aplicativo, o Designer de Projeto (Visual Basic) para exibir e
modificar o namespace raiz do projeto. Para novos projetos, o Namespace Raiz usa
como padrão o nome do projeto. Para causar Global o namespace de nível superior,
você pode limpar a entrada do Namespace Raiz para que a caixa esteja vazia. Limpar
namespace raiz remove a necessidade da Global palavra-chave em declarações de
namespace.
VB
Module Module1
Sub Main()
End Sub
End Module
Namespace Global.System.Text
Class TitanEncoding
End Class
End Namespace
Confira também
ListBox
System.Windows.Forms
Assemblies no .NET
Referências e a instrução Imports
Instrução Imports (tipo e namespace .NET)
Escrevendo código em soluções do Office
Convenções de nomenclatura do Visual
Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Inicie cada palavra separada em um nome com uma letra maiúscula, como em
FindLastRecord e RedrawMyForm .
Inicie nomes de interface com o prefixo "I", seguido por um substantivo ou uma
frase nominal, como IComponent , ou com um adjetivo descrevendo o
comportamento da interface, como IPersistable . Não use o sublinhado e use
abreviações com moderação, pois abreviações podem causar confusão.
Confira também
Palavras-chave como nomes de elemento no código
Me, My, MyBase e MyClass
Nomes de elementos declarados
Estrutura do Programa e Convenções de Código
Referência da linguagem Visual Basic
Convenções de codificação do Visual
Basic
Artigo • 07/04/2023 • 6 minutos para o fim da leitura
Seu código terá uma aparência consistente, para que os leitores possam se
concentrar melhor no conteúdo, não no layout.
Você ajuda a garantir que seu código demonstre "práticas recomendadas" para o
Visual Basic.
Convenções de nomenclatura
Para obter informações sobre diretrizes de nomenclatura, consulte o tópico
Diretrizes de Nomenclatura.
Não use "My" ou "my" como parte de um nome de variável. Essa prática cria
confusão com os My objetos.
Convenções de Layout
Insira guias como espaços e use recuos inteligentes com recuos de quatro
espaços.
Gravar apenas uma instrução por linha. Não use o caractere separador de linha do
Visual Basic ( : ).
Evite usar o caractere de continuação de linha explícita " _ " em favor da
continuação de linha implícita onde o idioma permitir.
VB
a As Integer,
b As Integer
Comentando Convenções
Coloque comentários em uma linha separada, ao invés do final de uma linha de
código.
VB
Estrutura do programa
Ao usar o Main método, use o constructo padrão para novos aplicativos de
console e use My para argumentos de linha de comando.
VB
Sub Main()
Next
End Sub
Diretrizes de Linguagem
VB
MsgBox($"hello{vbCrLf}goodbye")
VB
longString.Append(count)
Next
VB
End Sub
Matrizes
Use a sintaxe concisa ao inicializar matrizes na linha da declaração. Por exemplo,
use a sintaxe a seguir.
VB
VB
VB
VB
VB
VB
letters6(0) = "a"
letters6(1) = "b"
letters6(2) = "c"
VB
With orderLog
.Log = "Application"
End With
Nova palavra-chave
Use uma instância curta. Por exemplo, use a seguinte sintaxe:
VB
VB
VB
.Log = "Application",
Tratamento de Evento
Use Handles em vez de AddHandler :
VB
End Sub
VB
Me.MainMenuStrip.Items.Add(closeItem)
VB
' or
ByVal e As SampleEventArgs)
Use literais XML para criar documentos XML e fragmentos em vez de chamar APIs
XML diretamente.
Importe namespaces XML no nível do arquivo ou do projeto para aproveitar as
otimizações de desempenho para literais XML.
Use expressões inseridas para incluir valores e criar XML com base em valores
existentes em vez de usar chamadas à API, como o Add método:
VB
<body>
<%=
Select <tr>
<td style="width:480">
</td>
</tr>
%>
</table>
</body>
</html>
Return htmlDoc.ToString()
End Function
Consultas LINQ
Use nomes significativos para variáveis de consulta:
VB
Forneça nomes para elementos em uma consulta para garantir que os nomes de
propriedades de tipos anônimos sejam maiúsculas corretamente usando o uso de
maiúsculas e minúsculas pascal:
VB
Dim customerOrders = From customer In customers
VB
OrderID = ord.ID
VB
VB
Use as cláusulas Where antes de outras cláusulas de consulta, para garantir que as
cláusulas de consulta posteriores operem no conjunto de dados filtrado:
VB
Order By cust.LastName
Use a Join cláusula para definir explicitamente uma operação de junção em vez
de usar a Where cláusula para definir implicitamente uma operação de junção:
VB
Dim customerList2 = From cust In customers
Confira também
Diretrizes de codificação segura
Compilação condicional no Visual Basic
Artigo • 12/12/2022 • 2 minutos para o fim da leitura
Por exemplo, talvez você queira escrever instruções de depuração que comparem a
velocidade de diferentes abordagens com a mesma tarefa de programação, ou talvez
você queira localizar um aplicativo para vários idiomas. Instruções de compilação
condicional são projetadas para serem executadas durante o tempo de compilação, não
no tempo de execução.
VB
#Else
#End If
7 Observação
No Designer de Projeto
No seu código
– Antes de criar seu arquivo executável, defina as constantes no Designer de Projeto seguindo as
etapas fornecidas no Gerenciando propriedades do projeto e da solução.
– Use o switch -d para inserir constantes de compilação condicional, como no exemplo a seguir:
Não é necessário espaço entre o switch -d e a primeira constante. Para obter mais informações,
confira -define (Visual Basic).
– Coloque as constantes no bloco de declaração do módulo no qual elas são usadas. Isso ajuda a
manter o seu código organizado e mais fácil de ler.
Tópicos Relacionados
Título Descrição
Referência
Diretiva #Const
Diretivas #If...Then...#Else
Ao escrever seu código, você pode criar instruções longas que exigem rolagem
horizontal no Editor de Código. Embora isso não afete a maneira como seu código é
executado, isso dificulta que você ou qualquer outra pessoa leia o código como ele
aparece no monitor. Nesses casos, você deve considerar dividir a única instrução longa
em várias linhas.
7 Observação
VB
cmd.CommandText = _
O uso dessa sequência facilita a leitura do código, tanto online como impresso.
O caractere de continuação de linha deve ser o último caractere em uma linha. Você não
pode segui-lo com mais nada na mesma linha.
Existem algumas limitações sobre onde você pode usar o caractere de continuação de
linha; por exemplo, você não pode usá-lo no meio de um nome de argumento. Você
pode quebrar uma lista de argumentos com o caractere de continuação de linha, mas os
nomes individuais dos argumentos devem permanecer intactos.
Embora colocar cada instrução em uma linha separada seja o método recomendado, o
Visual Basic também permite que você coloque várias instruções na mesma linha.
VB
Confira também
Estrutura do Programa e Convenções de Código
Instruções
Como recolher e ocultar seções do
código (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
VB
Me.Text = "Form1"
End Sub
#End Region
O #Region bloco pode ser usado várias vezes em um arquivo de código; portanto, os
usuários podem definir seus próprios blocos de procedimentos e classes que podem,
por sua vez, ser recolhidos. #Region blocos também podem ser aninhados em outros
#Region blocos.
7 Observação
Os blocos de instrução são compostos por linhas de código delimitadas por dois-
pontos. As linhas de código precedidas por uma cadeia de caracteres de identificação
ou inteiro são rotuladas. Os rótulos de instrução são usados para marcar uma linha de
código para identificá-la para uso com instruções como On Error Goto .
Os rótulos podem ser identificadores válidos do Visual Basic, como aqueles que
identificam elementos de programação, ou literais inteiros. Um rótulo deve aparecer no
início de uma linha de código-fonte e deve ser seguido por dois-pontos,
independentemente de ser seguido por uma instrução na mesma linha.
7 Observação
Por exemplo, as seguintes linhas de código são rotuladas com Jump e 120 ,
respectivamente:
VB
' ...
120: FileClose(1)
Confira também
Instruções
Nomes de elementos declarados
Estrutura do Programa e Convenções de Código
Caracteres especiais no código (Visual
Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Às vezes você precisa usar caracteres especiais em seu código, ou seja, caracteres que
não são alfabéticos ou numéricos. Os sinais de pontuação e os caracteres especiais têm
vários usos no conjunto de caracteres do C, desde a organização do texto do programa
até a definição das tarefas que o compilador ou o programa compilado executam. Eles
não especificam uma operação a ser executada.
Parênteses
Use parênteses quando definir um procedimento, como um Sub ou Function . Você
deve incluir todas as listas de argumentos de procedimento em parênteses. Você
também usa parênteses para colocar variáveis ou argumentos em grupos lógicos,
especialmente para substituir a ordem padrão de precedência do operador em uma
expressão complexa. O exemplo a seguir ilustra essa situação.
VB
Dim a, b, c, d, e As Double
a = 3.2
b = 7.6
c = 2
d = b + c / a
e = (b + c) / a
Separadores
Separadores fazem o que nome sugere: eles separam seções de código. No Visual Basic,
o caractere separador é o dois-pontos ( : ). Use separadores quando quiser incluir várias
instruções em uma única linha em vez de linhas separadas. Isso economiza espaço e
melhora a legibilidade do código. O exemplo a seguir mostra três instruções separadas
por dois-pontos.
VB
a = 3.2 : b = 7.6 : c = 2
Para obter mais informações, consulte Como quebrar e combinar instruções no código.
Concatenação
Use o operador & para concatenação ou vinculação de cadeias de caracteres. Não o
confunda com o operador + , que adiciona valores numéricos. Se você usar o operador
+ para concatenar quando operar em valores numéricos, poderá obter resultados
incorretos. O exemplo a seguir demonstra isso.
VB
var1 = "10.01"
var2 = 11
VB
' Access Text member (property) of Form class (on nextForm object).
nextForm.Close()
VB
Get
End Get
End Property
End Class
"Default property access returns " & hD("X") & vbCrLf &
End Sub
End Class
Todas as três linhas de saída de MsgBox exibem o valor 32856 . A primeira linha usa o
acesso tradicional à propriedade index , a segunda usa o fato de que index é a
propriedade padrão da classe hasDefault , e a terceira usa o acesso de dicionário à
classe.
7 Observação
As referências a coleções padrão devem ser explícitas. Em especial, você não pode
usar o operador ! em uma variável com associação tardia.
O caractere ! também é usado como o caractere de tipo Single .
Confira também
Estrutura do Programa e Convenções de Código
Caracteres de tipo
Comentários no código (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários podem seguir uma instrução na mesma linha ou ocupar uma linha inteira.
Ambos são ilustrados no código a seguir.
VB
Se seu comentário exigir mais de uma linha, use o símbolo de comentário em cada
linha, como o exemplo a seguir mostra.
VB
' it into two lines. Some comments might need three or more lines.
Diretrizes de comentários
A tabela a seguir fornece diretrizes gerais para os tipos de comentários que podem
preceder uma seção de código. São sugestões; o Visual Basic não impõe regras para
adicionar comentários. Escreva o que funciona melhor, tanto para você quanto para
qualquer outra pessoa que leia seu código.
Suposições Lista cada variável externa, controle, arquivo aberto ou outro elemento acessado
pelo procedimento
Efeitos Listas cada variável externa, controle ou arquivo afetado, e o efeito que ele tem
(somente se não for óbvio)
7 Observação
Confira também
Basic Instincts - Documentando seu código com comentários em XML
Como criar documentação XML
Marcações de Comentário XML
Estrutura do Programa e Convenções de Código
Instrução REM
Palavras-chave como nomes de
elemento em código (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Qualquer elemento de programa, como uma variável, classe ou membro, pode ter o
mesmo nome que uma palavra-chave restrita. Por exemplo, você pode recriar uma
variável nomeada Loop . No entanto, para se referir à sua versão dele, que tem o mesmo
nome que a palavra-chave restrita Loop , você deve precedê-la com uma cadeia de
caracteres de qualificação completa ou colocá-la entre colchetes ( [ ] ), como mostra o
exemplo a seguir.
VB
' The following statement precedes Loop with a full qualification string.
sampleForm.Loop.Visible = True
[Loop].Visible = True
Se você não fizer nenhuma delas, o Visual Basic assumirá o uso da palavra-chave
intrínseca Loop e produzirá um erro, como no exemplo a seguir:
Loop.Visible = True
7 Observação
Seu programa também pode incluir nomes de elementos fornecidos por outros
assemblies referenciados. Se esses nomes entrarem em conflito com palavras-
chave restritas, colocar colchetes ao redor deles fará com que o Visual Basic os
interprete como elementos definidos.
Confira também
Convenções de nomenclatura do Visual Basic
Estrutura do Programa e Convenções de Código
Palavras-chave
Me, My, MyBase e MyClass no Visual
Basic
Artigo • 11/04/2023
Eu
A palavra-chave Me fornece uma maneira de se referir à instância específica de uma
classe ou estrutura na qual o código está sendo executado no momento. Me se
comporta como uma variável de objeto ou uma variável de estrutura que se refere à
instância atual. Usar Me é particularmente útil para passar informações sobre a instância
em execução atualmente de uma classe ou estrutura para um procedimento em outra
classe, estrutura ou módulo.
VB
Randomize()
End Sub
Você pode chamar esse procedimento e passar a instância atual da classe Form como
um argumento usando a instrução a seguir.
VB
ChangeFormColor(Me)
Meu
O recurso My oferece acesso rápido e intuitivo a inúmeras classes do .NET Framework,
permitindo que o usuário do Visual Basic interaja com o computador, com o aplicativo,
com as configurações, com os recursos e assim por diante. Para obter uma lista dessas
classes, confira a referência Objetos de Tempo de Execução do Visual Basic.
MyBase
A palavra-chave MyBase se comporta como uma variável de objeto que se refere à
classe base da instância atual de uma classe. MyBase é comumente usado para acessar
membros de classe base que são substituídos ou sombreados em uma classe derivada.
MyBase.New é usado para chamar explicitamente um construtor de classe base de um
MyClass
A palavra-chave MyClass se comporta como uma variável de objeto que se refere à
instância atual de uma classe, conforme implementado originalmente. MyClass é
semelhante a Me , mas todas as chamadas de método nele são tratadas como se o
método fosse NotOverridable .
Confira também
Noções básicas de herança
Limitações do Visual Basic
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Veja a seguir algumas limitações que você pode encontrar em casos extremos:
Confira também
Estrutura do Programa e Convenções de Código
Convenções de nomenclatura do Visual Basic
Funcionalidades da linguagem do Visual
Basic
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Se você for novo em programação, o material desta seção servirá como uma introdução
aos blocos de compilação básicos para escrever código. Depois de compreender os
conceitos básicos, você pode criar aplicativos avançados usando Visual Basic.
Nesta seção
matrizes
Discute como tornar seu código mais eficiente e compacto declarando e usando
matrizes, que contêm vários valores relacionados.
Inicializadores de Coleção
Descreve os inicializadores de coleção, que permitem que você crie e preencha uma
coleção com um conjunto inicial de valores.
Constantes e Enumerações
Fluxo de Controle
Data Types
Representantes
Fornece uma introdução aos delegados e como eles são usados no Visual Basic.
Tipos de Erro
Fornece uma visão geral dos erros de sintaxe, erros de tempo de execução e erros
lógicos.
Eventos
Interfaces
LINQ
Fornece links para tópicos que apresentam recursos e programação de LINQ (consulta
integrada à linguagem).
Objetos e Classes
Fornece uma visão geral dos objetos e classes, como eles são usados, suas relações
entre si e as propriedades, métodos e eventos que expõem.
Operadores e Expressões
Procedimentos
Instruções
Cadeias de caracteres
Fornece links para tópicos que descrevem os conceitos básicos sobre o uso de cadeias
de caracteres no Visual Basic.
Variáveis
XML
Também fornece links para tópicos que descrevem como usar XML no Visual Basic.
Seções relacionadas
Coleções
Descreve alguns dos tipos de coleções fornecidas pelo .NET Framework. Demonstra
como usar coleções simples e coleções de pares chave/valor.
Uma matriz é um conjunto de valores, que são chamados de elementos, que estão
logicamente relacionados entre si. Por exemplo, uma matriz pode consistir no número
de alunos em cada série em uma escola de gramática; cada elemento da matriz é o
número de alunos em uma única série. Da mesma forma, uma matriz pode consistir em
notas de um aluno para uma classe; cada elemento da matriz é uma única nota.
É possível usar variáveis individuais para armazenar cada um de nossos itens de dados.
Por exemplo, se nosso aplicativo analisar as notas dos alunos, podemos usar uma
variável separada para a nota de cada aluno, como englishGrade1 , englishGrade2 etc.
Essa abordagem tem três limitações principais:
Temos que saber exatamente em tempo de design quantas notas temos que lidar.
Lidar com grandes números de notas rapidamente torna-se desordado. Isso, por
sua vez, torna um aplicativo muito mais propenso a ter bugs graves.
É difícil de manter. Cada nova nota que adicionamos requer que o aplicativo seja
modificado, recompilado e reimplantado.
Usando uma matriz, você pode consultar esses valores relacionados com o mesmo
nome e usar um número que é chamado de índice ou subscrito para identificar um
elemento individual baseado na sua posição na matriz. Os índices de uma matriz variam
de 0 a 1 a menos do que o número total de elementos na matriz. Quando você usa a
sintaxe do Visual Basic para definir o tamanho de uma matriz, especifique seu índice
mais alto, não o número total de elementos na matriz. Você pode trabalhar com a
matriz como uma unidade e a capacidade de iterar seus elementos libera você de
precisar saber exatamente quantos elementos ele contém em tempo de design.
VB
' Change the size of an existing array to 16 elements and retain the current
values.
' Redefine the size of an existing array and reset the values.
ReDim numbers(15)
Dim matrix = New Integer(,) {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}, {4, 5, 6}}
O exemplo a seguir contém o código do Visual Basic que cria e usa a matriz:
VB
Module SimpleArray
students(0) = 23
students(1) = 19
students(2) = 21
students(3) = 17
students(4) = 19
students(5) = 20
students(6) = 22
Next
End Sub
End Module
Ele declara uma students matriz com sete elementos. O número 6 na declaração
de matriz indica o último índice na matriz; ele é um menor que o número de
elementos na matriz.
Ele atribui valores a cada elemento na matriz. Os elementos de matriz são
acessados usando o nome da matriz e incluindo o índice do elemento individual
em parênteses.
Ele lista cada valor da matriz. O exemplo usa uma For instrução para acessar cada
elemento da matriz por seu número de índice.
VB
Você pode usar uma cláusula New para fornecer o tamanho de uma matriz quando
ela é criada:
VB
Se tiver uma matriz existente, você poderá redefinir o tamanho usando a instrução
ReDim. Você pode especificar que a instrução ReDim deve manter os valores na matriz
ou você pode especificar que ela crie uma matriz vazia. O exemplo a seguir mostra os
diferentes usos da instrução ReDim para modificar o tamanho de uma matriz existente.
VB
' Assign a new array size and retain the current values.
' Assign a new array size and retain only the first five values.
' Assign a new array size and discard all current element values.
ReDim cargoWeights(15)
VB
Module Example
numbers(ctr) = value
value *= 2
Next
sum += numbers(ctr)
Next
End Sub
End Module
Ao criar uma matriz usando um literal de matriz, você pode fornecer o tipo de matriz ou
usar inferência de tipos para determinar o tipo de matriz. O exemplo abaixo mostra
duas opções.
VB
Quando você usa a inferência de tipos, o tipo da matriz é determinado pelo tipo
dominante na lista de valores que é fornecida para o literal de matriz. O tipo dominante
é um tipo exclusivo ao qual todos os outros tipos no literal da matriz podem ser
ampliados. Se esse tipo exclusivo não puder ser determinado, o tipo dominante será o
tipo exclusivo ao qual todos os outros tipos na matriz poderão restringir. Se nenhum
desses tipos exclusivos puder ser determinado, o tipo dominante será Object . Por
exemplo, se a lista de valores que é fornecida para o literal de matriz contiver os valores
do tipo Integer , Long e Double , a matriz resultante será do tipo Double . Porque
Integer e Long ampliar somente para Double , Double é o tipo dominante. Para obter
7 Observação
Você pode usar a inferência de tipo apenas para matrizes definidas como variáveis
locais em um membro do tipo. Se uma definição de tipo explícito estiver ausente,
as matrizes definidas com literais de matriz no nível da classe serão do tipo
Object[] . Para obter mais informações, confira Inferência de tipo de variável local.
Observe que o exemplo anterior define values como uma matriz de tipo Double ,
embora todos os literais de matriz sejam do tipo Integer . Você pode criar essa matriz
porque os valores no literal da matriz podem ser ampliados para Double valores.
Você pode criar uma matriz multidimensional usando literais de matriz aninhados. Os
literais de matriz aninhados devem ter uma dimensão e o número de dimensões, ou
classificação, consistentes com a matriz resultante. O exemplo de código a seguir cria
uma matriz bidimensional de números inteiros usando um literal de matriz.
VB
Ao usar literais de matriz aninhados para criar e preencher uma matriz, ocorrerá um erro
se o número de elementos nos literais de matriz aninhados não corresponder. Um erro
também ocorrerá se você declarar explicitamente a variável de matriz para ter um
número diferente de dimensões que os literais da matriz.
Assim como você pode para matrizes unidimensionais, você pode confiar na inferência
de tipo ao criar uma matriz multidimensional com literais de matriz aninhada. Quando
você usa a inferência de tipos, o tipo inferido é o tipo dominante para todos os valores
em todos os literais de matriz para um nível de aninhamento. O exemplo de código a
seguir cria uma matriz bidimensional de tipo Double[,] de valores que são do tipo
Integer e Double .
VB
Dim arr = {{1, 2.0}, {3, 4}, {5, 6}, {7, 8}}
Para obter exemplos adicionais, consulte Como inicializar uma variável de matriz no
Visual Basic.
O exemplo a seguir itera por meio de uma matriz unidimensional usando a instrução
For...Next.
VB
Module IterateArray
Console.WriteLine(numbers(index))
Next
End Sub
End Module
' 10
' 20
' 30
O exemplo a seguir itera por meio de uma matriz multidimensional usando uma
instrução For...Next. O método GetUpperBound tem um parâmetro que especifica a
dimensão. GetUpperBound(0) retorna o índice mais alto para a primeira dimensão, e
GetUpperBound(1) retorna o índice mais alto para a segunda dimensão.
VB
Module IterateArray
Next
Console.WriteLine()
Next
End Sub
End Module
' Output
' 1 2
' 3 4
' 5 6
O exemplo a seguir usa um For Each... Próxima Instruçãopara iterar por meio de uma
matriz unidimensional e uma matriz bidimensional.
VB
Module IterateWithForEach
Console.WriteLine(number)
Next
Console.WriteLine()
Console.WriteLine(number)
Next
End Sub
End Module
' 10
' 20
' 30
'
' 1
' 2
' 3
' 4
' 5
' 6
Tamanho da matriz
O tamanho de uma matriz é o produto dos comprimentos de todas as suas dimensões.
Ele representa o número total de elementos contidos no momento na matriz. Por
exemplo, o exemplo a seguir declara uma matriz bidimensional com quatro elementos
em cada dimensão. Como mostra a saída do exemplo, o tamanho da matriz é 16 (ou (3
+ 1) * (3 + 1).
VB
Module Example
Console.WriteLine(arr.Length)
End Sub
End Module
' 16
7 Observação
Essa discussão sobre o tamanho da matriz não se aplica a matrizes irregulares. Para
obter informações sobre matrizes irregulares e determinar o tamanho de uma
matriz irregular, consulte a seção matrizes denteadas.
Você pode redimensionar uma variável de matriz atribuindo um novo objeto de matriz a
ela ou usando a ReDiminstrução. O exemplo a seguir usa a ReDim instrução para alterar
uma matriz de 100 elementos para uma matriz de 51 elementos.
VB
Module Example
Console.WriteLine(arr.Length)
Redim arr(50)
Console.WriteLine(arr.Length)
End Sub
End Module
' 100
' 51
Há várias coisas para ter em mente ao lidar com o tamanho de uma matriz.
Observações
Tamanho da O índice de cada dimensão é baseado em 0, o que significa que ele varia de 0
dimensão até o limite superior. Portanto, o tamanho de uma determinada dimensão é
maior em 1 dígito que o limite superior declarado para a dimensão.
Limites de O tamanho de cada dimensão de uma matriz é limitado ao valor máximo do tipo
comprimento de dados Integer , que é Int32.MaxValue ou (2 ^ 31) – 1. No entanto, o tamanho
total de uma matriz também é limitado pela memória disponível no sistema. Se
você tentar inicializar uma matriz que excede a quantidade de RAM disponível, o
Common Language Runtime lançará uma exceção OutOfMemoryException.
Consumo de Não é seguro fazer suposições sobre como uma matriz é armazenada na
memória memória. O armazenamento varia em plataformas de larguras de dados
diferentes, então a mesma matriz pode consumir mais memória em um sistema
de 64 bits que em um sistema de 32 bits. Dependendo da configuração do
sistema ao inicializar uma matriz, o CLR (Common Language Runtime) pode
atribuir armazenamento para elementos do pacote o mais próximo possível, ou
alinhá-los em limites naturais de hardware. Além disso, uma matriz de
armazenamento requer sobrecarga de armazenamento para suas informações
de controle, e essa sobrecarga aumenta com cada nova dimensão.
O tipo de matriz
Cada matriz tem um tipo de dados, que difere do tipo de dados de seus elementos. Não
há nenhum tipo de dados único para todas as matrizes. Em vez disso, o tipo de dados
de uma matriz é determinado pelo número de dimensões, ou classificação, da matriz e o
tipo de dados dos elementos na matriz. Duas variáveis de matriz são consideradas
tendo os mesmos dados somente quando elas têm a mesma classificação e quando
seus elementos têm os mesmo tipo de dados. Os comprimentos das dimensões de uma
matriz não influenciam o tipo de dados de matriz.
Cada matriz herda da classe System.Array e você pode declarar uma variável para ser do
tipo Array , mas não pode criar uma matriz do tipo Array . Por exemplo, embora o
código a seguir declare que a arr variável é do tipo Array e chama o
Array.CreateInstance método para instanciar a matriz, o tipo da matriz se mostra
Objeto[].
VB
Module Example
Console.WriteLine(arr.Length)
Console.WriteLine(arr.GetType().Name)
End Sub
End Module
' 19
' Object[]
Além disso, a instrução ReDim não pode operar em uma variável declarada como tipo
Array . Por esses motivos, e para a segurança de tipo, é aconselhável declarar cada
matriz como um tipo específico.
Você pode descobrir o tipo de dados de uma matriz ou seus elementos de várias
maneiras.
Você pode chamar o método GetType na variável para receber um objeto Type
para o tipo de tempo de execução da variável. O objeto Type mantém informações
abrangentes em suas propriedades e métodos.
Você pode passar a variável para o a função TypeName para receber um String
que contém o nome do tipo de tempo de execução.
VB
Module Example
Console.WriteLine()
End Sub
End Module
'
VB
Module ReturnValuesAndParams
ShowNumbers(numbers)
End Sub
Return numbers
End Function
Console.WriteLine($"{numbers(index)} ")
Next
End Sub
End Module
' 10
' 20
' 30
VB
Module Example
ShowNumbersMultidim(numbers)
End Sub
Return numbers
End Function
Next
Console.WriteLine()
Next
End Sub
End Module
' 1 2
' 3 4
' 5 6
Matrizes denteadas
Às vezes, a estrutura de dados em seu aplicativo é bidimensional, mas não retangular.
Por exemplo, você pode usar uma matriz para armazenar dados sobre a alta
temperatura de cada dia do mês. A primeira dimensão da matriz representa o mês, mas
a segunda dimensão representa o número de dias e o número de dias em um mês não
é uniforme. Uma matriz irregular, que também é chamada de matrizes, foi projetada
para esses cenários. Uma matriz denteada é uma matriz cujos elementos são matrizes.
Uma matriz denteada e cada elemento em uma matriz denteada podem ter uma ou
mais dimensões.
O exemplo a seguir tem uma matriz de meses, cada elemento é uma matriz de dias. O
exemplo usa uma matriz irregular porque meses diferentes têm números diferentes de
dias. O exemplo mostra como criar uma matriz irregular, atribuir valores a ela e
recuperar e exibir seus valores.
VB
Imports System.Globalization
Module JaggedArray
' Set each element of the sales array to a Double array of the
appropriate size.
DateTime.DaysInMonth(Year(Now), month + 1)
Next
Next
Next
Console.Write(" ")
Next
Console.WriteLine()
For dayInMonth = 0 To 30
Console.Write(" ")
Else
Console.Write($"{sales(monthNumber)(dayInMonth),-5} ")
End If
Next
Console.WriteLine()
Next
End Sub
End Module
' Jan Feb Mar Apr May Jun Jul Aug Sep Oct
Nov Dec
' 1. 0 100 200 300 400 500 600 700 800 900
1000 1100
' 2. 1 101 201 301 401 501 601 701 801 901
1001 1101
' 3. 2 102 202 302 402 502 602 702 802 902
1002 1102
' 4. 3 103 203 303 403 503 603 703 803 903
1003 1103
' 5. 4 104 204 304 404 504 604 704 804 904
1004 1104
' 6. 5 105 205 305 405 505 605 705 805 905
1005 1105
' 7. 6 106 206 306 406 506 606 706 806 906
1006 1106
' 8. 7 107 207 307 407 507 607 707 807 907
1007 1107
' 9. 8 108 208 308 408 508 608 708 808 908
1008 1108
' 10. 9 109 209 309 409 509 609 709 809 909
1009 1109
' 11. 10 110 210 310 410 510 610 710 810 910
1010 1110
' 12. 11 111 211 311 411 511 611 711 811 911
1011 1111
' 13. 12 112 212 312 412 512 612 712 812 912
1012 1112
' 14. 13 113 213 313 413 513 613 713 813 913
1013 1113
' 15. 14 114 214 314 414 514 614 714 814 914
1014 1114
' 16. 15 115 215 315 415 515 615 715 815 915
1015 1115
' 17. 16 116 216 316 416 516 616 716 816 916
1016 1116
' 18. 17 117 217 317 417 517 617 717 817 917
1017 1117
' 19. 18 118 218 318 418 518 618 718 818 918
1018 1118
' 20. 19 119 219 319 419 519 619 719 819 919
1019 1119
' 21. 20 120 220 320 420 520 620 720 820 920
1020 1120
' 22. 21 121 221 321 421 521 621 721 821 921
1021 1121
' 23. 22 122 222 322 422 522 622 722 822 922
1022 1122
' 24. 23 123 223 323 423 523 623 723 823 923
1023 1123
' 25. 24 124 224 324 424 524 624 724 824 924
1024 1124
' 26. 25 125 225 325 425 525 625 725 825 925
1025 1125
' 27. 26 126 226 326 426 526 626 726 826 926
1026 1126
' 28. 27 127 227 327 427 527 627 727 827 927
1027 1127
' 29. 28 228 328 428 528 628 728 828 928
1028 1128
' 30. 29 229 329 429 529 629 729 829 929
1029 1129
O exemplo anterior atribui valores à matriz irregular em uma base elemento por
elemento usando um For...Next loop. Você também pode atribuir valores aos
elementos de uma matriz irregular usando literais de matriz aninhada. No entanto, a
tentativa de usar literais de matriz aninhada (por exemplo, Dim valuesjagged = {{1, 2},
{2, 3, 4}} ) gera o erro do compilador BC30568. Para corrigir o erro, coloque entre
VB
Module Example
Dim values1d = { 1, 2, 3 }
End Sub
End Module
Uma matriz denteada é uma matriz unidimensional cujos elementos contém matrizes.
Portanto, a Array.Length propriedade e o Array.GetLength(0) método retornam o
número de elementos na matriz unidimensional e Array.GetLength(1) gera um
IndexOutOfRangeException porque uma matriz irregular não é multidimensional. Você
determina o número de elementos em cada subarray recuperando o valor da
propriedade de Array.Length cada subarray. O exemplo a seguir ilustra como determinar
o número de elementos em uma matriz irregular.
VB
Module Example
Dim jagged = { ({1, 2}), ({2, 3, 4}), ({5, 6}), ({7, 8, 9, 10}) }
total += jagged(ctr).Length
Next
End Sub
End Module
tem elementos). Uma matriz não inicializada é aquela que não foi dimensionada ou teve
valores atribuídos a ela. Por exemplo:
VB
Uma matriz de comprimento zero é declarada com uma dimensão de -1. Por exemplo:
VB
Talvez seja necessário criar uma matriz de tamanho igual a zero nas seguintes
circunstâncias:
Sem arriscar uma exceção NullReferenceException, seu código precisa acessar
membros da classe Array, como Length ou Rank, ou chamar uma função do Visual
Basic como UBound.
Você deseja manter o código de consumo mais simples por não ter que procurar
Nothing como um caso especial.
Seu código interage com uma API (interface de programação do aplicativo) que
exige que você passe uma matriz de tamanho igual a zero para um ou mais
procedimentos ou retorna uma matriz de tamanho igual a zero de um ou mais
procedimentos.
7 Observação
Esta seção não discute a divisão de uma única cadeia de caracteres em uma matriz
de cadeias de caracteres com base em algum delimitador. Para obter informações
sobre como dividir uma cadeia de caracteres, consulte o String.Split método.
O número de elementos na matriz. Por exemplo, talvez você queira dividir uma
matriz de mais do que um número especificado de elementos em um número de
partes aproximadamente iguais. Para essa finalidade, você pode usar o valor
retornado pelo método ou Array.Length pelo Array.GetLength método.
O valor de um elemento, que serve como um delimitador que indica onde a matriz
deve ser dividida. Você pode pesquisar um valor específico chamando os métodos
e Array.FindIndex os Array.FindLastIndex métodos.
Depois de determinar o índice ou os índices nos quais a matriz deve ser dividida, você
poderá criar as matrizes individuais chamando o Array.Copy método.
Module Example
arr(ctr) = rnd.Next()
Next
Dim divisor = 2
End Sub
End Module
O exemplo a seguir divide uma matriz de cadeias de caracteres em duas matrizes com
base na presença de um elemento cujo valor é "zzz", que serve como delimitador de
matriz. As novas matrizes não incluem o elemento que contém o delimitador.
VB
Module Example
Next
' Get a random number that will represent the point to insert the
delimiter.
End Sub
End Module
7 Observação
Esta seção não discute a junção de uma matriz de cadeias de caracteres em uma
única cadeia de caracteres. Para obter informações sobre como ingressar em uma
matriz de cadeias de caracteres, consulte o String.Join método.
Antes de copiar os elementos de cada matriz para a nova matriz, primeiro você deve
garantir que você tenha inicializado a matriz para que ela seja grande o suficiente para
acomodar a nova matriz. É possível fazer isso de duas formas:
O exemplo a seguir usa a segunda abordagem para adicionar quatro matrizes com dez
elementos cada uma a uma única matriz.
VB
Imports System.Collections.Generic
Imports System.Threading.Tasks
Module Example
For ctr = 0 To 3
tasks.Add(Task.Run(Function()
arr(ndx) = value
Next
Return arr
End Function))
Next
Task.WaitAll(tasks.ToArray())
Dim elements = 0
For Each task In tasks
elements += task.Result.Length
Next
Dim index = 0
Dim n = task.Result.Length
index += n
Next
End Sub
End Module
Como nesse caso as matrizes de origem são todas pequenas, também podemos
expandir dinamicamente a matriz à medida que adicionamos os elementos de cada
nova matriz a ela. O exemplo a seguir faz isso.
VB
Imports System.Collections.Generic
Imports System.Threading.Tasks
Module Example
For ctr = 0 To 3
tasks.Add(Task.Run(Function()
arr(ndx) = value
Next
Return arr
End Function))
Next
Task.WaitAll(tasks.ToArray())
' Dimension the target array and copy each element of each source
array to it.
Dim index = 0
Dim n = Task.Result.Length
index += n
Next
End Sub
End Module
Quando você usa ReDim para redimensionar uma matriz, o Visual Basic cria uma nova
matriz e libera a anterior. Isso leva o tempo da execução. Portanto, se o número de itens
com o qual você está trabalhando for alterado com frequência ou se você não puder
prever o número máximo de itens que precisa, você poderá obter melhor desempenho
usando uma coleção.
Para algumas coleções, você pode atribuir uma chave para qualquer objeto que coloque
na coleção para que você possa recuperar rapidamente o objeto usando a chave.
Se a coleção contiver elementos de apenas um tipo de dados, você poderá usar uma
das classes no namespace System.Collections.Generic. Uma coleção genérica impõe
segurança de tipos para que nenhum outro tipo de dados possa ser adicionado a ela.
Tópicos relacionados
Termo Definição
Como inicializar uma variável de Descreve como preencher matrizes com valores iniciais.
matriz no Visual Basic
Como classificar uma matriz no Visual Mostra como classificar os elementos de uma matriz em
Basic ordem alfabética.
Como atribuir uma matriz a outra Descreve as regras e as etapas para atribuir uma matriz a
matriz outra variável de matriz.
Confira também
System.Array
Instrução Dim
Instrução ReDim
Inicializadores de coleção (Visual Basic)
Artigo • 07/04/2023 • 5 minutos para o fim da leitura
Os inicializadores de coleção fornecem uma sintaxe abreviada que permite criar uma
coleção e preenchê-la com um conjunto inicial de valores. Os inicializadores de coleção
são úteis quando você está criando uma coleção de um conjunto de valores conhecidos,
por exemplo, uma lista de opções de menu ou de categorias, um conjunto inicial de
valores numéricos, uma lista estática de cadeias de caracteres, como nomes de mês ou
de dias, ou localizações geográficas, como uma lista de estados usada para validação.
VB
{2, "Products"},
{3, "News"},
7 Observação
Syntax
Um inicializador de coleção consiste em uma lista de valores separados por vírgula
colocados entre chaves ( {} ), precedidos pela palavra-chave From , conforme mostrado
no código a seguir.
VB
Ao criar uma coleção, como uma List<T> ou uma Dictionary<TKey,TValue>, você deverá
fornecer o tipo de coleção antes do inicializador de coleção, conforme mostrado no
código a seguir.
VB
End Class
7 Observação
Um método Add que possa ser correspondido deve existir, com base nas regras de
resolução de sobrecarga, para os tipos fornecidos no inicializador de coleção.
Por exemplo, o exemplo de código a seguir mostra como criar uma coleção List(Of
Customer) usando um inicializador de coleção. Quando o código for executado, todo
VB
VB
Ao criar uma coleção usando valores aninhados, todo elemento da lista de valores
aninhados é passado como um argumento ao método Add correspondente aos tipos de
elemento. Por exemplo, o exemplo de código a seguir cria um Dictionary<TKey,TValue>
em que as chaves são do tipo Integer e os valores, do tipo String . Cada uma das listas
de valores aninhados corresponde ao método Add do Dictionary .
VB
VB
days.Add(0, "Sunday")
days.Add(1, "Monday")
Tópicos Relacionados
Título Descrição
Como criar um método para Mostra como criar um método de extensão chamado Add ,
adicionar extensão usado por um que pode ser usado para preencher uma coleção com valores
inicializador de coleção de um inicializador de coleção.
Como criar uma coleção usada Mostra como habilitar o uso de um inicializador de coleção,
por um inicializador de coleção incluindo um método Add em uma classe de coleção que
implementa IEnumerable .
Confira também
Coleções
matrizes
Inicializadores de objeto: tipos nomeados e anônimos
Novo Operador
Propriedades autoimplementadas
Como inicializar uma variável de matriz no Visual Basic
Inferência de Tipo de Variável Local
Tipos anônimos
Introdução a LINQ no Visual Basic
Como: criar uma lista de itens
Constantes e enumerações no Visual
Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Constantes são uma maneira de usar nomes significativos no lugar de um valor que não
é alterado. Constantes armazenam valores que, como o nome implica, permanecem
constantes durante a execução de um aplicativo. Você pode usar constantes para
fornecer nomes significativos, em vez de números, tornando o código mais legível.
Nesta seção
Termo Definição
Visão geral de constantes Os tópicos nesta seção descrevem as constantes e seus usos.
Visão geral de enumerações Os tópicos nesta seção descrevem as enumerações e seus usos.
Seções relacionadas
Termo Definição
Instrução Descreve a instrução Option Explicit , que é usada no nível de módulo para forçar a
Option declaração explícita de todas as variáveis nesse módulo.
Explicit
Instrução Descreve a instrução Option Infer , que permite o uso de inferência de tipo de
Option variável local ao declarar variáveis.
Infer
Termo Definição
Instrução Descreve a instrução Option Strict , que restringe conversões de tipo de dados
Option implícitas para somente conversões de expansão, não permite associação tardia e não
Strict permite digitação implícita que resulta em um tipo Object .
Fluxo de controle no Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Se deixado sem regulagem, um programa passa por suas instruções do início ao fim.
Alguns programas muito simples podem ser escritos com apenas esse fluxo
unidirecional. No entanto, muito da eficiência e da utilidade de qualquer linguagem de
programação é derivada da capacidade de alterar a ordem de execução com instruções
de controle e loops.
Nesta seção
Estruturas de Decisão
Estruturas de Loop
Seções relacionadas
Resumo do Fluxo de Controle
procedimento
Sub addSale(ByVal amount As Double)
do
procedimento Function convert(ByVal b As Byte) As String
Para obter uma lista dos tipos de dados do Visual Basic, consulte Tipos de dados.
Confira também
Caracteres de tipo
Tipos de dados elementares
Tipos de dados compostos
Tipos genéricos no Visual Basic
Tipos de Valor e Tipos de Referência
Conversões de tipo no Visual Basic
Estruturas
Tuplas
Solução de problemas de tipos de dados
Data Types
Uso eficiente de tipos de dados
Caracteres de tipo (Visual Basic)
Artigo • 07/04/2023 • 4 minutos para o fim da leitura
O caractere de tipo não faz parte do nome do elemento. Um elemento definido com um
caractere de tipo pode ser referenciado sem o caractere de tipo.
% Integer Dim L%
! Single Dim Q!
# Double Dim X#
Não existem caracteres de tipo de identificador para os tipos de dados Boolean , Byte ,
Char , Date , Object , SByte , Short , UInteger , ULong ou UShort para tipos de dados
compostos, como matrizes ou estruturas.
Em alguns casos, você pode acrescentar o $ caractere a uma função do Visual Basic, por
exemplo Left$ , em vez de Left , para obter um valor retornado do tipo String .
S Short I = 347S
I Integer J = 347I
L Long K = 347L
D Decimal X = 347D
F Single Y = 347F
R Double Z = 347R
US UShort L = 347US
Caractere de tipo literal Tipo de dados Exemplo
UI UInteger M = 347UI
UL ULong N = 347UL
C Char Q = "."C
Não existem caracteres de tipo literal para os tipos de dados Boolean , Byte , Date ,
Object , SByte ou String para qualquer tipo de dados composto, como matrizes ou
estruturas.
Em todos os casos, o caractere de tipo literal deve seguir imediatamente o valor literal.
A partir do Visual Basic 2017, você pode usar o caractere sublinhado ( _ ) como
separador de grupo para aprimorar a legibilidade de um literal integral. O exemplo a
seguir usa o _ caractere para agrupar um literal binário em grupos de 8 bits:
VB
Você pode seguir um literal prefixado com um caractere de tipo literal. O exemplo a
seguir mostra a isso.
VB
No exemplo anterior, counter tem o valor decimal de -32768 e flags tem o valor
decimais de +32768.
A partir do Visual Basic 15.5, você também pode usar o caractere de sublinhado ( _ )
como separador à esquerda entre o prefixo e os dígitos hexadecimais, binários ou
octais. Por exemplo:
VB
Para usar o caractere de sublinhado como separador à esquerda, você deve adicionar o
seguinte elemento ao arquivo de projeto do Visual Basic (*.vbproj):
XML
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obter mais informações, consulte Selecionar a versão da linguagem Visual Basic.
Confira também
Data Types
Tipos de dados elementares
Tipos de Valor e Tipos de Referência
Conversões de tipo no Visual Basic
Solução de problemas de tipos de dados
Declaração de Variável
Data Types
Tipos de dados elementares (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O Visual Basic fornece um conjunto de tipos de dados predefinidos, que você pode usar
para muitos dos seus elementos de programação. Esta seção descreve esses tipos e
como usá-los.
7 Observação
Todos os tipos de dados elementares no Visual Basic têm suporte por uma
estrutura ou classe que está no namespace System. O compilador usa cada
palavra-chave de tipo de dados como alias para a estrutura ou classe subjacente.
Por exemplo, declarar uma variável usando a palavra reservada Byte é o mesmo
que declará-la usando o nome de estrutura totalmente qualificado System.Byte.
Nesta seção
Tipos de Dados Numéricos
Seções relacionadas
Data Types
Data Types
Fornece uma visão geral dos tipos de dados elementares fornecidos pelo Visual Basic.
Tipos de dados numéricos (Visual Basic)
Artigo • 07/04/2023 • 4 minutos para o fim da leitura
O Visual Basic fornece vários tipos de dados numéricos para lidar com números em várias
representações. Os tipos integrais representam apenas números inteiros (positivo,
negativo e zero) e os tipos não integrais representam números com partes de inteiros e
fracionárias.
Para obter uma tabela mostrando uma comparação lado a lado dos tipos de dados do
Visual Basic, consulte Tipos de Dados.
Os tipos de dados integrais assinados são Tipo de Dados SByte (8 bits), Tipo de Dados
Curtos (16 bits), Tipo de Dados Inteiros (32 bits) e Tipo de Dados Longos (64 bits). Se
uma variável sempre armazenar inteiros em vez de números fracionários, declare-a
como um desses tipos.
Os tipos integrais não assinados são Tipo de Dados de Byte (8 bits), Tipo de Dados
UShort (16 bits), Tipo de Dados UInteger (32 bits) e Tipo de Dados ULong (64 bits). Se
uma variável contiver dados binários ou dados de natureza desconhecida, declare-os
como um desses tipos.
Desempenho
As operações aritméticas são mais rápidas com tipos de dados integrais do que com
outros tipos de dados. Elas são mais rápidas com os tipos e Integer no UInteger Visual
Basic.
Inteiros Grandes
Se você precisar manter um inteiro maior do que o tipo de dados Integer pode conter,
você poderá usar o tipo de dados Long . As variáveis Long podem conter números de
-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. As operações com Long são
ligeiramente mais lentas do que as com Integer .
Se você precisar de valores ainda maiores, poderá usar o Tipo de Dados Decimais. Você
pode conter números de -79.228.162.514.264.337.593.543.950.335 a
79,228.162.514.264.337.593.543.950.335 em uma variável Decimal se você não usar
casas decimais. No entanto, as operações com números Decimal são consideravelmente
mais lentas do que com qualquer outro tipo de dados numérico.
Inteiros Pequenos
Se você não precisar do intervalo completo do tipo de dados Integer , poderá usar o
tipo de dados Short , que pode conter inteiros de -32.768 a 32.767. Para o menor
intervalo inteiro, o tipo de dados SByte contém inteiros de -128 a 127. Se você tiver um
número muito grande de variáveis que contêm números inteiros pequenos, o Common
Language Runtime às vezes pode armazenar suas variáveis Short e SByte de maneira
mais eficiente e economizar o consumo de memória. No entanto, as operações com
Short e SByte são um pouco mais lentas do que as com Integer .
Os tipos de dados numéricos não integrais são Decimal (ponto fixo de 128 bits), Tipo de
Dados Únicos (ponto flutuante de 32 bits) e Tipo de Dados Duplos (ponto flutuante de
64 bits). Todos eles são tipos assinados. Se uma variável puder conter uma fração,
declare-a como um desses tipos.
Decimal não é um tipo de dados de ponto flutuante. Decimal os números têm um valor
inteiro binário e um fator de dimensionamento inteiro que especifica qual parte do valor
é uma fração decimal.
Você pode usar variáveis Decimal para valores de dinheiro. A vantagem é a precisão dos
valores. O tipo de dados Double é mais rápido e requer menos memória, mas está
sujeito a erros de arredondamento. O tipo de dados Decimal retém a precisão completa
para 28 casas decimais.
Os valores de número não integrais podem ser expressos como mmmEeee, no qual
mmm é a mantissa (os dígitos significativos) e eee é o expoente (uma potência de 10).
Os valores positivos mais altos dos tipos não integrais são
7,922816251426437593543950335E+28 para Decimal , 3,4028235E+38 para Single e
1,79769313486231570E+308 para Double .
Desempenho
Double é o mais eficiente dos tipos de dados fracionários, pois os processadores nas
plataformas atuais executam operações de ponto flutuante com precisão dupla. No
entanto, as operações com Double não são tão rápidas quanto com os tipos integrais,
como Integer .
Pequenas Magnitudes
Para números com a menor magnitude possível (mais próxima de 0), as variáveis Double
podem conter números tão pequenos quanto -4,94065645841246544E-324 para valores
negativos e 4,94065645841246544E-324 para valores positivos.
O Visual Basic fornece tipos de dados de caracteres para lidar com caracteres imprimíveis
e exibíveis. Embora ambos lidem com caracteres Unicode, Char contém um único
caractere, enquanto String contém um número indefinido de caracteres.
Para obter uma tabela que mostre uma comparação lado a lado dos tipos de dados do
Visual Basic, consulte Tipos de Dados.
Tipo Char
O tipo de dados Char é um único caractere Unicode de dois bytes (16 bits). Se uma
variável sempre armazenar exatamente um caractere, declare-a como Char . Por
exemplo:
VB
Cada valor possível em uma variável Char ou String é um ponto de código ou código
de caractere no conjunto de caracteres Unicode. Os caracteres Unicode incluem o
conjunto de caracteres ASCII básico, várias outras letras alfabéticas, acentos, símbolos
de moeda, frações, diacríticos e símbolos matemáticos e técnicos.
7 Observação
VB
Confira também
Tipos de dados elementares
Tipos de dados compostos
Tipos genéricos no Visual Basic
Tipos de Valor e Tipos de Referência
Conversões de tipo no Visual Basic
Solução de problemas de tipos de dados
Caracteres de tipo
Tipos de dados diversos (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O Visual Basic fornece vários tipos de dados que não são orientados para números ou
caracteres. Em vez disso, eles lidam com dados especializados, como valores sim/não,
valores de data/hora e endereços de objeto.
Para obter uma tabela mostrando uma comparação lado a lado dos tipos de dados do
Visual Basic, consulte Tipos de Dados.
Tipos boolianos
O tipo de dados booliano é um valor sem sinal que é interpretado como ou True False .
Sua largura de dados depende da plataforma de implementação. Se uma variável puder
conter apenas valores de dois estados, como true/false, yes/no ou on/off, declare-a
como Boolean .
Tipo de data
O Tipo de Dados de Data é um valor de 64 bits que contém informações de data e hora.
Cada incremento representa 100 nanossegundos de tempo decorrido desde o início
(12h00) de 1º de janeiro do ano 1 no calendário gregoriano. Se uma variável puder
conter um valor de data, um valor de hora ou ambos, declare-o como Date .
Tipo de objeto
O Tipo de Dados de Objeto é um endereço de 32 bits que aponta para uma instância de
objeto em seu aplicativo ou em algum outro aplicativo. Uma Object variável pode se
referir a qualquer objeto que seu aplicativo reconheça ou a dados de qualquer tipo de
dados. Isso inclui tipos de valor, como Integer Boolean instâncias de estrutura, e tipos de
referência, que são instâncias de objetos criados a partir de classes como String e
Form, e instâncias de matriz.
Se uma variável armazenar um ponteiro para uma instância de uma classe que você não
conhece no momento da compilação ou se ela puder apontar para dados de vários
tipos de dados, declare-a como Object .
A vantagem do Object tipo de dados é que você pode usá-lo para armazenar dados de
qualquer tipo de dados. A desvantagem é que você incorre em operações extras que
levam mais tempo de execução e fazem com que seu aplicativo tenha um desempenho
mais lento. Se você usar uma Object variável para tipos de valor, incorrerá em boxe e
unboxing. Se você usá-lo para tipos de referência, incorrerá em associação tardia.
Confira também
Caracteres de tipo
Tipos de dados elementares
Tipos de Dados Numéricos
Tipos de Dados de Caractere
Solução de problemas de tipos de dados
Associação Antecipada e Tardia
Tipos de dados compostos (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Além dos tipos de dados elementares fornecidos pelo Visual Basic, você também pode
montar itens de diferentes tipos para criar tipos de dados compostos, como estruturas,
matrizes e classes. Você pode criar tipos de dados compostos de tipos elementares e de
outros tipos compostos. Por exemplo, você pode definir uma matriz de elementos de
estrutura ou uma estrutura com membros da matriz.
Tipos de dados
Um tipo composto é diferente do tipo de dados de qualquer um de seus componentes.
Por exemplo, uma matriz de Integer elementos não é do Integer tipo de dados.
Tipos de estrutura
Não existe um único tipo de dados que abrange todas as estruturas. Em vez disso, cada
definição de uma estrutura representa um tipo de dados exclusivo, mesmo que duas
estruturas definam elementos idênticos na mesma ordem. No entanto, se você criar
duas ou mais instâncias da mesma estrutura, o Visual Basic as considerará do mesmo
tipo de dados.
Tuplas
Uma tupla é uma estrutura leve que contém dois ou mais campos cujos tipos são
predefinidos. Há suporte para tuplas a partir do Visual Basic 2017. As tuplas são mais
comumente usadas para retornar vários valores de uma única chamada de método sem
precisar passar argumentos por referência ou empacotar os campos retornados em uma
classe ou estrutura mais pesada. Consulte o tópico Tuplas para obter mais informações
sobre tuplas.
Tipos de matriz
Não há nenhum tipo de dados único para todas as matrizes. O tipo de dados de uma
instância específica de uma matriz é determinado pelo seguinte:
VB
Tipos de classe
Não existe um único tipo de dados que abrange todas as classes. Embora uma classe
possa herdar de outra classe, cada uma é um tipo de dados separado. Várias instâncias
da mesma classe são do mesmo tipo de dados. Se você atribuir uma variável de
instância de classe a outra, não só elas têm o mesmo tipo de dados, como apontam
para a mesma instância de classe na memória.
Confira também
Data Types
Tipos de dados elementares
Tipos genéricos no Visual Basic
Tipos de Valor e Tipos de Referência
Conversões de tipo no Visual Basic
Estruturas
Solução de problemas de tipos de dados
Como: Manter mais de um valor em uma variável
Como manter mais de um valor em uma
variável (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma variável contém mais de um valor se você declarar que é de um tipo de dados
composto.
2. Se o tipo de dados composto ainda não estiver definido, defina-o para que sua
variável possa usá-lo.
Confira também
Data Types
Caracteres de tipo
Tipos de dados compostos
Estruturas
matrizes
Objetos e Classes
Tipos de Valor e Tipos de Referência
Tipos genéricos no Visual Basic (Visual
Basic)
Artigo • 22/02/2023 • 7 minutos para o fim da leitura
Quando você define um tipo genérico, ele é parametrizado com um ou mais tipos de
dados. Isso permite que o código de uso adapte os tipos de dados aos seus requisitos.
Seu código pode declarar vários elementos de programação diferentes do elemento
genérico, cada um atuando em um conjunto de tipos de dados diferente. Mas todos os
elementos declarados executam uma lógica idêntica, independentemente dos tipos de
dados sendo usados.
Por exemplo, talvez você queira criar e usar uma classe de fila que opere em um tipo de
dados específico, como String . Você pode declarar essa classe de
System.Collections.Generic.Queue<T>, como mostra o exemplo a seguir.
VB
Agora você pode usar stringQ para trabalhar exclusivamente com os valores String .
Como stringQ é específico para String , em vez de ser generalizado para valores
Object , você não tem uma conversão de tipo ou associação tardia. Isso economiza
Para obter mais informações sobre como usar um tipo genérico, consulte Como usar
uma classe genérica.
VB
Dim tempItem As t
End Sub
End Class
VB
As instruções acima declaram classes construídas, nas quais um tipo específico substitui
o parâmetro de tipo. Essa substituição é propagada em todo o código na classe
construída. O exemplo a seguir mostra a aparência do procedimento processNewItem no
integerClass .
VB
End Sub
Para obter um exemplo mais completo, consulte Como definir uma classe capaz de
fornecer uma funcionalidade idêntica em tipos de dados diferentes.
Os procedimentos não são tipos, mas é possível definir e usar procedimentos genéricos.
Consulte Procedimentos genéricos no Visual Basic.
Os tipos com base em Object também são associados tardiamente, o que significa
que o acesso a seus membros requer código extra no tempo de execução. Isso
também reduz o desempenho.
Restrições
Embora o código em uma definição de tipo genérico deva ser o mais independente de
tipo possível, talvez seja necessário exigir uma determinada funcionalidade de qualquer
tipo de dados fornecido ao tipo genérico. Por exemplo, se você quiser comparar dois
itens para classificar ou agrupar, o tipo de dados deve implementar a interface
IComparable. Você pode impor esse requisito adicionando uma restrição ao parâmetro
de tipo.
VB
End Class
Tipos de restrições
A restrição pode especificar os seguintes requisitos em qualquer combinação:
O argumento de tipo deve ser do tipo ou herdar de, no máximo, uma classe
Se você precisar impor mais de um requisito, use uma lista de restrições separada por
vírgulas dentro de chaves ( { } ). Para exigir um construtor acessível, inclua a palavra-
chave Novo operador na lista. Para exigir um tipo de referência, inclua a palavra-chave
Class ; para exigir um tipo de valor, inclua a palavra-chave Structure .
VB
End Class
Termos Importantes
Os tipos genéricos introduzem e usam os seguintes termos:
Confira também
Data Types
Caracteres de tipo
Tipos de Valor e Tipos de Referência
Conversões de tipo no Visual Basic
Solução de problemas de tipos de dados
Data Types
Of
As
Tipo de dados Object
Covariância e Contravariância
Iteradores
Como definir uma classe capaz de
fornecer uma funcionalidade idêntica
em tipos de dados diferentes (Visual
Basic)
Artigo • 07/04/2023 • 4 minutos para o fim da leitura
Você pode definir uma classe da qual você pode criar objetos que fornecem
funcionalidade idêntica em diferentes tipos de dados. Para fazer isso, especifique um ou
mais parâmetros de tipo na definição. Em seguida, a classe pode servir como um modelo
para objetos que usam vários tipos de dados. Uma classe definida dessa forma é
chamada de classe genérica.
A vantagem de definir uma classe genérica é que você a define apenas uma vez e seu
código pode usá-la para criar muitos objetos que usam uma ampla variedade de tipos
de dados. Isso resulta em melhor desempenho do que definir a classe com o tipo
Object .
Além das classes, você também pode definir e usar estruturas genéricas, interfaces,
procedimentos e delegados.
3. Se você tiver mais de um parâmetro de tipo, faça uma lista separada por vírgula
dentro dos parênteses. Não repita a palavra-chave Of .
Dá suporte a uma operação, por exemplo > , que seu código executa
5. Identifique todos os membros da classe que devem ser declarados com um tipo
fornecido e declare-os As typeparameter . Isso se aplica ao armazenamento interno,
aos parâmetros de procedimento e aos valores retornados.
O exemplo a seguir define uma classe que gerencia uma lista muito simples. Ele
contém a lista na matriz interna items e o código de uso pode declarar o tipo de
dados dos elementos de lista. Um construtor parametrizado permite que o código
de uso defina o limite superior de items e o construtor sem parâmetros define
isso como 9 (para um total de 10 itens).
VB
Me.New(9)
End Sub
MyBase.New()
top = t
nextp = 0
End Sub
insert(i, nextp)
End Sub
"p")
items(j) = items(j - 1)
Next j
End If
items(p) = i
nextp += 1
End Sub
"p")
items(j) = items(j + 1)
Next j
End If
nextp -= 1
End Sub
Get
Return nextp
End Get
End Property
Get
End If
Return items(p)
End Get
End Property
End Class
Você pode declarar uma classe de simpleList para manter uma lista de valores de
Integer , outra classe para manter uma lista de valores de String e outra para
manter valores de Date . Exceto pelo tipo de dados dos membros da lista, os
objetos criados de todas essas classes se comportam de maneira idêntica.
O argumento de tipo que o código de uso fornece para itemType pode ser um
tipo intrínseco, como Boolean ou Double , uma estrutura, uma enumeração ou
qualquer tipo de classe, incluindo um que seu aplicativo define.
VB
iList.add(10)
iList.add(20)
iList.add(30)
sList.add("First")
sList.add("extra")
sList.add("Second")
sList.add("Third")
sList.remove(1)
dList.add(#1/1/2003#)
dList.add(#3/3/2003#)
dList.insert(#2/2/2003#, 1)
Dim s =
vbCrLf &
vbCrLf &
MsgBox(s)
End Sub
Confira também
Data Types
Tipos genéricos no Visual Basic
Independência da linguagem e componentes independentes da linguagem
Of
Lista de Tipos
Como: Usar uma classe genérica
Tipo de dados Object
Como usar uma classe genérica (Visual
Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Uma classe que usa parâmetros de tipo é chamada de classe genérica. Se você estiver
usando uma classe genérica, poderá gerar uma classe construída dela fornecendo um
argumento de tipo para cada um desses parâmetros. Em seguida, você pode declarar
uma variável do tipo de classe construída e pode criar uma instância da classe
construída e atribuí-la a essa variável.
Além das classes, você também pode definir e usar estruturas genéricas, interfaces,
procedimentos e delegados.
O procedimento a seguir usa uma classe genérica definida no .NET Framework e cria
uma instância dela.
2. Crie o objeto da maneira normal, mas adicione (Of type) imediatamente após o
nome de classe.
VB
queueDouble.Enqueue(1.1)
queueDouble.Enqueue(2.2)
queueDouble.Enqueue(3.3)
queueDouble.Enqueue(4.4)
Next i
s &= vbCrLf & "Queue of String items (reported length " &
Next i
MsgBox(s)
End Sub
Confira também
Data Types
Tipos genéricos no Visual Basic
Independência da linguagem e componentes independentes da linguagem
Of
Instrução Imports (tipo e namespace .NET)
Como: Definir uma classe capaz de fornecer uma funcionalidade idêntica em tipos
de dados diferentes
Iteradores
Procedimentos genéricos no Visual
Basic
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Inferência de tipos
Você pode chamar um procedimento genérico sem fornecer nenhum argumento de
tipo. Se você chamá-lo dessa forma, o compilador tentará determinar os tipos de dados
apropriados para passar para os argumentos de tipo do procedimento. Isso é chamado
de inferência de tipos. O código a seguir mostra uma chamada na qual o compilador
infere que ele deve passar o tipo String para o parâmetro de tipo t .
VB
End Sub
End Sub
VB
End Sub
demoSub(twoDimensions)
End Sub
Você pode invocar a inferência de tipo apenas omitindo todos os argumentos de tipo.
Se você fornecer um argumento de tipo, deverá fornecer todos eles.
Somente procedimentos genéricos dão suporte para inferência de tipo. Não é possível
invocar inferência de tipo em classes genéricas, estruturas, interfaces ou delegados.
Exemplo
Descrição
O exemplo a seguir define um procedimento genérico Function para localizar um
elemento específico em uma matriz. Ele define um parâmetro de tipo e o usa para
construir os dois parâmetros na lista de parâmetros.
Código
VB
Next i
End If
Return -1
End Function
Comentários
O exemplo anterior requer a capacidade de comparar searchValue com cada elemento
de searchArray . Para garantir essa capacidade, ele restringe o parâmetro de tipo T para
implementar a interface IComparable<T>. O código usa o método CompareTo em vez
do operador = , pois não há garantia de que um argumento de tipo fornecido para T dê
suporte ao operador = .
VB
End Sub
Confira também
Tipos genéricos no Visual Basic
Como: Definir uma classe capaz de fornecer uma funcionalidade idêntica em tipos
de dados diferentes
Como: Usar uma classe genérica
Procedimentos
Parâmetros e Argumentos de Procedimento
Lista de Tipos
Lista de parâmetros
Tipos de valor que permitem valor nulo
(Visual Basic)
Artigo • 07/04/2023 • 6 minutos para o fim da leitura
Às vezes, você trabalha com um tipo de valor que não tem um valor definido em
determinadas circunstâncias. Por exemplo, um campo em um banco de dados pode ter
que distinguir entre ter um valor atribuído que seja significativo e não ter um valor
atribuído. Os tipos de valor podem ser estendidos para obter seus valores normais ou
um valor nulo. Essa extensão é chamada de tipo que permite valor nulo.
VB
Você pode declarar variáveis e propriedades com tipos de valor anuláveis e declarar
uma matriz com elementos de um tipo de valor anulável. Você pode declarar
procedimentos com tipos de valor anuláveis como parâmetros e pode retornar um tipo
de valor anulável de um procedimento Function .
Você não pode construir um tipo que permite valor nulo em um tipo de referência,
como uma matriz, uma String ou uma classe. O tipo subjacente precisa ser um tipo de
valor. Para obter mais informações, consulte Tipos de Valor e Tipos de Referência.
Valores padrão
Quando você declara uma variável com um tipo de valor anulável, a propriedade
HasValue dela tem um valor padrão de False . Isso significa que, por padrão, a variável
não tem nenhum valor definido, em vez do valor padrão do tipo de valor subjacente. No
exemplo a seguir, a variável numberOfChildren inicialmente não tem nenhum valor
definido, embora o valor padrão do tipo Integer seja 0.
VB
Armazenando Valores
Você armazena um valor em uma variável ou propriedade de um tipo de valor anulável
da maneira típica. O exemplo a seguir atribui um valor à variável numberOfChildren
declarada no exemplo anterior.
VB
numberOfChildren = 2
VB
numberOfChildren = Nothing
7 Observação
Embora você possa atribuir Nothing a uma variável de um tipo de valor anulável,
não é possível testá-la para Nothing usando o sinal de igual. Comparação que usa
o sinal de igual, someVar = Nothing , sempre é avaliada como Nothing . Você pode
testar a propriedade HasValue da variável False ou testar usando o operador o
operador Is ou IsNot .
Recuperando Valores
Para recuperar o valor de uma variável de um tipo de valor anulável, primeiro você deve
testar a propriedade HasValue dela para confirmar que ela tem um valor. Se você tentar
ler o valor quando HasValue estiver False , o Visual Basic lançará uma exceção
InvalidOperationException. O exemplo a seguir mostra a maneira recomendada de ler a
variável numberOfChildren dos exemplos anteriores.
VB
If numberOfChildren.HasValue Then
Else
End If
b1 b2 b1 E b2 b1 Ou b2
Quando o valor de uma variável ou expressão Booliana é Nothing , ele não é nem true
ou false . Considere o exemplo a seguir.
VB
b1 = True
b2 = Nothing
Console.WriteLine("Expression is true")
Else
End If
Console.WriteLine("Expression is false")
Else
End If
Neste exemplo, b1 And b2 avalia como Nothing . Como resultado, a cláusula Else é
executada em cada instrução If e a saída é a seguinte:
7 Observação
VB
' Variable n is a nullable type, but both m and n have proper values.
Dim m As Integer = 3
Dim n? As Integer = 2
' The values summed are 3 and 2, but sum1 is inferred to be of type
Integer?.
Dim sum1 = m + n
VB
n = Nothing
Dim sum2 = m + n
' Because the values of n, compare2, and sum2 are all Nothing, the
Confira também
InvalidOperationException
HasValue
Data Types
Tipos de Valor e Tipos de Referência
Solução de problemas de tipos de dados
Preencher conjuntos de dados usando TableAdapters
Operador If
Inferência de Tipo de Variável Local
Operador Is
Operador IsNot
Tipos de Valores Anuláveis (C#)
Tipos de valor e referência
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Há dois tipos em Visual Basic: tipos de referência e tipos de valor. Variáveis de tipos de
referência armazenam referências em seus dados (objetos) enquanto que variáveis de
tipos de valor contém diretamente seus dados. Com tipos de referência, duas variáveis
podem fazer referência ao mesmo objeto; portanto, operações em uma variável podem
afetar o objeto referenciado pela outra variável. Com tipos de valor, cada variável tem
sua própria cópia dos dados, e não é possível que operações em uma variável afetem a
outra (exceto no caso de variáveis de modificadores ByRef em parâmetros).
Tipos de valor
Um tipo de dados é um tipo de valor se ele mantém os dados dentro de sua própria
alocação de memória. Os tipos de valor incluem o seguinte:
Enumerações, já que seu tipo subjacente é sempre SByte , Short , Integer , Long ,
Byte , UShort , UInteger , ou ULong
Você pode declarar um tipo de valor usando a palavra-chave reservada, por exemplo,
Decimal . Você também pode usar a palavra-chave New para inicializar um tipo de valor.
Isso será especialmente útil se o tipo tiver um construtor que usa parâmetros. Um
exemplo disso é o construtor Decimal(Int32, Int32, Int32, Boolean, Byte), que cria um
novo valor Decimal a partir das partes fornecidas.
Tipos de referência
Um tipo de referência armazena uma referência aos seus dados. Os tipos de referência
incluem o seguinte:
String
Todas as matrizes, mesmo se seus elementos forem tipos de valor
Delegados
Uma classe é um tipo de referência. Observe que cada matriz é um tipo de referência,
mesmo que seus membros sejam tipos de valor.
Como cada tipo de referência representa uma classe .NET Framework subjacente, você
deve usar a palavra-chave Novo operador ao inicializá-la. A instrução a seguir inicializa
uma matriz.
VB
Namespaces
Módulos
Eventos
Propriedades e procedimentos
Você pode descobrir se uma variável Object está agindo como um tipo de referência ou
um tipo de valor passando-a para o método IsReference na classe Information do
namespace Microsoft.VisualBasic. Information.IsReference retornará True se o conteúdo
da variável Object representar um tipo de referência.
Confira também
Tipos de Valor Anulável
Conversões de tipo no Visual Basic
Instrução Structure
Uso eficiente de tipos de dados
Tipo de dados Object
Data Types
Conversões de tipo no Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Nesta seção
Conversões de Widening e Narrowing
Mostra como converter uma variável Object em qualquer outro tipo de dados.
Conversões de matriz
Seções relacionadas
Data Types
Data Types
Aborda alguns problemas comuns que surgem ao trabalhar com tipo de dados.
Conversões de Widening e Narrowing
(Visual Basic)
Artigo • 28/11/2022 • 4 minutos para o fim da leitura
Uma conversão de expansão altera um valor para um tipo de dados que pode permitir
qualquer valor possível dos dados originais. As conversões de expansão preservam o
valor de origem, mas podem alterar sua representação. Isso ocorrerá se você converter
de um tipo integral para Decimal ou de Char para String .
Uma conversão de restrição altera um valor para um tipo de dados que pode não ser
capaz de manter alguns dos valores possíveis. Por exemplo, um valor fracionário é
arredondado quando ele é convertido em um tipo integral e um tipo numérico sendo
convertido para Boolean é reduzido a um True ou False .
Conversões de expansão
A tabela a seguir mostra as conversões de expansão padrão.
Double Double
Qualquer tipo enumerado Seu tipo integral subjacente e qualquer tipo ao qual o tipo
(Enumerado) subjacente é expandido.
2
Conversões de Integer , UInteger , Long , ULong ou Decimal para Single ou Double
pode resultar em perda de precisão, mas nunca em perda de magnitude. Nesse sentido,
eles não incorrem em perda de informações.
3 Pode parecer surpreendente que uma conversão de um tipo derivado para um de seus
tipos base seja expansão. A justificativa é que o tipo derivado contém todos os
membros do tipo base, portanto, ele se qualifica como uma instância do tipo base. Na
direção oposta, o tipo base não contém nenhum novo membro definido pelo tipo
derivado.
Conversões de redução
As conversões de restrição padrão incluem o seguinte:
7 Observação
Se uma classe ou estrutura definir uma Função CType para servir como um operador de
conversão para ou dessa classe ou estrutura, isso poderá gerar qualquer exceção que
CType considerar apropriada. Além disso, isso CType pode chamar funções do Visual
Basic ou métodos .NET Framework, o que, por sua vez, pode gerar uma variedade de
exceções.
VB
shape = square
Confira também
Data Types
Conversões de tipo no Visual Basic
Conversões implícitas e explícitas
Conversões entre cadeias de caracteres e outros tipos
Como converter um objeto em outro tipo no Visual Basic
Conversões de matriz
Data Types
Funções de conversão do tipo
Conversões implícitas e explícitas (Visual
Basic)
Artigo • 12/12/2022 • 5 minutos para o fim da leitura
VB
Dim k As Integer
Dim q As Double
' Integer widens to Double, so you can do this with Option Strict On.
k = 432
q = k
Uma conversão explícita usa uma palavra-chave de conversão de tipo. O Visual Basic
fornece várias dessas palavras-chave, que forçam uma expressão entre parênteses ao
tipo de dados desejado. Essas palavras-chave agem como funções, mas o compilador
gera o código embutido; portanto, a execução é um pouco mais rápida do que com
uma chamada de função.
VB
q = Math.Sqrt(q)
k = CInt(q)
Palavras-chave de conversão
A tabela a seguir mostra as regras de conversão disponíveis.
CBool Tipo de dados Qualquer tipo numérico (incluindo Byte , SByte e tipos
booliano enumerados), String , Object
CByte Tipo de Dados Qualquer tipo numérico (incluindo SByte e tipos enumerados),
Byte Boolean , String , Object
CDbl Tipo de Dados Qualquer tipo numérico (incluindo Byte , SByte e tipos
Duplo enumerados), Boolean , String , Object
CDec Tipo de Dados Qualquer tipo numérico (incluindo Byte , SByte e tipos
Decimal enumerados), Boolean , String , Object
CInt Tipo de Dados Qualquer tipo numérico (incluindo Byte , SByte e tipos
Integer enumerados), Boolean , String , Object
CLng Tipo de Dados Qualquer tipo numérico (incluindo Byte , SByte e tipos
Long enumerados), Boolean , String , Object
CSByte Tipo de Dados Qualquer tipo numérico (incluindo Byte e tipos enumerados),
SByte Boolean , String , Object
CShort Tipo de Dados Qualquer tipo numérico (incluindo Byte , SByte e tipos
Short enumerados), Boolean , String , Object
CSng Tipo de Dados Qualquer tipo numérico (incluindo Byte , SByte e tipos
Simples enumerados), Boolean , String , Object
CStr Tipo de Dados Qualquer tipo numérico (incluindo Byte , SByte e tipos
String enumerados), Boolean , Char , matriz Char , Date , Object
Palavra- Converte uma Tipos de dados de expressão permitidos para serem
chave de expressão em convertidos
conversão tipo de dados
de tipo
(,)
Ao converter em um tipo de dados composto, as interfaces que
ele implementa e as classes das quais herda
CUInt Tipo de Dados Qualquer tipo numérico (incluindo Byte , SByte e tipos
UInteger enumerados), Boolean , String , Object
CULng Tipo de Dados Qualquer tipo numérico (incluindo Byte , SByte e tipos
ULong enumerados), Boolean , String , Object
CUShort Tipo de Dados Qualquer tipo numérico (incluindo Byte , SByte e tipos
UShort enumerados), Boolean , String , Object
Função CType
A Função CType opera em dois argumentos. O primeiro é a expressão a ser convertida,
e o segundo é o tipo de dados de destino ou classe de objeto. Observe que o primeiro
argumento deve ser uma expressão, não um tipo.
CType é uma função embutida, o que significa que o código compilado faz a conversão,
muitas vezes sem gerar uma chamada de função. Isso melhora o desempenho.
Tipos elementares
O exemplo a seguir demonstra o uso de CType .
VB
k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)
Tipos compostos
Você pode usar CType para converter valores em tipos de dados compostos, bem como
em tipos elementares. Você também pode usá-la para forçar uma classe de objeto ao
tipo de uma de suas interfaces, como no exemplo a seguir.
VB
Dim h As Object
Dim cZ As cZone
' The following statement coerces a cZone object to its interface iZone.
h = CType(cZ, iZone)
Tipos de matriz
CType também pode converter tipos de dados de matriz, como no exemplo a seguir.
VB
v = CType(obArray, classV())
End If
7 Observação
Os valores usados com uma palavra-chave de conversão devem ser válidos para o
tipo de dados de destino, ou ocorrerá um erro. Por exemplo, se você tentar
converter um Long em um Integer , o valor do Long deve estar dentro do intervalo
válido para o tipo de dados Integer .
U Cuidado
Especificar que CType converta de um tipo de classe para outro falhará em tempo
de execução se o tipo de origem não derivar do tipo de destino. Essa falha gera
uma exceção InvalidCastException.
No entanto, se um dos tipos for uma estrutura ou classe que você definiu, e se tiver
definido CType nessa estrutura ou classe, uma conversão poderá ser bem-sucedida se
atender aos requisitos do seu CType . Veja Como definir um operador de conversão.
Confira também
Conversões de tipo no Visual Basic
Conversões entre cadeias de caracteres e outros tipos
Como converter um objeto em outro tipo no Visual Basic
Estruturas
Data Types
Funções de conversão do tipo
Solução de problemas de tipos de dados
Conversões entre cadeias de caracteres
e outros tipos (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Se você tiver definido uma classe ou estrutura, poderá definir operadores de conversão
de tipo entre String e o tipo de sua classe ou estrutura. Para obter mais informações,
confira Como definir um operador de conversão.
VB
Quando o Visual Basic converte uma cadeia de caracteres em um valor numérico, ele
usa as configurações de Opções Regionais especificadas no Windows Painel de
Controle para interpretar o separador de milhares, o separador decimal e o símbolo de
moeda. Isso significa que uma conversão pode ter êxito em uma configuração, mas não
em outra. Por exemplo, "$14.20" é aceitável na localidade em inglês (Estados Unidos),
mas não em nenhuma localidade francesa.
Confira também
Conversões de tipo no Visual Basic
Conversões de Widening e Narrowing
Conversões implícitas e explícitas
Como converter um objeto em outro tipo no Visual Basic
Conversões de matriz
Data Types
Funções de conversão do tipo
Desenvolver aplicativos localizados e globalizados
Como converter um objeto em outro
tipo no Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você converte uma Object variável em outro tipo de dados usando uma palavra-chave
de conversão, como CType Function.
Exemplo
O exemplo a seguir converte uma Object variável em um Integer e um String .
VB
End Sub
tardia (para um tipo de referência). Todas essas operações levam tempo extra de
execução e tornam o desempenho mais lento.
Compilar o código
Este exemplo requer:
Confira também
Object
Conversões de tipo no Visual Basic
Conversões de Widening e Narrowing
Conversões implícitas e explícitas
Conversões entre cadeias de caracteres e outros tipos
Conversões de matriz
Estruturas
Data Types
Funções de conversão do tipo
Conversões de matriz (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você pode converter o tipo de uma matriz em um tipo diferente, desde que atenda às
seguintes condições:
matriz de uma classe específica, ela assume o tipo dessa classe. No entanto, seu tipo
subjacente ainda é Object , e você pode defini-la posteriormente como outra matriz de
uma classe não relacionada. Como todas as classes derivam de Object , você pode
alterar o tipo de elemento da matriz de qualquer classe para qualquer outra classe.
No exemplo a seguir, não existe nenhuma conversão entre os tipos student e String ,
mas ambos derivam de Object , portanto, todas as atribuições são válidas.
VB
' Assume student has already been defined as a class.
testArray = names
No exemplo a seguir, students é uma matriz student . Como não existe conversão entre
String e student , a última instrução falha.
VB
students = names
Confira também
Data Types
Conversões de tipo no Visual Basic
Conversões implícitas e explícitas
Conversões entre cadeias de caracteres e outros tipos
Como converter um objeto em outro tipo no Visual Basic
Data Types
Funções de conversão do tipo
matrizes
Estruturas (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma estrutura é uma generalização de tipo definido pelo usuário (UDT) compatível com
versões anteriores do Visual Basic. Além dos campos, as estruturas podem expor
propriedades, métodos e eventos. Uma estrutura pode implementar uma ou mais
interfaces e você pode declarar níveis de acesso individuais para cada campo.
Você pode combinar itens de dados de diferentes tipos para criar uma estrutura. Uma
estrutura associa um ou mais elementos uns aos outros e à própria estrutura. Quando
você declara uma estrutura, ela se torna um tipo de dados composto e você pode
declarar variáveis desse tipo.
Estruturas são úteis quando você deseja que uma única variável contenha várias
informações relacionadas. Por exemplo, talvez você queira manter o nome, o ramal de
telefone e o salário de um funcionário juntos. Você pode usar diversas variáveis para
essas informações ou pode definir uma estrutura e usá-la para uma única variável de
funcionário. A vantagem da estrutura fica evidente quando você tem muitos
funcionários e, portanto, muitas instâncias da variável.
Nesta seção
Como: Declarar uma estrutura
Variáveis de estrutura
Abrange a atribuição de uma estrutura a uma variável e o acesso aos seus elementos.
Resume como as estruturas interagem com matrizes, objetos, procedimentos e entre si.
Estruturas e classes
Seções relacionadas
Data Types
Data Types
Você inicia uma declaração de estrutura com a Instrução Structure e a encerra com a
instrução End Structure . Entre essas duas instruções, você deve declarar pelo menos
um elemento. Os elementos podem ser de qualquer tipo de dados, mas pelo menos um
deve ser uma variável não compartilhada ou um evento não compartilhado e não
personalizado.
Para uma discussão sobre as diferenças entre estruturas e classes, consulte Estruturas e
Classes.
Para fins de demonstração, considere uma situação em que você deseja controlar o
nome, a extensão telefônica e o salário de um funcionário. Uma estrutura permite que
você faça isso em uma única variável.
VB
End Structure
Uma estrutura deve ter pelo menos um elemento. Você deve declarar cada
elemento e especificar um nível de acesso para ele. Se você usar a Instrução Dim
sem palavras-chave, a acessibilidade será padrão Public .
VB
Private Structure employee
salary *= raise
End Sub
End Structure
O campo salary no exemplo anterior é Private , o que significa que ele está
inacessível fora da estrutura, mesmo da classe que contém. No entanto, o
procedimento giveRaise é Public ; portanto, pode ser chamado de fora da
estrutura. Da mesma forma, você pode gerar o evento salaryReviewTime de fora
da estrutura.
Confira também
Data Types
Tipos de dados elementares
Tipos de dados compostos
Tipos de Valor e Tipos de Referência
Estruturas
Solução de problemas de tipos de dados
Variáveis de estrutura
Estruturas e outros elementos de programação
Estruturas e classes
Tipo de Dados Definido pelo Usuário
Variáveis de estrutura (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Depois de criar uma estrutura, você pode declarar variáveis no nível do procedimento e
no nível do módulo como esse tipo. Por exemplo, você pode criar uma estrutura que
registra informações sobre um sistema de computador. O exemplo a seguir demonstra
isso.
VB
End Structure
Agora você pode declarar variáveis desse tipo. A declaração a seguir ilustra isso.
VB
7 Observação
VB
mySystem.cPU = "486"
VB
yourSystem = mySystem
Confira também
Data Types
Tipos de dados elementares
Tipos de dados compostos
Tipos de Valor e Tipos de Referência
Estruturas
Solução de problemas de tipos de dados
Como: Declarar uma estrutura
Estruturas e outros elementos de programação
Estruturas e classes
Instrução Structure
Estruturas e outros elementos de
programação (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você pode usar estruturas em conjunto com matrizes, objetos e procedimentos, bem
como entre si. As interações usam a mesma sintaxe que esses elementos usam
individualmente.
7 Observação
Estruturas e matrizes
Uma estrutura pode conter uma matriz como um ou mais de seus elementos. O
exemplo a seguir ilustra essa situação.
VB
End Structure
Você acessa os valores de uma matriz dentro de uma estrutura da mesma forma que
acessa uma propriedade em um objeto. O exemplo a seguir ilustra essa situação.
VB
ReDim mySystem.diskDrives(3)
Você também pode declarar uma matriz de estruturas. O exemplo a seguir ilustra essa
situação.
VB
Dim allSystems(100) As systemInfo
Você segue as mesmas regras para acessar os componentes dessa arquitetura de dados.
O exemplo a seguir ilustra essa situação.
VB
ReDim allSystems(5).diskDrives(3)
allSystems(5).CPU = "386SX"
Estruturas e objetos
Uma estrutura pode conter um objeto como um ou mais de seus elementos. O exemplo
a seguir ilustra essa situação.
VB
End Structure
Você deve usar uma classe de objeto específica em tal declaração, em vez de Object .
Estruturas e procedimentos
Você pode passar uma estrutura como um argumento de procedimento. O exemplo a
seguir ilustra essa situação.
VB
someSystem.cPU = currentCPUName
someSystem.memory = currentMemorySize
someSystem.purchaseDate = Now
End Sub
O exemplo anterior passa a estrutura por referência, o que permite que o procedimento
modifique seus elementos para que as alterações entrem em vigor no código de
chamada. Se você quiser proteger uma estrutura contra essa modificação, passe-a por
valor.
VB
Dim i As Integer
For i = 1 To 100
Next i
' Process error: system with desired purchase date not found.
End Function
VB
End Structure
End Structure
VB
ReDim allSystems(1).diskDrives(3)
allSystems(1).diskDrives(0).type = "Floppy"
Você também pode usar essa técnica para encapsular uma estrutura definida em um
módulo dentro de uma estrutura definida em um módulo diferente.
O Visual Basic unifica a sintaxe para estruturas e classes, com o resultado de que ambas
as entidades dão suporte à maioria dos mesmos recursos. No entanto, também há
diferenças importantes entre estruturas e classes.
As classes têm a vantagem de serem tipos de referência – passar uma referência é mais
eficiente do que passar uma variável de estrutura com todos os seus dados. Por outro
lado, as estruturas não exigem alocação de memória no heap global.
Como você não pode herdar de uma estrutura, as estruturas devem ser usadas apenas
para objetos que não precisam ser estendidos. Use estruturas quando o objeto que
você deseja criar tiver um tamanho de instância pequeno e leve em conta as
características de desempenho de classes versus estruturas.
Semelhanças
Estruturas e classes são semelhantes nos seguintes aspectos:
Ambos são tipos de contêiner, o que significa que eles contêm outros tipos como
membros.
Ambos podem expor uma propriedade padrão, desde que essa propriedade tenha
pelo menos um parâmetro.
Diferenças
Estruturas e classes diferem nas seguintes particularidades:
Estruturas são tipos de valor e classes são tipos de referência. Uma variável de um
tipo de estrutura contém os dados da estrutura, em vez de conter uma referência
aos dados como um tipo de classe faz.
Uma estrutura deve ter pelo menos uma variável não compartilhada ou um
elemento de evento não compartilhado e não compartilhado; uma classe pode
estar completamente vazia.
Cada estrutura tem um construtor público implícito sem parâmetros. Esse construtor
inicializa todos os elementos de dados da estrutura para seus valores padrão. Você não
pode redefinir esse comportamento.
Instâncias e variáveis
Como as estruturas são tipos de valor, cada variável de estrutura está permanentemente
associada a uma instância de estrutura individual. Mas as classes são tipos de referência
e uma variável de objeto pode se referir a várias instâncias de classe em momentos
diferentes. Essa distinção afeta o uso de estruturas e classes das seguintes maneiras:
Por outro lado, se você definir uma variável de objeto a Nothing , desassocie-a de
qualquer instância de classe e não poderá acessar nenhum membro por meio da
variável até atribuir outra instância a ela.
Várias instâncias. Uma variável de objeto pode ter instâncias de classe diferentes
atribuídas a ela em momentos diferentes, e várias variáveis de objeto podem se
referir à mesma instância de classe ao mesmo tempo. As alterações feitas nos
valores dos membros da classe afetam esses membros quando acessados por
meio de outra variável que aponta para a mesma instância.
A partir do Visual Basic 2017, a linguagem do Visual Basic oferece suporte interno para
tuplas que facilitam a criação de tuplas e o acesso aos elementos de tuplas. Tupla é uma
estrutura de dados leve que possui um número específico e uma sequência de valores.
Ao instanciar a tupla, você define o número e o tipo de dados de cada valor (ou
elemento). Por exemplo, uma tupla de 2 (ou par) tem dois elementos. O primeiro pode
ser um valor Boolean , enquanto o segundo é um String . Como as tuplas facilitam o
armazenamento de vários valores em um único objeto, elas geralmente são usadas
como uma maneira leve de retornar vários valores de um método.
) Importante
O suporte à tupla requer o tipo ValueTuple. Se o .NET Framework 4.7 não estiver
instalado, você deverá adicionar o pacote System.ValueTuple do et, que está
disponível na Galeria do NuGet. Sem esse pacote, você pode obter um erro de
compilação semelhante a "O tipo predefinido 'ValueTuple(Of,,,)' não é definido ou
importado."
VB
Por padrão, o nome de cada campo em uma tupla consiste na cadeia de caracteres
Item junto com a posição baseada em um campo na tupla. Para esta tupla de 3, o
campo Date é Item1 , o campo String é Item2 e o campo Boolean é Item3 . O exemplo
a seguir exibe os valores dos campos da tupla para qual foi criada uma instância na
linha de código anterior
VB
Console.WriteLine($"{holiday.Item1} is {holiday.Item2}" +
Os campos de uma tupla do Visual Basic são leitura-gravação. Depois de instanciar uma
tupla, você pode modificar seus valores. O exemplo a seguir modifica dois dos três
campos da tupla criada no exemplo anterior e exibe o resultado.
VB
holiday.Item1 = #01/01/2018#
Console.WriteLine($"{holiday.Item1} is {holiday.Item2}" +
do campo novamente.
VB
Console.WriteLine($"{holiday.EventDate} Is {holiday.Name}" +
holiday.Item1 = #01/01/2018#
Console.WriteLine($"{holiday.Item1} is {holiday.Item2}" +
Você também pode especificar os nomes de tupla como parte da declaração de tipo de
uma variável, campo ou parâmetro:
VB
Console.WriteLine(holiday.Name)
VB
Console.WriteLine(events(1).IsHoliday)
O exemplo a seguir cria uma tupla stateInfo que contém três elementos explicitamente
nomeados, state , stateName e capital . Observe que, ao nomear os elementos, a
instrução de inicialização de tupla simplesmente atribui aos elementos nomeados os
valores das variáveis nomeadas de forma idêntica.
VB
Como elementos e variáveis têm o mesmo nome, o compilador do Visual Basic pode
inferir os nomes dos campos, como mostra o exemplo a seguir.
VB
Para habilitar nomes de elementos de tupla inferidos, você deve definir a versão do
compilador do Visual Basic a ser usada no arquivo do projeto do Visual Basic (*.vbproj):
XML
<PropertyGroup>
<LangVersion>15.3</LangVersion>
</PropertyGroup>
Para obter mais informações, confira Definir da versão de linguagem do Visual Basic.
Em alguns casos, o compilador do Visual Basic não pode inferir o nome do elemento de
tupla do nome do candidato e o campo de tupla só pode ser referenciado usando seu
nome padrão, como Item1 , Item2 etc. Eles incluem:
Quando a inferência do nome do campo falha, o Visual Basic não gera um erro do
compilador nem é uma exceção gerada no tempo de execução. Em vez disso, os
campos de tupla devem ser referenciados por seus nomes predefinidos, como Item1 e
Item2 .
Imutabilidade. As tuplas do Visual Basic são mutáveis. Por outro lado, uma
estrutura personalizada permite que você controle se uma instância é mutável ou
imutável.
Uma tupla do Visual Basic herda os membros de seu tipo ValueTuple. Além de seus
campos, eles incluem os seguintes métodos:
Método Descrição
CompareTo Compara a tupla atual com outra tupla com o mesmo número de elementos.
Atribuição e tuplas
O Visual Basic dá suporte à atribuição entre tipos de tupla que têm o mesmo número de
campos. Os tipos de campo poderão ser convertidos se um dos seguintes for
verdadeiro:
Outras conversões não são consideradas para atribuições. Vamos examinar os tipos de
atribuições que são permitidos entre tipos de tupla.
VB
' The number and field types of all these tuples are compatible.
Todas essas quatro tuplas têm o mesmo número de campos (chamados de ‘arity’) e os
tipos desses campos são idênticos. Portanto, todas essas atribuições funcionam:
VB
named = unnamed
' Despite the assignment, named still has fields that can be referred to as
'answer' and 'message'.
Console.WriteLine($"{named.Answer}, {named.Message}")
anonymous = unnamed
' Because of the assignment, the value of the elements of anonymous changed.
Console.WriteLine($"{anonymous.Item1}, {anonymous.Item2}")
named = differentNamed
' The field names are Not assigned. 'named' still has 'answer' and 'message'
fields.
Console.WriteLine($"{named.Answer}, {named.Message}")
Observe que os nomes das tuplas não são atribuídos. Os valores dos campos são
atribuídos na ordem dos campos na tupla.
Por fim, observe que podemos atribuir a tupla à named tupla conversion , mesmo que o
primeiro campo de named seja um Integer , e o primeiro campo de conversion seja um
Long . Essa atribuição é bem-sucedida porque converter um Integer em um Long é uma
conversão de expansão.
VB
Console.WriteLine($"{conversion.Item1} ({conversion.Item1.GetType().Name}),
" +
$"{conversion.Item2} ({conversion.Item2.GetType().Name})")
VB
named = differentShape
Você pode usar uma tupla, que fornece uma solução leve para recuperar vários
valores retornados.
Por exemplo, os métodos TryParse no .NET retornam um valor Boolean que indica se a
operação de análise foi bem-sucedida. O resultado da operação de análise é retornado
em uma variável passada por referência ao método. Normalmente, uma chamada para
um método de análise, como Int32.TryParse se parece com o seguinte:
VB
VB
Imports System.Globalization
End Function
End Module
Console.ReadLine()
Os elementos das classes Tupla são propriedades nomeadas Item1 , Item2 e assim
por diante. Nas tuplas do Visual Basic e nos tipos ValueTuple, os elementos de
tupla são campos.
Você não pode atribuir nomes significativos aos elementos de uma instância de
Tupla ou de uma instância do ValueTuple. O Visual Basic permite atribuir nomes
que comunicam o significado dos campos.
Os tipos genéricos de Tupla são tipos de referência. Usar esses tipos de Tupla
significa alocar objetos. Em caminhos de acesso, isso pode ter um impacto
mensurável no desempenho do aplicativo. Tuplas do Visual Basic e os tipos
ValueTuple são tipos de valor.
O exemplo a seguir cria uma tupla, converte-a em um objeto Tuple do .NET e converte-
a, novamente, em uma tupla do Visual Basic. Em seguida, o exemplo compara essa tupla
com a original para garantir que elas sejam iguais.
VB
' Convert the .NET tuple back to a Visual Basic tuple and ensure they are
the same.
Console.WriteLine($"{NameOf(cityInfo)} = {NameOf(cityInfo2)}:
{cityInfo.Equals(cityInfo2)}")
Confira também
Referência da linguagem Visual Basic
Uso eficiente de tipos de dados (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Tipagem forte
Especificar tipos de dados para todas as variáveis é conhecido como digitação forte. O
uso de digitação forte tem várias vantagens:
Ele habilita o suporte do IntelliSense para suas variáveis. Isso permite que você
veja suas propriedades e outros membros ao digitar o código.
Private x As Double
Protected s As String
Conversão de caracteres
As AscW funções e as ChrW funções operam no Unicode. Você deve usá-los em
preferência para Asc e Chr , o que deve se traduzir para dentro e para fora do Unicode.
Confira também
Asc
AscW
Chr
ChrW
Data Types
Tipos de Dados Numéricos
Declaração de Variável
Usando o IntelliSense
Solucionando problemas de tipos de
dados (Visual Basic)
Artigo • 28/11/2022 • 7 minutos para o fim da leitura
Esta página lista alguns problemas comuns que podem ocorrer quando você executa
operações em tipos de dados intrínsecos.
Devido a essa imprecisão, você não pode confiar em resultados exatos quando opera
em valores de ponto flutuante. Em particular, dois valores teoricamente iguais podem
ter representações ligeiramente diferentes.
1. Calcule o valor absoluto da diferença deles usando o método Abs da classe Math no
namespace System.
2. Determine uma diferença máxima aceitável, de modo que você possa considerar as duas
quantidades iguais para fins práticos se a diferença não for maior.
VB
pointThrees.ToString("G17") &
CStr(practicallyEqual))
O exemplo anterior usa o método ToString da estrutura Double para que possa
especificar uma precisão melhor do que a palavra-chave CStr usa. O padrão é 15
dígitos, mas o formato "G17" estende-o para 17 dígitos.
O Tipo de Dados Decimais não usa representação de ponto flutuante. Muitos números
que são inexatos em Single e Double são exatos em Decimal (por exemplo, 0,2 e 0,3).
Embora a aritmética seja mais lenta no Decimal do que no ponto flutuante, pode valer a
pena diminuir o desempenho para obter melhor precisão.
2. Use o caractere de tipo literal D para forçar literais para Decimal , caso os valores deles sejam
muito grandes para o tipo de dados Long .
VB
doubleRemainder.ToString("G17"))
O exemplo anterior usa o método ToString da estrutura Double para que possa
especificar uma precisão melhor do que a palavra-chave CStr usa. O padrão é 15
dígitos, mas o formato "G17" estende-o para 17 dígitos.
Porque zeroPointTwo é Double , o valor dele para 0,2 é uma fração binária infinitamente
repetitiva com um valor armazenado de 0,2000000000000001. Dividir 2,0 por essa
quantidade produz 9,9999999999999995 com um restante de
0,19999999999999999999999991.
Observe que não é suficiente declarar decimalRemainder como Decimal . Você também
precisa forçar os literais para Decimal ou eles usam Double por padrão e
decimalRemainder recebe o mesmo valor impreciso que doubleRemainder .
Você nunca deve gravar um código que dependa de valores numéricos equivalentes
para True e False . Sempre que possível, você deve restringir o uso de variáveis Boolean
aos valores lógicos para os quais elas são projetadas. Se você precisar misturar Boolean
e valores numéricos, verifique se entendeu o método de conversão selecionado.
Conversão no Framework
O método ToInt32 da classe Convert no namespace System converte True em +1.
O tipo de dados String não é ampliado para o Tipo de Dados de Caractere. Isso
significa que, se você quiser atribuir um literal a uma variável Char , deverá fazer uma
conversão de restrição ou forçar o literal para o tipo Char .
3. Siga as aspas duplas de fechamento com o caractere de tipo literal C para forçar o literal a
Char . Isso será necessário se a opção de verificação de tipo (Instrução Option Strict) for On e for
desejável em qualquer caso.
VB
charVar = "Z"
charVar = "Z"c
charVar = CChar("Z")
Há sempre um risco em usar conversões de restrição, pois elas podem falhar em tempo
de execução. Por exemplo, uma conversão de String para Char pode falhar se o valor
String contiver mais de um caractere. Portanto, é melhor a programação usar o
caractere de tipo C .
7 Observação
Se você precisar converter de String para outro tipo de dados, o procedimento mais
seguro é incluir a tentativa de conversão na Instrução Try...Catch...Finally. Isso permite
que você lide com uma falha em tempo de execução.
Matrizes de Caracteres
Um único Char e uma matriz de elementos Char são ampliados para String . No
entanto, String não é ampliado para Char() . Para converter um valor String em uma
matriz Char , você pode usar o método ToCharArray da classe System.String.
Confira também
Data Types
Caracteres de tipo
Tipos de Valor e Tipos de Referência
Conversões de tipo no Visual Basic
Data Types
Funções de conversão do tipo
Uso eficiente de tipos de dados
Elementos declarados no Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Instrução Dim
Instrução Const
Instrução Enum
Instrução Class
Instrução Structure
Instrução Module
Instrução Interface
Instrução Function
Instrução Sub
Instrução Declare
Instrução Operator
Instrução Property
Instrução Event
Instrução Delegate
Nesta seção
Nomes de elementos declarados
Seções relacionadas
Estrutura do Programa e Convenções de Código
Apresenta diretrizes para tornar mais fácil de ler, compreender e manter o seu código.
Instruções
Os delegados são objetos que se referem aos métodos. Às vezes, eles são descritos
como ponteiros de função fortemente tipados porque eles são semelhante aos ponteiros
de função usados em outras linguagens de programação. Mas, ao contrário dos
ponteiros de função, os delegados do Visual Basic são um tipo de referência baseado na
classe System.Delegate. Os delegados podem fazer referência a ambos os métodos
compartilhados: os métodos que podem ser chamados sem uma instância específica de
uma classe e os métodos de instância.
Representantes e eventos
Os delegados são úteis em situações em que é necessário um intermediário entre um
procedimento de chamada e o procedimento sendo chamado. Por exemplo, você pode
desejar que um objeto que aciona eventos possa chamar manipuladores de eventos
diferentes em diferentes circunstâncias. Infelizmente, o objeto que aciona os eventos
não pode saber de antemão quais manipulador de eventos estarão tratando um evento
específico. O Visual Basic permite que você associe dinamicamente os manipuladores de
eventos a eventos criando um delegado para você quando você usa a instrução
AddHandler . No tempo de execução, o delegado encaminha chamadas para o
manipulador de eventos apropriado.
Embora você possa criar seus próprios delegados, na maioria dos casos Visual Basic cria
o delegado e cuida dos detalhes para você. Por exemplo, uma instrução Event define
implicitamente uma classe delegada chamada <EventName>EventHandler como uma
classe aninhada da classe que contém a instrução Event e com a mesma assinatura que
o evento. A instrução AddressOf cria implicitamente uma instância de um delegado que
se refere a um procedimento específico. As duas linhas de código a seguir são
equivalentes. Na primeira linha, você vê a criação explícita de uma instância do
EventHandler , com uma referência ao método Button1_Click enviado como o
argumento. A segunda linha é uma maneira mais conveniente de fazer a mesma coisa.
VB
' The following line of code is shorthand for the previous line.
Você pode usar a forma mais simples de criar delegados em qualquer local que o
compilador possa determinar o tipo do delegado pelo contexto.
VB
Isso é útil quando você deseja rotear vários eventos para o mesmo manipulador.
Por exemplo, suponha que você tenha um aplicativo com anúncio classificado que inclui
uma caixa de listagem com os nomes de carros. Os anúncios são classificados por título,
que é, normalmente, a marca do carro. Um problema que você pode enfrentar ocorre
quando alguns carros incluem o ano antes do fabricante. O problema é que a
funcionalidade interna de classificação da caixa de listagem classifica somente por
códigos de caracteres. Ela coloca todos os anúncios começando com datas primeiro,
seguidos de anúncios começando com o fabricante.
Para corrigir isso, você pode criar um procedimento de classificação em uma classe que
usa a classificação alfabética padrão na maioria das caixas de listagem, mas é possível
mudar no tempo de execução para o procedimento de classificação personalizada para
anúncios de carro. Para fazer isso, você passa o procedimento de classificação
personalizada para a classe de classificação no tempo de execução usando delegados.
O tipo de tempo de compilação do expression deve ser o nome de uma classe ou uma
interface que contém um método do nome especificado cuja assinatura coincide com a
assinatura da classe delegada. O methodName pode ser um método compartilhado ou um
método de instância. O methodName não é opcional, mesmo se você criar um delegado
para o método padrão da classe.
VB
Module Module1
Sub Main()
inOrder.Num1 = 5
inOrder.Num2 = 4
' to use.
inOrder.ShowInOrder(AddressOf GreaterThan)
inOrder.ShowInOrder(AddressOf LessThan)
inOrder.ShowInOrder(Function(m, n) m > n)
inOrder.ShowInOrder(Function(m, n) m < n)
End Sub
End Function
End Function
Class InOrderClass
Else
End If
End Sub
Get
Return _num1
End Get
_num1 = value
End Set
End Property
Get
Return _num2
End Get
_num2 = value
End Set
End Property
End Class
End Module
Tópicos Relacionados
Título Descrição
Título Descrição
Como invocar um método Fornece um exemplo que mostra como associar um método a
delegado um delegado e depois invoca esse método por meio do
delegado.
VB
Dim FS As System.IO.FileStream
FS = New System.IO.FileStream("C:\tmp.txt",
System.IO.FileMode.Open)
Por outro lado, um objeto associado tardiamente quando ele é atribuído a uma variável
declarada para ser do tipo Object . Objetos desse tipo podem conter referências a
qualquer objeto, mas têm muitas das vantagens de objetos de associação inicial. Por
exemplo, o fragmento de código a seguir declara uma variável de objeto para conter
um objeto retornado pela função CreateObject :
VB
' To use this example, you must have Microsoft Excel installed on your
computer.
Sub TestLateBinding()
xlApp = CreateObject("Excel.Application")
xlBook = xlApp.Workbooks.Add
xlSheet = xlBook.Worksheets(1)
xlSheet.Activate()
xlSheet.Application.Visible = True
End Sub
7 Observação
A associação tardia só pode ser usada para acessar membros de tipo que são
declarados como Public . Acessando membros declarados como Friend ou
Protected Friend resulta em um erro em tempo de execução.
Confira também
CreateObject
Tempo de vida do objeto: como os objetos são criados e destruídos
Tipo de dados Object
Tipos de erro (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
No Visual Basic, os erros se enquadram em uma das três categorias: erros de sintaxe,
erros de tempo de execução e erros lógicos.
Erros de sintaxe
Erros de sintaxe são aqueles que aparecem enquanto você escreve código. Se você
estiver usando o Visual Studio, o Visual Basic verificará seu código ao digitá-lo na janela
do Editor de Código e alertará se você cometer um erro, como digitar incorretamente
uma palavra ou usar um elemento de linguagem incorretamente. Se você compilar na
linha de comando, o Visual Basic exibirá um erro do compilador com informações sobre
o erro de sintaxe. Erros de sintaxe são o tipo mais comum de erros. Você pode corrigi-
los facilmente no ambiente de codificação assim que eles ocorrem.
7 Observação
A Option Explicit instrução é um meio de evitar erros de sintaxe. Isso força você a
declarar, com antecedência, todas as variáveis a serem usadas no aplicativo.
Portanto, quando essas variáveis são usadas no código, todos os erros tipográficos
são pegos imediatamente e podem ser corrigidos.
Erros de lógica
Erros lógicos são aqueles que aparecem quando o aplicativo está em uso. Geralmente,
são suposições defeituosas feitas pelo desenvolvedor ou resultados indesejados ou
inesperados em resposta às ações do usuário. Por exemplo, uma chave mal tipada pode
fornecer informações incorretas a um método ou você pode assumir que um valor
válido sempre é fornecido a um método quando esse não é o caso. Embora os erros
lógicos possam ser tratados usando o tratamento de exceções (por exemplo, testando
se um argumento é Nothing e lançando um ArgumentNullException), geralmente eles
devem ser resolvidos corrigindo o erro na lógica e recompilando o aplicativo.
Confira também
Instrução Try...Catch...Finally
Noções básicas do depurador
Eventos (Visual Basic)
Artigo • 22/02/2023 • 7 minutos para o fim da leitura
Enquanto você visualiza um projeto Visual Studio como uma série de procedimentos
que executam em uma sequência, na realidade, a maioria dos programas é orientada a
eventos, o que significa que o fluxo de execução é determinado pelas ocorrências
externas chamadas eventos.
Um evento é um sinal que informa a um aplicativo que algo importante ocorreu. Por
exemplo, quando um usuário clica em um controle em um formulário, o formulário
pode lançar um evento Click e chamar um procedimento que manipula o evento. Os
eventos também permitem que tarefas separadas se comuniquem. Por exemplo,
digamos que seu aplicativo executa uma tarefa de classificação separadamente do
aplicativo principal. Se um usuário cancelar a classificação, seu aplicativo poderá enviar
um evento de cancelamento instruindo o processo de classificação para parar.
Declarando eventos
Você declara eventos dentro de classes, estruturas, módulos e interfaces usando a
palavra-chave Event , como no exemplo a seguir:
VB
Acionar eventos
Um evento é como uma mensagem anunciando que algo importante ocorreu. O ato de
transmitir a mensagem é chamado para acionar o evento. Em Visual Basic, você aciona
eventos com a instrução RaiseEvent , como no exemplo a seguir:
VB
RaiseEvent AnEvent(EventNumber)
Remetentes do evento
Qualquer objeto capaz de acionar um evento é um remetente do evento, também
conhecido como uma origem do evento. Formulários, controles e objetos definidos pelo
usuário são exemplos de remetentes de eventos.
Manipuladores de eventos
Manipuladores de eventos são procedimentos que são chamados quando ocorre um
evento correspondente. Você pode usar qualquer sub-rotina válida com uma assinatura
correspondente como um manipulador de eventos. Você não pode usar uma função
como um manipulador de eventos, porque ela não retorna um valor para a origem do
evento.
7 Observação
VB
Sub TestEvents()
EClass.RaiseEvents()
End Sub
MsgBox("Received Event.")
End Sub
Class EventClass
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
Não é possível usar uma variável WithEvents como uma variável de objeto. Ou
seja, você não pode declará-la como Object — você deve especificar o nome da
classe quando declarar a variável.
Como os eventos compartilhados não são ligados às instâncias de classe, você não
pode usar WithEvents para manipular eventos compartilhados declarativamente.
Da mesma forma, você não pode usar WithEvents ou Handles para manipular
eventos de um Structure . Em ambos os casos, você pode usar a instrução
AddHandler para manipular esses eventos.
VB
End Sub
AddHandler e RemoveHandler
A instrução AddHandler é semelhante à cláusula Handles , pois ambas permitem que
você especifique um manipulador de eventos. No entanto, AddHandler , usado com
RemoveHandler , fornece maior flexibilidade do que a cláusula Handles , permitindo que
VB
VB
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler
VB
Module Module1
Sub Main()
c1.CauseTheEvent()
c1.CauseTheEvent()
c1.CauseTheEvent()
End Sub
Sub EventHandler1()
End Sub
Sub EventHandler2()
End Sub
Sub CauseTheEvent()
RaiseEvent AnEvent()
End Sub
End Class
End Module
VB
End Class
Inherits BaseClass
End Sub
End Class
Seções relacionadas
Título Descrição
Instruções passo a passo: Fornece uma descrição passo a passo de como declarar e
declarando e acionando eventos acionar eventos para uma classe.
Criando manipuladores de eventos Descreve como trabalhar com eventos associados aos
no Windows Forms objetos do Windows Forms.
Há vários outros motivos pelos quais você possa querer usar interfaces em vez da
herança de classe:
As interfaces são mais flexíveis que as classes base, uma vez que é possível definir
uma única implementação que pode implementar várias interfaces.
As interfaces são mais adequadas em situações em que você não precisa herdar a
implementação de uma classe base.
As interfaces são úteis quando você não pode usar herança de classe. Por exemplo,
as estruturas não podem herdar de classes, mas podem implementar interfaces.
Declarando interfaces
As definições de interface são colocadas entre as instruções Interface e End Interface .
Após a instrução Interface , você pode adicionar uma instrução Inherits opcional que
lista uma ou mais interfaces herdadas. As instruções Inherits devem preceder todas as
outras instruções nos comentários de exceção de declaração. As instruções restantes na
definição da interface devem ser as instruções Event , Sub , Function , Property ,
Interface , Class , Structure e Enum . As interfaces não podem conter código de
implementação nem instruções associadas ao código de implementação, como End Sub
ou End Property .
7 Observação
Por exemplo, o código a seguir define uma interface com uma função, uma propriedade
e um evento.
VB
Interface IAsset
End Interface
Implementando interfaces
A palavra reservada Implements de Visual Basic é usada de dois modos. A instrução
Implements significa que uma classe ou estrutura implementa uma interface. A palavra-
Instrução Implements
Se uma classe ou estrutura implementa uma ou mais interfaces, ela deve incluir a
instrução Implements imediatamente após a instrução Class ou Structure . A instrução
Implements exige uma lista de interfaces separadas por vírgula a serem implementadas
Por exemplo, o código a seguir mostra como declarar uma sub-rotina chamada Sub1
que implementa um método de uma interface:
VB
Class Class1
Implements interfaceclass.interface2
End Sub
End Class
Ao usar Implements , você também pode escrever um único método que implementa
vários métodos definidos em uma interface, como no exemplo a seguir:
VB
Class Class2
Implements I1, I2
End Sub
End Class
VB
Interface Interface1
End Interface
Interface Interface2
Inherits Interface1
End Interface
VB
Implements Interface1
End Sub
End Class
VB
Implements Interface2
End Sub
End Sub
Get
Num = INum
End Get
End Property
End Class
Você pode implementar uma propriedade readonly com uma propriedade readwrite (ou
seja, você não precisa declará-la como readonly na classe sendo implementada).
Implementar uma interface significa implementar pelo menos os membros que a
interface declara, mas você pode oferecer mais funcionalidades, como permitir que a
propriedade seja gravável.
Tópicos Relacionados
Título Descrição
Passo a passo: Criação e Fornece um procedimento detalhado que o guiará pelo processo de
implementação de definição e de implementação de sua própria interface.
interfaces
7 Observação
Este passo a passo não fornece informações sobre como criar uma interface do
usuário.
7 Observação
Seu computador pode mostrar diferentes nomes ou locais para alguns dos
elementos de interface do usuário do Visual Studio nas instruções a seguir. A
edição do Visual Studio que você possui e as configurações que você usa
determinam esses elementos. Para obter mais informações, consulte
Personalizando o IDE.
Event Event1()
Implementação
Você pode observar que a sintaxe usada para declarar membros da interface é diferente
da sintaxe usada para declarar membros da classe. Essa diferença reflete o fato de que
as interfaces não podem conter código de implementação.
VB
Class ImplementationClass
VB
Implements TestInterface
VB
End Sub
Get
End Get
End Set
End Property
VB
VB
Return pval
VB
pval = value
VB
MsgBox("The X parameter for Method1 is " & X)
RaiseEvent Event1()
VB
VB
End Sub
4. Adicione uma sub-rotina nomeada Test à classe Form1 para testar a classe de
implementação:
VB
Sub Test()
testInstance = T
testInstance.Prop1 = 9
testInstance.Method1(5)
End Sub
VB
End Sub
Confira também
Instrução Implements
Interfaces
Instrução Interface
Instrução Event
LINQ no Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Esta seção contém exemplos, visões gerais e informações que ajudarão você a
compreender e usar o Visual Basic e LINQ (consulta integrada à linguagem).
Nesta seção
Introdução a LINQ no Visual Basic
Fornece exemplos de como incluir funções agregadas para contar, somar ou fazer
média de dados retornadas de uma consulta usando LINQ.
Confira também
LINQ (Consulta Integrada à Linguagem)
Visão geral de LINQ to XML no Visual Basic
LINQ para visão geral do DataSet
LINQ to SQL
Objetos e classes no Visual Basic
Artigo • 15/02/2023 • 12 minutos para o fim da leitura
Um objeto é uma combinação de código e dados que podem ser tratados como uma
unidade. Um objeto pode ser uma parte de um aplicativo, como um controle ou um
formulário. Todo o aplicativo também pode ser um objeto.
Ao criar um aplicativo em Visual Basic, você constantemente trabalha com objetos. Você
pode usar os objetos fornecidos pelo Visual Basic, como controles, formulários e objetos
de acesso a dados. Você também pode usar objetos de outros aplicativos em seu
aplicativo Visual Basic. Você pode até mesmo criar seus próprios objetos e definir
propriedades e métodos adicionais para eles. Os objetos atuam como blocos de
construção pré-fabricados para programas. Eles permitem que você escreva um trecho
de código uma vez e reutilize repetidamente.
Objetos e classes
Cada objeto no Visual Basic é definido por uma classe. Uma classe descreve as variáveis,
as propriedades, os procedimentos e os eventos de um objeto. Os objetos são
instâncias de classes. Você pode criar a quantidade de objetos que precisar após ter
definido uma classe.
Para entender a relação entre um objeto e sua classe, pense em cookies e cortadores de
cookie. O cortador de cookie é a classe. Ele define as características de cada cookie, por
exemplo, tamanho e forma. A classe é usada para criar objetos. Os objetos são os
cookies.
Você deve criar um objeto antes de poder acessar seus membros, exceto para Shared
membros que podem ser acessados sem um objeto da classe.
VB
End Class
2. Escreva uma instrução Dim para criar uma variável a qual você pode atribuir uma
instância da classe. A variável deve ser do tipo da classe desejada.
VB
VB
VB
nextCustomer.AccountNumber = lastAccountNumber + 1
7 Observação
Sempre que possível, você deve declarar a variável para ser do tipo de classe que
você pretende atribuir a ela. Isso é chamado de associação inicial. Se não souber o
tipo de classe no tempo de compilação, você poderá invocar a associação tardia,
declarando a variável como o Tipo de Dados do Objeto. Entretanto, a associação
tardia pode tornar o desempenho mais lento e limitar o acesso a membros do
objeto do tempo de execução. Para obter mais informações, consulte Declaração
de variável de objeto.
Várias instâncias
Objetos recentemente criados de uma classe geralmente são idênticos entre si. Assim
que existem como objetos individuais, no entanto, suas propriedades e variáveis podem
ser alteradas independentemente de outras instâncias. Por exemplo, se você adicionar
três caixas de seleção a um formulário, cada objeto da caixa de seleção será uma
instância da classe CheckBox. Os objetos CheckBox individuais compartilham um
conjunto comum de características e recursos (propriedades, variáveis, procedimentos e
eventos) definidos pela classe. No entanto, cada um tem seu próprio nome, pode ser
separadamente habilitado e desabilitado e pode ser colocado em um local diferente no
formulário.
Membros do objeto
Um objeto é um elemento de um aplicativo, que representa uma instância de uma
classe. Campos, propriedades, métodos e eventos são os blocos de construção de
objetos e constituem seus membros.
Acesso de membro
É possível acessar um membro de um objeto especificando, em ordem, o nome da
variável do objeto, um período ( . ) e o nome do membro. O exemplo a seguir define a
propriedade Text de um objeto Label.
VB
O IntelliSense lista os membros de uma classe quando você invoca sua opção de
membros da lista, por exemplo, ao digitar um ponto final ( . ) como um operador de
acesso de membro. Se você digitar o período após o nome de uma variável declarada
como uma instância da classe, o IntelliSense listará todos os membros de instância e
nenhum dos membros compartilhados. Se você digitar o ponto final após o nome da
classe, o IntelliSense listará todos os membros compartilhados e nenhum dos membros
de instância. Para obter mais informações, veja Usando o IntelliSense.
Campos e propriedades
Os campos e as propriedades representam as informações armazenadas em um objeto.
Você recupera e define seus valores com instruções de atribuição da mesma maneira
que você recupera e define variáveis locais em um procedimento. O exemplo a seguir
recupera a propriedade Width e define a propriedade ForeColor de um objeto Label.
VB
warningLabel.ForeColor = System.Drawing.Color.Red
Dica
Sempre mantenha os campos não constantes privados. Quando você quiser torná-
la pública, use uma propriedade.
Métodos
Um método é uma ação que um objeto pode executar. Por exemplo, Add é um método
do objeto ComboBox que adiciona uma nova entrada para uma caixa de combinação.
safetyTimer.Start()
Eventos
Um evento é uma ação reconhecida por um objeto, como clicar com o mouse ou
pressionar uma tecla e para o qual você pode escrever código para responder. Os
eventos podem ocorrer como resultado de uma ação do usuário ou código do
programa, ou eles podem ser causados pelo sistema. O código que sinaliza um evento
aciona o evento e o código que responde a ele lida com ele.
Você também pode desenvolver seus próprios eventos personalizados para serem
acionados por seus objetos e manipulados por outros objetos. Para obter mais
informações, consulte Eventos.
VB
secondForm.Show()
VB
7 Observação
Quando o modificador Shared é aplicado a um membro de classe, ele é associado
à classe em si em vez de uma determinada instância da classe. O membro é
acessado diretamente usando o nome de classe, do mesmo que os membros do
módulo são acessados.
Classes e módulos também usam escopos diferentes para seus membros. Membros
definidos em uma classe têm escopo em uma instância específica da classe e existem
somente para o tempo de vida do objeto. Para acessar membros de classe de fora de
uma classe, você deve usar nomes totalmente qualificados no formato de
Objeto.Membro.
O .NET fornece vários exemplos de componentes que estão disponíveis para uso. O
exemplo a seguir usa a classe TimeZone no namespace System. TimeZone fornece
membros que permitem que você recupere informações sobre o fuso horário do
sistema atual do computador.
VB
Console.WriteLine(s)
End Sub
Relação hierárquica
Quando classes são derivadas de classes mais fundamentais, elas devem ter um
relacionamento hierárquico. As hierarquias de classe são úteis para descrever itens que
são um subtipo de uma classe mais geral.
No exemplo a seguir, suponha que você deseja definir um tipo especial de Button que
atua como um Button normal, mas também expõe um método que reverte as cores de
primeiro plano e da tela de fundo.
VB
Certifique-se de que uma instrução End Class segue a última linha de código em
sua classe. Por padrão, o IDE (ambiente de desenvolvimento integrado) gera
automaticamente um End Class quando você insere uma instrução Class .
VB
Inherits System.Windows.Forms.Button
3. Adicione o código para os membros adicionais que sua classe derivada expõe. Por
exemplo, você pode adicionar um método ReverseColors e sua classe derivada
será semelhante ao seguinte:
VB
Inherits System.Windows.Forms.Button
Me.BackColor = Me.ForeColor
Me.ForeColor = saveColor
End Sub
End Class
As classes derivadas herdam membros da classe que eles se baseiam, permitindo que
você adicione complexidade enquanto progride em uma hierarquia de classe. Para obter
mais informações, consulte Noções básicas de herança.
Compilar o código
Certifique-se de que o compilador pode acessar a classe da qual você pretende derivar
sua nova classe. Isso pode significar qualificar totalmente seu nome, como no exemplo
anterior, ou identificar seu namespace em uma Instrução Imports (Tipo e Namespace
.NET). Se a classe estiver em um projeto diferente, você precisará adicionar uma
referência ao projeto. Para obter mais informações, consulte Gerenciando referências
em um projeto.
Relação de confinamento
Outro modo de relação dos objetos é a relação de confinamento. Os objetos de
contêiner encapsulam logicamente outros objetos. Por exemplo, o objeto
OperatingSystem logicamente contém um objeto Version, que ele retorna por
intermédio de sua propriedade Version. Observe que o objeto de contêiner não contém
fisicamente qualquer outro objeto.
Coleções
Um tipo específico de confinamento de objeto é representado pelas coleções. As
coleções são grupos de objetos semelhantes que podem ser enumerados. O Visual
Basic dá suporte a uma sintaxe específica na instrução For Each...Next que permite que
você itere pelos itens de uma coleção. Além disso, as coleções permitem, com
frequência, que você use um Item[] para recuperar elementos pelo índice ou
associando-os com uma cadeia de caracteres exclusiva. As coleções podem ser mais
fáceis de usar que matrizes porque elas permitem que você adicione ou remova itens
sem usar índices. Devido à facilidade de uso, as coleções geralmente são usadas para
armazenar formulários e controles.
Tópicos relacionados
Instruções passo a passo: definindo classes
Tipos anônimos
Descreve como criar e usar tipos anônimos, que permitem que você crie objetos sem
escrever uma definição de classe para o tipo de dados.
Discute inicializadores de objeto, que são usados para criar instâncias de tipos
nomeados e anônimos usando uma única expressão.
Uma expressão é uma série de elementos de valor combinada com operadores, que
gera um novo valor. Os operadores agem em elementos de valor executando cálculos,
comparações ou outras operações.
Tipos de operadores
O Visual Basic fornece os seguintes tipos de operadores:
Avaliação de expressões
O resultado final de uma expressão representa um valor, que normalmente é um tipo de
dados familiar, como Boolean , String ou um tipo numérico.
5 + 4
' The preceding expression evaluates to 9.
15 * System.Math.Sqrt(9) + x
763 < 23
Vários operadores podem executar ações em uma única expressão ou instrução, como
mostra o exemplo a seguir.
VB
x = 45 + y * z ^ 2
Confira também
Operadores
Combinação eficiente de operadores
Instruções
Procedimentos no Visual Basic
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Chamar um procedimento
Você invoca um procedimento de algum outro lugar no código. Isso é conhecido como
uma chamada de procedimento. Quando a execução do procedimento termina, ele
retorna o controle para o código que o invocou, que é conhecido como o código de
chamada. O código de chamada é um demonstrativo, ou uma expressão incluída em um
demonstrativo, que especifica o procedimento pelo nome e transfere o controle a ele.
Retorno de um procedimento
Um procedimento retorna o controle ao código de chamada quando termina a
execução. Para fazer isso, ele pode usar uma Instrução Return, o Instrução Exit
apropriado para o procedimento ou a instruçãoInstrução <Palavra-chave> Final do
procedimento. O controle, então, é transmitido para o código de chamada, seguindo o
ponto da chamada de procedimento.
mesmo procedimento.
Parâmetros e argumentos
Na maioria dos casos, um procedimento precisa operar em diferentes dados cada vez
que é chamado. Você pode transmitir essas informações para o procedimento como
parte da chamada de procedimento. O procedimento define zero ou mais parâmetros e
cada um deles representa um valor que se espera que seja transmitido. A
correspondência com cada parâmetro na definição do procedimento é um argumento
na chamada de procedimento. Um argumento representa o valor que você transmite ao
parâmetro correspondente em uma determinada chamada de procedimento.
Tipos de procedimentos
O Visual Basic usa vários tipos de procedimentos:
Os procedimentos Sub executam ações, mas não retornam um valor para o código
de chamada.
Confira também
Como criar um procedimento
Subprocedimentos
Procedimentos de função
Procedimentos de propriedade
Procedimentos do operador
Parâmetros e Argumentos de Procedimento
Procedimentos recursivos
Sobrecarga de procedimento
Procedimentos genéricos no Visual Basic
Objetos e Classes
Instruções no Visual Basic
Artigo • 07/04/2023 • 13 minutos para o fim da leitura
Uma instrução no Visual Basic é completa. Ela pode conter palavras-chave, operadores,
variáveis, constantes e expressões. Cada instrução pertence a uma das seguintes
categorias:
Este tópico descreve cada categoria. Além disso, este tópico descreve como combinar
várias instruções em uma única linha e como continuar uma instrução em várias linhas.
Instruções de declaração
Você usa instruções de declaração para nomear e definir procedimentos, variáveis,
propriedades, matrizes e constantes. Ao declarar um elemento de programação, você
também pode definir seu tipo de dados, nível de acesso e escopo. Para obter mais
informações, consulte Características do Elemento Declarado.
VB
End Sub
que applyFormat é Public , o que significa que qualquer código que possa se referir a
ele pode chamá-lo.
Valores iniciais
Quando o código que contém uma instrução de declaração é executado, o Visual Basic
reserva a memória necessária para o elemento declarado. Se o elemento tiver um valor,
o Visual Basic o inicializará para o valor padrão de seu tipo de dados. Para obter mais
informações, consulte "Comportamento" na Instrução Dim.
Você pode atribuir um valor inicial a uma variável como parte de sua declaração, como
ilustra o exemplo a seguir.
VB
Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.
Se uma variável for uma variável de objeto, você poderá criar explicitamente uma
instância de sua classe ao declará-la usando a palavra-chave Novo Operador, como
ilustra o exemplo a seguir.
VB
Observe que o valor inicial especificado em uma instrução de declaração não é atribuído
a uma variável até que a execução atinja sua instrução de declaração. Até esse
momento, a variável contém o valor padrão para seu tipo de dados.
Instruções executáveis
Uma instrução executável executa uma ação. Ele pode chamar um procedimento,
ramificar para outro lugar no código, fazer loop por várias instruções ou avaliar uma
expressão. Uma instrução de atribuição é um caso especial de uma instrução executável.
aWidget.SpinClockwise()
Next counter
Else
aWidget.SpinCounterClockwise()
Next counter
End If
End Sub
O loop For...Next em cada bloco chama o método apropriado várias vezes igual ao
valor do revolutions parâmetro.
Instruções de atribuição
As instruções de atribuição executam operações de atribuição, que consistem em pegar
o valor no lado direito do operador de atribuição ( = ) e armazená-lo no elemento à
esquerda, como no exemplo a seguir.
VB
v = 42
VB
x = y + z + FindResult(3)
VB
Dim a, b As String
Você também pode atribuir valores Boolean , usando um literal Boolean ou uma
expressão Boolean , como ilustra o exemplo a seguir.
VB
Dim r, s, t As Boolean
r = True
s = 45 > 1003
VB
n += 1
VB
n = n + 1
VB
q &= "String"
Para obter informações sobre como converter entre tipos de dados, consulte
Conversões de tipo no Visual Basic. Resumidamente, o Visual Basic converte
automaticamente um valor de um determinado tipo em qualquer outro tipo no qual ele
é expandido. Uma conversão de expansão é aquela em que sempre é bem-sucedida no
tempo de execução e não perde nenhum dado. Por exemplo, o Visual Basic converte um
valor Integer para Double , quando apropriado, porque Integer é expandido para
Double . Para obter mais informações, consulte Ampliando e restringindo conversões.
As conversões de restrição (aquelas que não estão expandido) correm o risco de ter
falhas em tempo de execução ou perda de dados. Você pode executar uma conversão
de estreitamento explicitamente usando uma função de conversão de tipo ou direcionar
o compilador para executar todas as conversões implicitamente definindo Option
Strict Off . Para obter mais informações, consulte Conversões implícitas e explícitas.
VB
Embora ocasionalmente conveniente, essa forma de sintaxe torna seu código difícil de
ler e manter. Portanto, é recomendável manter uma instrução em uma linha.
VB
nameVar = "John"
End Sub
VB
Return username.Split(delimiter)(position)
End Function
VB
Security.Principal.WindowsIdentity.GetCurrent().Name,
CChar("\"),
Depois de uma chave aberta ( { ) ou antes de uma chave } de fechamento (). Por
exemplo:
VB
.Email = "terry@www.adventure-works.com"
VB
Dim customerXml = <Customer>
<Name>
<%=
customer.Name
%>
</Name>
<Email>
<%=
customer.Email
%>
</Email>
</Customer>
VB
cmd.CommandText =
VB
Dim fileStream =
My.Computer.FileSystem.
OpenTextFileReader(filePath)
Após operadores binários ( + , - , / , * , Mod , <> , < , > , <= , >= , ^ , >> , << , And ,
AndAlso , Or , OrElse , Like , Xor ) dentro de uma expressão. Por exemplo:
VB
Dim memoryInUse =
My.Computer.Info.TotalPhysicalMemory +
My.Computer.Info.TotalVirtualMemory -
My.Computer.Info.AvailablePhysicalMemory -
My.Computer.Info.AvailableVirtualMemory
VB
If TypeOf inStream Is
IO.FileStream AndAlso
inStream IsNot
Nothing Then
ReadFile(inStream)
End If
VB
Dim fileStream =
My.Computer.FileSystem.
OpenTextFileReader(filePath)
VB
' Allowed:
"Value"}
' .
' Allowed:
With log
.Source =
"Application"
End With
VB
<Name>.Value
<Email>.Value
Depois de um sinal menor que (<) ou antes de um sinal maior que ( > ) quando
você especifica um atributo. Também após um sinal maior que ( > ) quando você
especifica um atributo. No entanto, você deve incluir um caractere de continuação
de linha ( _ ) ao especificar atributos de nível de assembly ou módulo. Por exemplo:
VB
<
Serializable()
>
End Class
entre as palavras-chave dos operadores de consulta que são compostos por várias
palavras-chave ( Order By , Group Join , Take While e Skip While ). Por exemplo:
VB
Process.GetProcesses
proc.MainWindowTitle
VB
For Each p In
vsProcesses
p.ProcessName,
p.Id,
p.MainWindowTitle)
Next
VB
VB
Seções relacionadas
Termo Definição
Operadores de Atribuição Fornece links para páginas de referência de idioma que abrangem
operadores de atribuição, como = , *= e &= .
Operadores e Expressões Mostra como combinar elementos com operadores para gerar
novos valores.
Como: Quebrar e combinar Mostra como dividir uma única instrução em várias linhas e como
instruções no código colocar várias instruções na mesma linha.
Termo Definição
Nesta seção
Introdução a cadeias de caracteres no Visual Basic
Demonstra como criar de maneira eficiente uma cadeia de caracteres longa com base
em várias cadeias menores.
Lista os tópicos que descrevem como converter cadeias de caracteres em outros tipos
de dados.
Confira também
Recursos da linguagem do Visual Basic
Variáveis no Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você normalmente precisa armazenar valores ao executar cálculos com o Visual Basic.
Por exemplo, talvez você queira calcular vários valores, compará-los e executar
operações diferentes dependendo do resultado da comparação. Você precisará reter os
valores se desejar compará-los.
Uso
O Visual Basic, assim como a maioria das linguagens de programação, usa variáveis para
armazenar valores. Uma variável tem um nome (a palavra que você usa para se referir
ao valor que a variável contém). Uma variável também tem um tipo de dados (que
determina o tipo de dados que a variável pode armazenar). Se precisar armazenar um
conjunto indexado de itens de dados estritamente relacionados, uma variável poderá
representar uma matriz.
A inferência de tipo de variável local permite que você declare variáveis sem especificar
de maneira explícita um tipo de dados. Em vez disso, o compilador infere o tipo da
variável com base no tipo da expressão de inicialização. Para obter mais informações,
consulte Inferência de tipo de variável local e Instrução Option Infer.
Atribuindo valores
Você pode usar instruções de atribuição para executar cálculos e atribuir o resultado a
uma variável, conforme mostra o exemplo a seguir.
VB
applesSold = 10
applesSold = applesSold + 1
7 Observação
Variáveis e propriedades
Como uma variável, uma propriedade representa um valor que você pode acessar. No
entanto, ela é mais complexa que uma variável. Uma propriedade usa blocos de código
que controlam como definir e recuperar seu valor. Para obter mais informações,
consulte Diferenças entre propriedades e variáveis no Visual Basic.
Confira também
Declaração de Variável
Variáveis de Objeto
Solução de problemas de Variáveis
Como inserir e remover dados de uma variável
Diferenças entre propriedades e variáveis no Visual Basic
Inferência de Tipo de Variável Local
XML no Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O Visual Basic fornece suporte à linguagem integrada que permite que ele interaja com
LINQ to XML.
Nesta seção
Os tópicos nesta seção apresentam o uso do LINQ to XML com o Visual Basic.
Tópico Descrição
Visão geral de LINQ to Descreve como o Visual Basic dá suporte a LINQ to XML.
XML no Visual Basic
Criando XML no Visual Descreve como criar objetos de literal do XML usando o LINQ to
Basic XML.
Manipulando XML no Descreve como carregar e analisar XML usando o Visual Basic.
Visual Basic
Confira também
System.Xml.Linq
Literais XML
Propriedades do eixo XML
LINQ to XML
Interoperabilidade COM (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
O COM (Component Object Model) permite que um objeto exponha sua funcionalidade
a outros componentes e aplicativos host. Atualmente, a maioria dos softwares incluem
objetos COM. Embora os assemblies .NET sejam a melhor opção para novos aplicativos,
algumas vezes será preciso empregar objetos COM. Esta seção aborda alguns dos
problemas associados à criação e ao uso de objetos COM com Visual Basic.
Nesta seção
Introdução à Interoperabilidade COM
Aborda como adicionar referências a objetos COM que têm bibliotecas de tipos.
Como: Chamar uma função do Windows que use tipos não assinados
Demonstra como chamar uma função do Windows que tem um parâmetro de tipo não
assinado.
Orienta o processo de criação de objetos COM com e sem o modelo de classe COM.
Aborda alguns dos problemas que você pode encontrar ao usar o COM.
Fornece uma visão geral de como usar objetos COM e objetos .NET Framework no
mesmo aplicativo.
Passo a passo: Implementação de herança com objetos COM
Descreve como usar objetos COM existentes como base para novos objetos.
Seções relacionadas
Interoperação com código não gerenciado
Aborda os atributos que você pode usar ao trabalhar com código não gerenciado.
Introdução à interoperabilidade COM
(Visual Basic)
Artigo • 22/02/2023 • 3 minutos para o fim da leitura
Usando o .NET Framework para criar componentes COM, você pode usar a
interoperabilidade COM sem registro. Isso permite controlar qual versão de DLL está
habilitada quando mais de uma versão está instalada em um computador e permite que
os usuários finais usem XCOPY ou FTP para copiar seu aplicativo para um diretório
apropriado nos computadores deles onde ele pode ser executado. Para obter mais
informações, consulte Interoperabilidade COM sem Registro.
Assemblies
Um assembly é o bloco de construção principal de um aplicativo .NET Framework. É
uma coleção de funcionalidades que é criada, com versão e implantada como uma
única unidade de implementação que contém um ou mais arquivos. Cada assembly
contém um manifesto do assembly.
Bibliotecas de Tipos e Manifestos de Assembly
As bibliotecas de tipos descrevem características de objetos COM, como nomes de
membros e tipos de dados. Os manifestos de assembly executam a mesma função para
aplicativos .NET Framework. Eles contêm informações sobre:
Tipos e recursos que compõem o assembly. Isso inclui aqueles que são exportados
dele.
Assemblies de Interoperabilidade
Os assemblies de interoperabilidade são assemblies do .NET Framework que fazem a
ponte entre o código gerenciado e não gerenciado, mapeando membros de objeto
COM para membros .NET Framework gerenciados equivalentes. Os assemblies de
interoperabilidade criados pelo .NET do Visual Basic lidam com muitos dos detalhes de
trabalhar com objetos COM, como o marshalling de interoperabilidade.
Marshalling de Interoperabilidade
Todos os aplicativos .NET Framework compartilham um conjunto de tipos comuns que
permitem a interoperabilidade de objetos, independentemente da linguagem de
programação usada. Os parâmetros e os valores retornados de objetos COM às vezes
usam tipos de dados que diferem daqueles usados no código gerenciado. O
marshalling de interoperabilidade é o processo de empacotamento de parâmetros e
retornar valores em tipos de dados equivalentes à medida que eles se movem de e para
objetos COM. Para obter mais informações, consulte Marshaling de Interoperabilidade.
Confira também
Interoperabilidade COM
Passo a passo: Implementação de herança com objetos COM
Interoperação com código não gerenciado
Solução de problemas de Interoperabilidade
Assemblies no .NET
Tlbimp.exe (Importador de Biblioteca de Tipos)
Tlbexp.exe (Exportador de Biblioteca de Tipos)
Realizando marshaling de interoperabilidade
Interoperabilidade COM sem registro
Como fazer referência a objetos COM a
partir do Visual Basic
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
No Visual Basic, adicionar referências a objetos COM que têm bibliotecas de tipos
requer a criação de um assembly de interoperabilidade para a biblioteca COM. As
referências aos membros do objeto COM são roteadas para o assembly de
interoperabilidade e, em seguida, encaminhadas para o objeto COM real. As respostas
do objeto COM são roteadas para o assembly de interoperabilidade e encaminhadas
para o aplicativo .NET Framework.
compilador de linha de comando, use a opção /link para fazer referência à biblioteca
COM. Para saber mais, consulte -link (Visual Basic).
VB
Imports INKEDLib
Class Sample
Private s As IInkCursor
End Class
Console
Confira também
Interoperabilidade COM
Tlbimp.exe (Importador de Biblioteca de Tipos)
Tlbexp.exe (Exportador de Biblioteca de Tipos)
Passo a passo: Implementação de herança com objetos COM
Solução de problemas de Interoperabilidade
Instrução Imports (tipo e namespace .NET)
Como trabalhar com controles ActiveX
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Os controles ActiveX são componentes COM ou objetos que você pode inserir em uma
página da Web ou em outro aplicativo para reutilizar a funcionalidade empacotada que
outra pessoa programou. Você pode usar controles ActiveX desenvolvidos para o Visual
Basic 6.0 e versões anteriores para adicionar recursos à Caixa de Ferramentas do Visual
Studio.
3. Marque a caixa de seleção ao lado do controle ActiveX que você deseja usar e
clique em OK.
7 Observação
Confira também
Interoperabilidade COM
Como adicionar controles do ActiveX ao Windows Forms
Aximp.exe (Importador de Controle ActiveX do Windows Forms)
Considerações sobre quando hospedar um controle ActiveX em um Windows
Form
Solução de problemas de Interoperabilidade
Instruções passo a passo: chamando
APIs do Windows (Visual Basic)
Artigo • 22/02/2023 • 9 minutos para o fim da leitura
As APIs do Windows são DLLs (bibliotecas de vínculo dinâmico) que fazem parte do
sistema operacional Windows. Você as usa para executar tarefas quando for difícil
escrever procedimentos equivalentes por conta própria. Por exemplo, o Windows
fornece uma função nomeada FlashWindowEx que permite que a barra de título de um
aplicativo alterne entre tons claros e escuros.
A vantagem de usar as APIs do Windows em seu código é que elas podem economizar
tempo de desenvolvimento porque contêm dezenas de funções úteis que já foram
gravadas e estão aguardando para serem usadas. A desvantagem é que pode ser difícil
trabalhar com as APIs do Windows e elas são desfavoráveis quando as coisas dão
errado.
7 Observação
Seu computador pode mostrar diferentes nomes ou locais para alguns dos
elementos de interface do usuário do Visual Studio nas instruções a seguir. A
edição do Visual Studio que você possui e as configurações que você usa
determinam esses elementos. Para obter mais informações, consulte
Personalizando o IDE.
Chamadas à API usando Declare
A maneira mais comum de chamar APIs do Windows é usando a instrução Declare .
7 Observação
VB
O nome que segue a palavra-chave Function é o nome que seu programa usa para
acessar a função importada. Ele pode ser o mesmo que o nome real da função que você
está chamando ou você pode usar qualquer nome de procedimento válido e, em
seguida, empregar a palavra-chave Alias para especificar o nome real da função que
você está chamando.
Especifique a palavra-chave Lib , seguida pelo nome e local da DLL que contém a
função que você está chamando. Não é necessário especificar o caminho para arquivos
localizados nos diretórios do sistema Windows.
Use a palavra-chave Alias se o nome da função que você está chamando não for um
nome de procedimento válido do Visual Basic ou entrar em conflito com o nome de
outros itens em seu aplicativo. Alias indica o nome verdadeiro da função que está
sendo chamada.
7 Observação
usados. O Visual Basic exige que você use um tipo de dados específico para todas
as instruções Declare .
2. Use um editor de texto, como o Bloco de Notas, para exibir o conteúdo do arquivo
de cabeçalho (.h) e localizar os valores associados às constantes sendo usadas. Por
exemplo, a API MessageBox usa a constante MB_ICONQUESTION para mostrar um
ponto de interrogação na caixa de mensagem. A definição de MB_ICONQUESTION
está em WinUser.h e aparece da seguinte maneira:
VB
VB
MB_ICONQUESTION Or MB_YESNO)
Else
End If
End Sub
Marshalling de dados
1. Determine o nome da função que deseja chamar, além de seus argumentos, tipos
de dados e valor retornado.
VB
Imports System.Runtime.InteropServices
VB
ByVal x As Short,
<MarshalAsAttribute(UnmanagedType.AsAny)>
ByVal o As Object)
Você pode usar DllImport com a maioria das chamadas à API do Windows, desde que a
chamada se refira a um método compartilhado (às vezes chamado de estático). Você
não pode usar métodos que exigem uma instância de uma classe. Ao contrário das
instruções Declare , DllImport as chamadas não podem usar o atributo MarshalAs .
VB
Imports System.Runtime.InteropServices
6. Declare uma função vazia antes da instrução End Class do formulário e nomeie a
função MoveFile .
VB
End Function
Sua função pode ter qualquer nome de procedimento válido; o atributo DllImport
especifica o nome na DLL. Ele também identifica o marshalling de
interoperabilidade para os parâmetros e valores retornados, para que você possa
escolher tipos de dados do Visual Studio semelhantes aos tipos de dados que a
API usa.
VB
CharSet:=CharSet.Unicode, ExactSpelling:=True,
CallingConvention:=CallingConvention.StdCall)>
End Function
Else
End If
End Sub
10. Crie um arquivo chamado Test.txt e coloque-o no diretório C:\Tmp no disco rígido.
Crie o diretório Tmp, se necessário.
12. Clique em Button2. A mensagem "O arquivo foi movido com êxito" será exibida se
o arquivo puder ser movido.
Confira também
DllImportAttribute
MarshalAsAttribute
Instrução Declare
Auto
Alias
Interoperabilidade COM
Criando protótipos em código gerenciado
Realizando marshaling de um delegado como um método de retorno de chamada
Como chamar APIs do Windows (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Exemplo
VB
) As Integer
End Class
End Sub
End Class
Compilar o código
Este exemplo requer:
Programação robusta
As seguintes condições podem causar uma exceção:
Confira também
Um olhar detalhado sobre invocação de plataforma
Exemplos de invocação de plataforma
Consumindo funções de DLL não gerenciadas
Definindo um método com a emissão de reflexão
Passo a passo: Fazer chamadas de APIs do Windows
Interoperabilidade COM
Como chamar uma função do Windows
que use tipos não assinados (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Se você estiver consumindo uma classe, módulo ou estrutura que tenha membros de
tipos inteiros não assinados, você poderá acessar esses membros com o Visual Basic.
VB
Return s
End Function
End Class
VB
w.messageThroughWindows()
End Sub
U Cuidado
Os tipos de dados UInteger , ULong , UShort e SByte não fazem parte do CLS
(Independência de Linguagem e Componentes Independentes de
Linguagem), portanto, o código compatível com CLS não pode consumir um
componente que os usa.
) Importante
Fazer uma chamada para código não gerenciado, como a API (interface de
programação de aplicativo) do Windows, expõe seu código a possíveis riscos
de segurança.
) Importante
Confira também
Data Types
Tipo de Dados Integer
Tipo de Dados UInteger
Instrução Declare
Passo a passo: Fazer chamadas de APIs do Windows
Instruções passo a passo: criando
objetos COM com o Visual Basic
Artigo • 22/02/2023 • 4 minutos para o fim da leitura
A maneira mais fácil de expor objetos COM é usando o modelo de classe COM. Esse
modelo cria uma nova classe e configura seu projeto para gerar a classe com uma
camada de interoperabilidade como um objeto COM e registrá-la no sistema
operacional.
7 Observação
Embora você também possa expor uma classe criada no Visual Basic como um
objeto COM para uso de código não gerenciado, ele não é um objeto COM
verdadeiro e não pode ser usado pelo Visual Basic. Para obter mais informações,
consulte Interoperabilidade COM em aplicativos .NET Framework.
7 Observação
Seu computador pode mostrar diferentes nomes ou locais para alguns dos
elementos de interface do usuário do Visual Studio nas instruções a seguir. A
edição do Visual Studio que você possui e as configurações que você usa
determinam esses elementos. Para obter mais informações, consulte
Personalizando o IDE.
VB
maneira.
VB
VB
7 Observação
VB
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId,
ComClass1.EventsId)>
8. As classes COM devem ter um construtor sem Public Sub New() parâmetros ou a
classe não será registrada corretamente. Adicione um construtor sem parâmetros à
classe:
VB
MyBase.New()
End Sub
7 Observação
Os objetos COM gerados com o Visual Basic não podem ser usados por
outros aplicativos do Visual Basic porque não são objetos COM verdadeiros.
As tentativas de adicionar referências a esses objetos COM gerarão um erro.
Para obter detalhes, consulte Interoperabilidade COM em aplicativos .NET
Framework.
Confira também
ComClassAttribute
Interoperabilidade COM
Passo a passo: Implementação de herança com objetos COM
Diretiva #Region
Interoperabilidade COM em aplicativos .NET Framework
Solução de problemas de Interoperabilidade
Solucionando problemas de
interoperabilidade (Visual Basic)
Artigo • 22/02/2023 • 10 minutos para o fim da leitura
Marshalling de interoperação
Às vezes, talvez seja necessário usar tipos de dados que não fazem parte do .NET
Framework. Os assemblies de interoperabilidade lidam com a maior parte do trabalho
para objetos COM, mas talvez seja necessário controlar os tipos de dados usados
quando objetos gerenciados são expostos ao COM. Por exemplo, estruturas em
bibliotecas de classes devem especificar o tipo BStr não gerenciado em cadeias de
caracteres enviadas a objetos COM criados pelo Visual Basic 6.0 e versões anteriores.
Nesses casos, você pode usar o atributo MarshalAsAttribute para fazer com que os tipos
gerenciados sejam expostos como tipos não gerenciados.
Por exemplo, considere uma classe que tenha duas sobrecargas do método Synch .
Quando a classe é exposta como um objeto COM, os novos nomes de método gerados
podem ser Synch e Synch_2 .
2. Os nomes de método gerados na classe exposta como um objeto COM podem ser
alterados quando novas sobrecargas são adicionadas à classe ou à classe base.
Isso pode causar problemas de versão.
VB
No entanto, se você estiver usando a classe COM como base para uma classe derivada,
deverá usar a classe de interoperabilidade que representa a classe COM, como no
seguinte código:
VB
Class DerivedCommand
Inherits ADODB.CommandClass
End Class
7 Observação
VB
Dim db As DAO.Database
Set db = DBEngine.OpenDatabase("C:\nwind.mdb")
O .NET do Visual Basic requer que você sempre crie instâncias de objetos COM antes de
poder usar seus métodos. Para usar esses métodos no Visual Basic, declare uma variável
da classe desejada e use a nova palavra-chave para atribuir o objeto à variável de
objeto. A palavra-chave Shared pode ser usada quando você quiser garantir que apenas
uma instância da classe seja criada.
VB
Sub DAOOpenRecordset()
Dim db As DAO.Database
db = DBEngine.OpenDatabase("C:\nwind.mdb")
rst = db.OpenRecordset(
DAO.RecordsetTypeEnum.dbOpenForwardOnly,
DAO.RecordsetOptionEnum.dbReadOnly)
' Print the values for the fields in the debug window.
Next
Debug.WriteLine("")
rst.Close()
End Sub
VB
Sub ADODBConnect()
cn.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;" &
"Data Source=C:\NWIND.MDB"
cn.Open()
MsgBox(cn.ConnectionString)
End Sub
ADODBConnect()
End Sub
' This is the event handler for the cn_ConnectComplete event raised
Dim x As Integer = 6
Dim y As Integer = 0
Try
Catch ex As Exception
End Try
End Sub
Este exemplo gera um erro conforme o esperado. No entanto, se você tentar o mesmo
exemplo sem o bloco Try...Catch...Finally , o erro será ignorado como se você tivesse
usado a instrução OnError Resume Next . Sem tratamento de erros, a divisão por zero
falha silenciosamente. Como esses erros nunca geram erros de exceção sem tratamento,
é importante que você use alguma forma de tratamento de exceção em manipuladores
de eventos que lidam com eventos de objetos COM.
VB
Try
Catch ex As Exception
End Try
Se você tiver acesso ao procedimento que está sendo chamado, poderá evitar esse erro
usando a palavra-chave ByVal para declarar parâmetros que aceitam propriedades
ReadOnly . Por exemplo:
VB
End Sub
Se você não tiver acesso ao código-fonte do procedimento que está sendo chamado,
poderá forçar a propriedade a ser passada pelo valor adicionando um conjunto extra de
colchetes ao redor do procedimento de chamada. Por exemplo, em um projeto que tem
uma referência ao objeto COM da Biblioteca de Microsoft ActiveX Data Objects 2.8, você
pode usar:
VB
ProcessParams((pError.Description))
End Sub
Para evitar esse problema, você deve instalar assemblies compartilhados no GAC (Cache
de Assembly Global) e usar um MergeModule para o componente. Se você não puder
instalar o aplicativo no GAC, ele deverá ser instalado no CommonFilesFolder em um
subdiretório específico da versão.
Os assemblies que não são compartilhados devem estar localizados lado a lado no
diretório com o aplicativo de chamada.
Confira também
MarshalAsAttribute
Interoperabilidade COM
Tlbimp.exe (Importador de Biblioteca de Tipos)
Tlbexp.exe (Exportador de Biblioteca de Tipos)
Passo a passo: Implementação de herança com objetos COM
Instrução Inherits
Cache de assemblies global
Interoperabilidade COM em aplicativos
.NET Framework (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Quando você deseja usar objetos COM e objetos .NET Framework no mesmo aplicativo,
é necessário resolver as diferenças em como os objetos existem na memória. Um objeto
.NET Framework está localizado na memória gerenciada, a memória controlada pelo
Common Language Runtime, e pode ser movido pelo runtime conforme necessário. Um
objeto COM está localizado na memória não gerenciada e não é esperado que se mova
para outro local de memória. O Visual Studio e o .NET Framework fornecem ferramentas
para controlar a interação desses componentes gerenciados e não gerenciados. Para
obter mais informações sobre o código gerenciado, confira Common Language
Runtime.
Além de usar objetos COM em aplicativos .NET, talvez você também queira usar o Visual
Basic para desenvolver objetos acessíveis de código não gerenciado por meio de COM.
Os links nesta página fornecem detalhes sobre as interações entre objetos COM e .NET
Framework.
Seções relacionadas
Artigo Descrição
Wrappers COM Discute RCWs (Runtime Callable Wrappers), que permitem que o código
gerenciado chame métodos COM Callable Wrappers, que permitem que
clientes COM chamem métodos de objeto .NET.
Tlbimp.exe Discute a ferramenta que você pode usar para converter as definições de
(Importador de tipo encontradas dentro de uma biblioteca de tipos COM em definições
Biblioteca de equivalentes em um assembly do Common Language Runtime.
Tipos)
Instruções passo a passo:
implementando a herança com objetos
COM (Visual Basic)
Artigo • 22/02/2023 • 6 minutos para o fim da leitura
Você pode derivar classes do Visual Basic de classes Public em objetos COM, mesmo
aquelas criadas em versões anteriores do Visual Basic. As propriedades e os métodos de
classes herdados de objetos COM podem ser substituídos ou sobrecarregados assim
como propriedades e métodos de qualquer outra classe base podem ser substituídos
ou sobrecarregados. A herança de objetos COM é útil quando você tem uma biblioteca
de classes existente que não deseja recompilar.
O procedimento a seguir mostra como usar o Visual Basic 6.0 para criar um objeto COM
que contém uma classe e, em seguida, usá-la como uma classe base.
7 Observação
Seu computador pode mostrar diferentes nomes ou locais para alguns dos
elementos de interface do usuário do Visual Studio nas instruções a seguir. A
edição do Visual Studio que você possui e as configurações que você usa
determinam esses elementos. Para obter mais informações, consulte
Personalizando o IDE.
exibido.
VB
VB
mvarProp1 = vData
End Property
Prop1 = mvarProp1
End Property
VB
Function AddNumbers(
End Function
10. Crie e registre o objeto COM clicando em Criar ComObject1.dll no menu Arquivo.
7 Observação
Embora você também possa expor uma classe criada com o Visual Basic como
um objeto COM, ele não é um objeto COM verdadeiro e não pode ser usado
neste passo a passo. Para obter detalhes, consulte Interoperabilidade COM
em aplicativos .NET Framework.
Assemblies de Interoperabilidade
No procedimento a seguir, você criará um assembly de interoperabilidade, que atua
como uma ponte entre código não gerenciado (como um objeto COM) e o código
gerenciado que o Visual Studio usa. O assembly de interoperabilidade que o Visual Basic
cria manipula muitos dos detalhes de trabalhar com objetos COM, como o agrupamento
de interoperabilidade, o processo de empacotamento de parâmetros e os valores
retornados em tipos de dados equivalentes à medida que eles se movem de e para
objetos COM. A referência no aplicativo Visual Basic aponta para o assembly de
interoperabilidade, não o objeto COM real.
VB
' but the interop assembly appends the word Class to the name.
Inherits ComObject1.MathFunctionsClass
' This method overloads the method AddNumbers from the base class.
End Function
VB
Function SubtractNumbers(
End Function
VB
MathObject.Prop1)
Próximas etapas
Você deve ter notado que a função AddNumbers sobrecarregada parece ter o mesmo tipo
de dados que o método herdado da classe base do objeto COM. Isso ocorre porque os
argumentos e parâmetros do método de classe base são definidos como inteiros de 16
bits no Visual Basic 6.0, mas são expostos como inteiros de 16 bits do tipo Short em
versões posteriores do Visual Basic. A nova função aceita inteiros de 32 bits e
sobrecarrega a função de classe base.
Confira também
Interoperabilidade COM em aplicativos .NET Framework
Instrução Inherits
Tipo de Dados Short
Referência da linguagem Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Esta seção fornece informações de referência para vários aspectos da linguagem Visual
Basic.
Nesta seção
Convenções tipográficas e de código
Palavras-chave
Lista todas as palavras-chave do Visual Basic e fornece links para mais informações.
Constantes e Enumerações
Data Types
Diretivas
Funções
Modificadores
Lista os modificadores de tempo de execução do Visual Basic e fornece links para mais
informações.
Módulos
Objetos
Operadores
Propriedades
Consultas
Instruções
Fornece links para informações sobre como usar propriedades do eixo XML para acessar
XML diretamente no código.
Literais XML
Fornece links para informações sobre como usar literais do XML para incorporar XML
diretamente ao código.
Mensagens de Erro
Seções relacionadas
Compilador de linha de comando do Visual Basic
Descreve como usar o compilador de linha de comando como alternativa para compilar
programas no IDE (ambiente de desenvolvimento integrado) do Visual Studio.
Selecionar a versão da linguagem do
Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O compilador Visual Basic usa como padrão a última versão principal da linguagem que
foi liberada. Você pode optar por compilar qualquer projeto usando uma nova versão
de ponto da linguagem. A escolha de uma versão mais recente da linguagem permite
que o projeto use as últimas funcionalidades da linguagem. Em outros cenários, talvez
você precise validar se um projeto é compilado por completo ao usar uma versão mais
antiga da linguagem.
XML
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
O valor latest usa a última versão secundária da linguagem Visual Basic. Os valores
válidos são:
Valor Significado
padrão O compilador aceita toda a sintaxe de linguagem válida da versão principal mais
recente à qual dá suporte.
Valor Significado
15.3 O compilador aceita somente a sintaxe incluída no Visual Basic 15.3 ou inferior.
15.5 O compilador aceita somente a sintaxe incluída no Visual Basic 15.5 ou inferior.
16,9 O compilador aceita somente a sintaxe incluída no Visual Basic 16.9 ou inferior.
As cadeias de caracteres especiais default e latest são resolvidas nas últimas versões
da linguagem principal e secundária instaladas no computador de build,
respectivamente.
XML
<Project>
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
</Project>
Agora, os builds de cada subdiretório do diretório que contém esse arquivo usarão a
sintaxe Visual Basic versão 15.5. Para obter mais informações, confira o artigo sobre
como personalizar o build.
Definir a opção langversion do compilador
Você pode usar a opção -langversion da linha de comando. Para obter mais
informações, confira o artigo sobre a opção -langversion do compilador. Veja uma lista
dos valores válidos digitando vbc -langversion:? .
Convenções tipográficas e de código
(Visual Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Convenções tipográficas
Exemplo Descrição
SmallProject, Palavras e frases que você recebe instrução para digitar são formatadas
ButtonCollection conforme mostrado neste exemplo.
Instrução Os links que você pode clicar para ir para outra página de Ajuda são
Module formatados conforme mostrado neste exemplo.
{ Public | Na sintaxe, quando você precisa fazer uma escolha entre dois ou mais itens,
Friend | Private os itens são colocados entre chaves e separados por barras verticais.
}
Você precisa selecionar apenas um dos itens.
[ Protected | Na sintaxe, quando você tem a opção de selecionar entre dois ou mais itens,
Friend ] os itens são colocados entre colchetes e separados por barras verticais.
[{ ByVal | ByRef Na sintaxe, quando você pode selecionar não mais do que um item, mas
}] também pode omitir completamente os itens, os itens são colocados entre
colchetes cercados por chaves e separados por barras verticais.
memberName1
Na sintaxe, reticências (...) são usadas para indicar um número indefinido de
itens do tipo imediatamente na frente das reticências.
...
ESC, ENTER Os nomes de teclas e as sequências de teclas no teclado aparecem com todas
as letras maiúsculas.
ALT+F1 Quando sinais de adição (+) aparecem entre nomes de teclas, você precisa
manter uma tecla pressionada enquanto pressiona a outra. Por exemplo,
ALT+F1 significa manter pressionada a tecla ALT enquanto pressiona a tecla
F1.
Convenções de código
Exemplo Descrição
Confira também
Referência da linguagem Visual Basic
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Convenções de nomenclatura do Visual Basic
Como: Quebrar e combinar instruções no código
Comentários no código
Membros da Biblioteca de Runtime do
Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Classe Microsoft.VisualBasic.Collection
Add
Clear
Contains
Count
GetEnumerator
Item[]
Remove
Classe Microsoft.VisualBasic.ComClassAttribute
ClassID
EventID
InterfaceID
InterfaceShadows
Classe Microsoft.VisualBasic.ControlChars
Back
Cr
CrLf
FormFeed
Lf
NewLine
NullChar
Quote
Tab
VerticalTab
Classe Microsoft.VisualBasic.Constants
vbAbort
vbAbortRetryIgnore
vbApplicationModal
vbArchive
vbArray
vbBack
vbBinaryCompare
vbBoolean
vbByte
vbCancel
vbCr
vbCritical
vbCrLf
vbCurrency
vbDate
vbDecimal
vbDefaultButton1
vbDefaultButton2
vbDefaultButton3
vbDirectory
vbDouble
vbEmpty
vbExclamation
vbFalse
vbFirstFourDays
vbFirstFullWeek
vbFirstJan1
vbFormFeed
vbFriday
vbGeneralDate
vbGet
vbHidden
vbHide
vbHiragana
vbIgnore
vbInformation
vbInteger
vbKatakana
vbLet
vbLf
vbLinguisticCasing
vbLong
vbLongDate
vbLongTime
vbLowerCase
vbMaximizedFocus
vbMethod
vbMinimizedFocus
vbMinimizedNoFocus
vbMonday
vbMsgBoxHelp
vbMsgBoxRight
vbMsgBoxRtlReading
vbMsgBoxSetForeground
vbNarrow
vbNewLine
vbNo
vbNormal
vbNormalFocus
vbNormalNoFocus
vbNull
vbNullChar
vbNullString
vbObject
vbObjectError
vbOK
vbOKCancel
vbOKOnly
vbProperCase
vbQuestion
vbReadOnly
vbRetry
vbRetryCancel
vbSaturday
vbSet
vbShortDate
vbShortTime
vbSimplifiedChinese
vbSingle
vbString
vbSunday
vbSystem
vbSystemModal
vbTab
vbTextCompare
vbThursday
vbTraditionalChinese
vbTrue
vbTuesday
vbUpperCase
vbUseDefault
vbUserDefinedType
vbUseSystem
vbUseSystemDayOfWeek
vbVariant
vbVerticalTab
vbVolume
vbWednesday
vbWide
vbYes
vbYesNo
vbYesNoCancel
Módulo Microsoft.VisualBasic.Conversion
ErrorToString
Fix
Hex
Int
Oct
Str
Val
Módulo Microsoft.VisualBasic.DateAndTime
DateAdd
DateDiff
DatePart
DateSerial
DateString
DateValue
Day
Hour
Minute
Month
MonthName
Now
Second
TimeOfDay
Timer
TimeSerial
TimeString
TimeValue
Today
Weekday
WeekdayName
Year
Classe Microsoft.VisualBasic.ErrObject
Clear
Description
Erl
GetException
HelpContext
HelpFile
LastDllError
Number
Raise
Raise
Módulo Microsoft.VisualBasic.FileSystem
ChDir
ChDrive
CurDir
Dir
EOF
FileAttr
FileClose
FileCopy
FileDateTime
FileGet
FileGetObject
FileLen
FileOpen
FilePut
FilePutObject
FileWidth
FreeFile
GetAttr
Input
InputString
Kill
LineInput
Loc
Lock
LOF
MkDir
PrintLine
Rename
Reset
RmDir
Seek
SetAttr
SPC
TAB
Unlock
Write
WriteLine
Módulo Microsoft.VisualBasic.Financial
DDB
FV
IPmt
IRR
MIRR
NPer
NPV
Pmt
PPmt
PV
Rate
SLN
SYD
Módulo Microsoft.VisualBasic.Globals
ScriptEngine
ScriptEngineBuildVersion
ScriptEngineMajorVersion
ScriptEngineMinorVersion
Classe
Microsoft.VisualBasic.HideModuleNameAttribute
HideModuleNameAttribute
Módulo Microsoft.VisualBasic.Information
Erl
Err
IsArray
IsDate
IsDBNull
IsError
IsNothing
IsNumeric
IsReference
LBound
QBColor
RGB
SystemTypeName
TypeName
UBound
VarType
VbTypeName
Módulo Microsoft.VisualBasic.Interaction
AppActivate
Beep
CallByName
Choose
Command
CreateObject
DeleteSetting
Environ
GetAllSettings
GetObject
GetSetting
IIf
InputBox
MsgBox
Partition
SaveSetting
Shell
Switch
Classe
Microsoft.VisualBasic.MyGroupCollectionAttribute
CreateMethod
DefaultInstanceAlias
DisposeMethod
MyGroupName
Módulo Microsoft.VisualBasic.Strings
Asc
Asc
Chr
ChrW
Filter
Format
FormatCurrency
FormatDateTime
FormatNumber
FormatPercent
GetChar
InStr
InStrRev
Join
LCase
Left
Len
LSet
LTrim
Mid
Replace
Right
RSet
RTrim
Space
Split
StrComp
StrConv
StrDup
StrReverse
Trim
UCase
Classe
Microsoft.VisualBasic.VBFixedArrayAttribute
Bounds
Length
Classe
Microsoft.VisualBasic.VBFixedStringAttribute
Length
Módulo Microsoft.VisualBasic.VbMath
Randomize
Rnd
Constantes e Enumerações
Microsoft.VisualBasic
O namespace Microsoft.VisualBasic fornece constantes e enumerações como parte da
biblioteca de tempo de execução do Visual Basic. Você pode usar esses valores
constantes no código. Cada enumeração representa uma categoria específica de
funcionalidade. Para obter mais informações, confira Constantes e Enumerações.
Confira também
Constantes e Enumerações
Palavras-chave
Palavras-chave (Visual Basic)
Artigo • 22/02/2023 • 4 minutos para o fim da leitura
Palavras-chave reservadas
As seguintes palavras-chave são reservadas, o que significa que elas não podem ser
usadas como nomes para elementos de programação, como variáveis ou
procedimentos. Você pode evitar essa restrição colocando o nome entre colchetes ( [] ).
Para obter mais informações, consulte "Nomes de escape" em Nomes de elemento
declarado.
7 Observação
Não recomendamos que você use nomes de escape, porque isso pode tornar o
código difícil de ler e pode levar a erros sutis que podem ser difíceis de encontrar.
AddHandler
AddressOf
Alias
And
AndAlso
As
Boolean
ByRef
Byte
ByVal
Call
Case
Catch
CBool
CByte
CChar
CDate
CDbl
CDec
Char
CInt
Class Restrição
Class Instrução
CLng
CObj
Const
Continue
CSByte
CShort
CSng
CStr
CType
CUInt
CULng
CUShort
Date
Decimal
Declare
Default
Delegate
Dim
DirectCast
Do
Double
Each
Else
ElseIf
End Instrução
End<Palavra-chave>
EndIf
Enum
Erase
Error
Event
Exit
False
Finally
For Each…Next
Friend
Function
Get
GetType
GetXMLNamespace
Global
GoSub
GoTo
Handles
If
If()
Implements
Implements Instrução
In
In (Modificador Genérico)
Inherits
Integer
Interface
Is
IsNot
Let
Lib
Like
Long
Loop
Me
Mod
Module
Module Instrução
MustInherit
MustOverride
MyBase
MyClass
NameOf
Namespace
Narrowing
New Restrição
New Operador
Next
Not
Nothing
NotInheritable
NotOverridable
Object
Of
On
Operator
Option
Optional
Or
OrElse
Overloads
Overridable
Overrides
ParamArray
Partial
Private
Property
Protected
Public
RaiseEvent
ReadOnly
ReDim
REM
RemoveHandler
Resume
Return
SByte
Select
Set
Shadows
Shared
Short
Single
Static
Step
Stop
String
Structure Restrição
Structure Instrução
Sub
SyncLock
Then
Throw
To
True
Try
TryCast
TypeOf…Is
UInteger
ULong
UShort
Using
Variant
Wend
When
While
Widening
With
WithEvents
WriteOnly
Xor
#Const
#Else
#ElseIf
#End
#If
&
&=
*=
/=
\=
^
^=
+=
-=
>> Operador
>>= Operador
<<
<<=
7 Observação
embora não sejam mais usados no Visual Basic. O significado da palavra-chave Let
foi alterada. Let agora é usado em consultas LINQ. Para obter mais informações,
consulte Cláusula Let.
Aggregate
Auto
Custom
From
IsFalse
Key
Preserve
Take
Until
#Region
Ansi
Await
Distinct
Group By
IsTrue
Mid
Skip
Take While
Where
Assembly
Binary
Equals
Group Join
Iterator
Off
Skip While
Text
Yield
Async
Compare
Explicit
Into
Join
Order By
Strict
Unicode
#ExternalSource
Artigos relacionados
Título Descrição
Resumo de Lista os elementos de linguagem que são usados para criar, definir e usar
Matrizes matrizes.
Título Descrição
Resumo do Lista as instruções que são usadas para o loop e para controlar o fluxo do
Fluxo de procedimento.
Controle
Resumo da Lista as funções que são usadas para converter números, datas, horas e cadeias
Conversão de caracteres.
Resumo de Lista os tipos de dados. Também lista as funções que são usadas para converter
Tipos de entre tipos de dados e verificar os tipos de dados.
Dados
Resumo de Lista os elementos de linguagem que são usados para datas e horas.
datas e horas
Resumo de Lista as instruções que são usadas para declarar variáveis, constantes, classes,
Declarações módulos e outros elementos de programação. Também lista elementos de
e Constantes linguagem que são usados para obter informações de objeto, manipular eventos
e implementar herança.
Resumo de Lista as funções que são usadas para controlar o sistema de arquivos e processar
diretórios e os arquivos.
arquivos
Resumo de Lista os elementos de linguagem que são usados para capturar e retornar valores
Erros de erro em tempo de execução.
Resumo Lista as funções que são usadas para executar cálculos financeiros.
Financeiro
Resumo de Lista as funções que são usadas para ler e gravar arquivos, gerenciar arquivos e
entrada e imprimir resultados.
saída
Informações Lista as funções que são usadas para executar outros programas, obter os
e resumo da argumentos de linha de comando, manipular objetos COM, recuperar
interação informações de cores e usar as caixas de diálogo de controle.
Resumo de Lista as funções que são usadas para executar cálculos trigonométricos e outros
matemática cálculos matemáticos.
Minha Lista os objetos contidos no My , um recurso que fornece acesso aos métodos
Referência usados com frequência, propriedades e eventos do computador no qual o
aplicativo está em execução, o aplicativo atual, os recursos do aplicativo, as
configurações do aplicativo e etc.
Título Descrição
Resumo do Lista as funções que são usadas para ler, salvar e excluir configurações de
Registro programa.
Resumo de Lista as funções que são usadas para manipular cadeias de caracteres.
manipulação
da cadeia de
caracteres
Confira também
Membros da Biblioteca de Runtime do Visual Basic
Resumo de matrizes (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo do objeto de coleção (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo do fluxo de controle (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo da conversão (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Converte um tipo de dados em outro. CBool, CByte, CDate, CDbl, CDec, CInt, CLng, CSng,
CShort, CStr, CType, Fix, Int
Converter data em dia, mês, dia da semana Day, Month, Weekday, Year
ou ano.
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de tipos de dados (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Converter entre tipos de CBool, CByte, CChar, CDate, CDbl, CDec, CInt, CLng, CObj, CShort,
dados CSng, CStr, Fix, Int
Definir tipos de dados Boolean, Byte, Char, Date, Decimal, Double, Integer, Long, Object,
intrínsecos Short, Single, String
Verificar tipos de dados IsArray, IsDate, IsDBNull, IsError, IsNothing, IsNumeric, IsReference
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de datas e horas (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de declarações e constantes
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Declarar variáveis e constantes. Const, Dim, Private, Protected, Public, Shadows, Shared, Static
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de diretórios e arquivos (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Ler arquivos
Gravar em arquivos
Criar, excluir e mover arquivos e diretórios
Analisando arquivos de texto com o objeto TextFieldParser
Resumo de erros (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo financeiro (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Informações e resumo da interação
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de entrada e saída (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de matemática (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Funções Matemáticas Derivadas
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Funções matemáticas derivadas (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
A tabela a seguir mostra funções matemáticas não intrínsecas que podem ser derivadas
das funções matemáticas intrínsecas do objeto System.Math. Você pode acessar as
funções matemáticas intrínsecas adicionando Imports System.Math ao seu arquivo ou
projeto.
Confira também
Funções Matemáticas
Minha referência (Visual Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
O recurso My torna a programação mais rápida e fácil, dando a você acesso intuitivo a
métodos, propriedades e eventos usados regularmente. Esta tabela lista os objetos
contidos em My e as ações que podem ser executadas com cada um deles.
Ação Objeto
Confira também
Visão geral do modelo de aplicativo do Visual Basic
Desenvolvimento com My
Resumo de operadores (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Aritmético ^, –, *, /, \, Mod, +, =
Concatenação &, +
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo do registro (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Ler e gravar no Registro
Resumo de manipulação da cadeia de
caracteres (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Manipular cadeias de caracteres. InStr, Left, LTrim, Mid, Right, RTrim, Trim
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Atributos (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O Visual Basic fornece vários atributos que permitem que os objetos interoperem com
código não gerenciado e um atributo que permite que os membros do módulo sejam
acessados sem o respectivo nome. A tabela a seguir indica os atributos usados pelo
Visual Basic.
Atributo Descrição
VBFixedArrayAttribute Indica que uma matriz em uma estrutura ou variável não local deve
ser tratada como uma matriz de tamanho fixo.
VBFixedStringAttribute Indica que uma cadeia de caracteres deve ser tratada como se fosse
de comprimento fixo.
Confira também
Visão geral de atributos
Constantes e enumerações (Visual Basic)
Artigo • 28/11/2022 • 3 minutos para o fim da leitura
Constantes
Constante Descrição
DEBUG Um valor Boolean que pode ser definido na caixa de diálogo Propriedades do
Projeto. Por padrão, a configuração de depuração de um projeto define DEBUG .
Quando DEBUG é definido, os métodos de classe Debug geram saída para a janela
Saída. Quando não está definido, os métodos de classe Debug não são compilados e
nenhuma saída de depuração é gerada.
TARGET Uma cadeia de caracteres que representa o tipo de saída para o projeto ou a
configuração da opção de linha de comando -target. Os valores possíveis de TARGET
são:
TRACE Um valor Boolean que pode ser definido na caixa de diálogo Propriedades do
Projeto. Por padrão, todas as configurações de um projeto definem TRACE . Quando
TRACE é definido, os métodos de classe Trace geram saída para a janela Saída.
Quando não está definido, os métodos de classe Trace não são compilados e
nenhuma saída Trace é gerada.
Constante Descrição
Constante Descrição
vbNullString Não é igual a uma cadeia de caracteres de comprimento zero (""); usado para
chamar procedimentos externos.
vbObjectError Número de erro. Os números de erro definidos pelo usuário devem ser maiores
que esse valor. Por exemplo:
Enumerações
A tabela a seguir lista e descreve as enumerações fornecidas pelo Visual Basic.
Enumeração Descrição
DeleteDirectoryOption Especifica o que deve ser feito quando um diretório que deve ser
excluído contém arquivos ou diretórios.
UICancelOption Especifica o que deverá ser feito, se o usuário clicar em Cancelar durante
a operação.
Enumeração Descrição
Confira também
Referência da linguagem Visual Basic
Visão geral de constantes
Visão geral de enumerações
Resumo do tipo de dados (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
precisão
dupla) 4,94065645841246544E-324 a
1,79769313486231570E+308 † para valores
positivos
8 bytes em
plataforma de 64
bits
flutuante de
precisão 1,401298E-45 a 3.4028235E+38 † para
simples) valores positivos
†
Na notação científica, "E" refere-se a uma potência de 10. Portanto, 3.56E+2 significa
3.56 x 102 ou 356 e 3.56E-2 significa 3.56 /102 ou 0,0356.
7 Observação
Nas cadeias de caracteres que contêm texto, use a função StrConv para converter
de um formato de texto para outro.
Consumo de memória
Quando você declara um tipo de dados elementar, não é garantido supor que seu
consumo de memória seja o mesmo da sua alocação de armazenamento nominal. Isso
ocorre devido às seguintes considerações:
Layout de armazenamento. Você não pode supor com segurança que a ordem de
armazenamento na memória seja a mesma que sua ordem de declaração. Você
não pode sequer fazer suposições sobre o alinhamento de bytes, como um limite
de 2 bytes ou 4 bytes. Se você estiver definindo uma classe ou estrutura e precisar
controlar o layout de armazenamento de seus membros, poderá aplicar o atributo
StructLayoutAttribute à classe ou à estrutura.
Confira também
StrConv
StructLayoutAttribute
Funções de conversão do tipo
Resumo da Conversão
Caracteres de tipo
Uso eficiente de tipos de dados
Tipo de dados booliano (Visual Basic)
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Contém valores que podem ser apenas True ou False . As palavras-chave True e False
correspondem aos dois estados de Boolean variáveis.
Comentários
Use o tipo de dados booliano (Visual Basic) para conter valores de dois estados, como
verdadeiro/falso, sim/não, ativar/desativar.
Os valores Boolean não são armazenados como números e os valores armazenados não
devem ser equivalentes a números. Você nunca deve gravar um código que dependa de
valores numéricos equivalentes para True e False . Sempre que possível, você deve
restringir o uso de variáveis Boolean aos valores lógicos para os quais elas são
projetadas.
Conversões de tipo
Quando o Visual Basic converte valores de tipo de dados numéricos em Boolean , 0 se
torna False e todos os outros valores se tornam True . Quando o Visual Basic converte
valores Boolean em tipos numéricos, False se torna 0 e True se torna -1.
Dicas de programação
Números Negativos. Boolean não é um tipo numérico e não pode representar um
valor negativo. De qualquer forma, você não deve usar Boolean para manter
valores numéricos.
Caracteres de tipo. Boolean não tem nenhum caractere de tipo literal nem
caractere de identificação de tipo.
Exemplo
No exemplo a seguir, runningVB é uma variável Boolean , que armazena uma
configuração simples de sim/não.
VB
runningVB = True
End If
Confira também
System.Boolean
Data Types
Funções de conversão do tipo
Resumo da Conversão
Uso eficiente de tipos de dados
Solução de problemas de tipos de dados
Função CType
Tipo de dados byte (Visual Basic)
Artigo • 21/02/2023 • 3 minutos para o fim da leitura
Armazena inteiros de 8 bits (1 bytes) sem sinal que variam em valor de 0 a 255.
Comentários
Use o tipo de dados Byte para conter dados binários.
Atribuições literais
Você pode declarar e inicializar uma variável Byte atribuindo a ela um literal decimal,
hexadecimal, octal ou (a partir do Visual Basic 2017) binário. Se o literal integral estiver
fora do intervalo de Byte (ou seja, se for menor que Byte.MinValue ou maior que
Byte.MaxValue), ocorrerá um erro de compilação.
VB
Console.WriteLine(byteValue1)
Console.WriteLine(byteValue2)
Console.WriteLine(byteValue3)
' 201
' 201
' 201
7 Observação
Use o prefixo &h ou &H para indicar um literal hexadecimal, &b ou &B para indicar
um literal binário e &o ou &O para indicar um literal octal. Literais decimais não têm
nenhum prefixo.
A partir do Visual Basic 2017, você também pode usar o caractere de sublinhado, _ ,
como separador de dígitos para melhorar a legibilidade, como no exemplo a seguir.
VB
Console.WriteLine(byteValue3)
' 201
A partir do Visual Basic 15.5, você também pode usar o caractere de sublinhado ( _ )
como separador à esquerda entre o prefixo e os dígitos hexadecimais, binários ou
octais. Por exemplo:
VB
Para usar o caractere de sublinhado como separador à esquerda, você deve adicionar o
seguinte elemento ao arquivo de projeto do Visual Basic (*.vbproj):
XML
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obter mais informações, consulte Selecionar a versão da linguagem Visual Basic.
Dicas de programação
Números Negativos. Como Byte é um tipo sem sinal, não pode representar um
número negativo. Se você usar o operador unário menos ( - ) em uma expressão
avaliada como tipo Byte , o Visual Basic primeiro converterá a expressão em Short .
Caracteres de tipo. Byte não tem nenhum caractere de tipo literal nem caractere
de identificação de tipo.
Exemplo
No exemplo a seguir, b é uma variável Byte . As instruções demonstram o intervalo da
variável e a aplicação de operadores de turno de bit para ela.
VB
Dim b As Byte
b = 30
' The following statement causes an error because the value is too large.
'b = 256
' The following statement causes an error because the value is negative.
'b = -5
b = CByte(5.7)
Console.WriteLine(b)
' Bit shift to the right divides the number in half. In this
Console.WriteLine(b)
' Now shift back to the original position, and then one more bit
' to the left. Each shift to the left doubles the value. In this
b <<= 2
Console.WriteLine(b)
Confira também
System.Byte
Data Types
Funções de conversão do tipo
Resumo da Conversão
Uso eficiente de tipos de dados
Tipo de dados Char (Visual Basic)
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Contém pontos de código sem sinal de 16 bits (2 bytes) que variam no valor de 0 a
65535. Cada ponto de código, ou código de caractere, representa um caractere Unicode
único.
Comentários
Use o tipo de dados Char quando precisar manter apenas um caractere único e não
precisar da sobrecarga de String . Em alguns casos, você pode usar Char() , uma matriz
de elementos Char , para conter vários caracteres.
Caracteres Unicode
Os primeiros 128 pontos de código (0 a 127) do Unicode correspondem às letras e
símbolos em um teclado padrão dos EUA. Esses primeiros 128 pontos de código são os
mesmos definidos pelo conjunto de caracteres ASCII. Os segundos 128 pontos de
código (128-255) representam caracteres especiais, como letras alfabéticas de base
latina, acentos, símbolos de moeda e frações. A Unicode usa os pontos de código
restantes (256-65535) para uma ampla variedade de símbolos, incluindo caracteres
textuais mundiais, diacríticos e símbolos matemáticos e técnicos.
Você pode usar métodos como IsDigit e IsPunctuation em uma variável Char para
determinar a classificação Unicode.
Conversões de tipo
O Visual Basic não converte diretamente entre Char e os tipos numéricos. Você pode
usar a função Asc ou AscW para converter um valor Char em Integer , que representa o
ponto de código. Você pode usar a função Chr ou ChrW para converter um valor
Integer em Char , que tem esse ponto de código.
Se a opção de verificação de tipo (a Instrução Option Strict) estiver ativada, você deverá
acrescentar o caractere de tipo literal a um literal de cadeia de caracteres único para
identificá-lo como o tipo de dados Char . O exemplo a seguir ilustra essa situação. A
primeira atribuição à variável charVar gera um erro de compilador BC30512 porque
Option Strict está ativado. O segundo compila com sucesso porque o caractere de
VB
Option Strict On
Module CharType
charVar = "Z"
charVar = "Z"c
End Sub
End Module
Dicas de programação
Números Negativos. Char é um tipo sem sinal e não pode representar um valor
negativo. De qualquer forma, você não deve usar Char para manter valores
numéricos.
Ampliação. O tipo de dados Char é ampliado para String . Isso significa que você
pode converter Char para String e não encontrará System.OverflowException.
Comentários
Use o tipo de dados Date para conter valores de data, de hora ou de data e hora.
Requisitos de formato
Você deve colocar um literal Date dentro de sinais numéricos ( # # ). Você deve
especificar o valor de data no formato d/M/aaaa, por exemplo #5/31/1993# , ou
dd/MM/aaaa, por exemplo #1993-5-31# . Você pode usar barras ao especificar o ano
primeiro. Esse requisito é independente das configurações de formato de data e hora
do computador e da localidade.
O motivo dessa restrição é que o significado do código nunca deve mudar dependendo
da localidade em que o aplicativo está em execução. Suponha que você codifique um
literal Date de #3/4/1998# pretenda que isso signifique 4 de março de 1998. Em uma
localidade que usa mm/dd/aaaa, 3/4/1998 compila conforme você deseja. Mas suponha
que você implante o aplicativo em muitos países/regiões. Em uma localidade que usa
dd/mm/aaaa, o literal codificado seria compilado para 3 de abril de 1998. Em uma
localidade que usa aaaa/mm/dd, o literal seria inválido (abril de 1998, 0003) e causaria
um erro do compilador.
Soluções Alternativas
Para converter um literal Date no formato da localidade ou em um formato
personalizado, forneça o literal para a função Format, especificando um formato de data
predefinido ou definido pelo usuário. O exemplo a seguir demonstra isso.
VB
VB
Formato de hora
Você pode especificar o valor de tempo no formato de 12 horas ou 24 horas, por
exemplo #1:15:30 PM# ou #13:15:30# . No entanto, se você não especificar os minutos
ou os segundos, deverá especificar AM ou PM.
Conversões de tipo
Se você converter um valor Date para o tipo String , o Visual Basic renderizará a data
de acordo com o formato de data curto especificado pela localidade em tempo de
execução e renderizará a hora de acordo com o formato de hora (12 horas ou 24 horas)
especificado pela localidade em tempo de execução.
Dicas de programação
Considerações sobre interoperabilidade. Se você estiver estabelecendo interface
com componentes não gravados para o .NET Framework, por exemplo, objetos de
Automação ou COM, tenha em mente que os tipos de data/hora em outros
ambientes não são compatíveis com o tipo Date do Visual Basic. Se você estiver
passando um argumento de data/hora para tal componente, declare-o como
Double em vez de Date no novo código Visual Basic e use os métodos de
Caracteres de tipo. Date não tem nenhum caractere de tipo literal nem caractere
de identificação de tipo. No entanto, o compilador trata literais entre sinais
numéricos ( # # ) como Date .
Exemplo
Uma variável ou constante do tipo de dados Date contém a data e a hora. O exemplo a
seguir ilustra essa situação.
VB
Confira também
System.DateTime
Data Types
Cadeias de caracteres de formato de data e hora padrão
Cadeias de caracteres de formato de data e hora personalizado
Funções de conversão do tipo
Resumo da Conversão
Uso eficiente de tipos de dados
Tipo de dados decimal (Visual Basic)
Artigo • 21/02/2023 • 3 minutos para o fim da leitura
Mantém valores de 128 bits (16 bytes) assinados que representam números inteiros de
96 bits (12 bytes) elevados a uma potência variável de 10. O fator de colocação em
escala especifica o número de dígitos à direita do ponto decimal; varia de 0 a 28. Com
uma escala de 0 (sem casas decimais), o maior valor possível é
+/-79.228.162.514.264.337.593,543.950.335
(+/-7.9228162514264337593543950335E+28). Com 28 casas decimais, o maior valor é
+/-7,9228162514264337593543950335, e o menor valor diferente de zero é
+/-0,0000000000000000000000000001 (+/-1E-28).
Comentários
O tipo de dados Decimal fornece o maior número de dígitos significativos para um
número. Ele suporta até 29 dígitos significativos e pode representar valores superiores a
7,9228 x 10^28. Ele é particularmente adequado para cálculos, como financeiros, que
exigem um grande número de dígitos, mas não toleram erros de arredondamento.
Dicas de programação
Precisão. Decimal não é um tipo de dados de ponto flutuante. A estrutura Decimal
contém um valor inteiro binário, junto com um bit de sinal e um fator de escala
inteiro que especifica qual parte do valor é uma fração decimal. Por isso, os
números Decimal têm uma representação mais precisa na memória do que tipos
de ponto flutuante ( Single e Double ).
Zeros à direita. O Visual Basic não armazena zeros à direita em um literal Decimal .
No entanto, uma variável Decimal preserva todos os zeros à direita adquiridos
computacionalmente. O exemplo a seguir ilustra essa situação.
VB
d1 = 2.375D
d2 = 1.625D
d3 = d1 + d2
d4 = 4.000D
MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) &
Console
Intervalo
Talvez seja necessário usar o caractere do tipo D para atribuir um valor grande a uma
variável ou constante Decimal . Esse requisito ocorre porque o compilador interpreta um
literal como Long , a menos que um caractere de tipo literal siga o literal, como mostra o
exemplo a seguir.
VB
A declaração de bigDec1 não produz um estouro porque o valor atribuído a ela está
dentro do intervalo de Long . O valor Long pode ser atribuído à variável Decimal .
A declaração para bigDec2 gera um erro de estouro porque o valor atribuído a ela é
muito grande para Long . Como o literal numérico não pode ser interpretado primeiro
como um Long , ele não pode ser atribuído à variável Decimal .
Para bigDec3 , o caractere de tipo literal D resolve o problema forçando o compilador a
interpretar o literal como Decimal em vez de Long .
Confira também
System.Decimal
Decimal
Math.Round
Data Types
Tipo de Dados Simples
Tipo de Dados Duplo
Funções de conversão do tipo
Resumo da Conversão
Uso eficiente de tipos de dados
Tipo de dados double (Visual Basic)
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Contém números de ponto flutuante de precisão dupla IEEE de 64 bits (8 bytes) com
sinal que variam em valor de -1,79769313486231570E+308 a -4,94065645841246544E-
324 para valores negativos e de 4,94065645841246544E-324 a
1,79769313486231570E+308 para valores positivos. Os números de precisão dupla
armazenam uma aproximação de um número real.
Comentários
O tipo de dados Double fornece as maiores e menores magnitudes possíveis para um
número.
Dicas de programação
Precisão. Quando você trabalha com números de ponto flutuante, tenha em
mente que eles nem sempre têm uma representação precisa na memória. Isso
pode levar a resultados inesperados de determinadas operações, como a
comparação de valores e o operador Mod . Para obter mais informações, consulte
Tipos de dados de solução de problemas.
VB
' Visual Basic expands the 4 in the statement Dim dub As Double = 4R to
4.0:
VB
Dim num# = 3
Confira também
System.Double
Data Types
Tipo de Dados Decimal
Tipo de Dados Simples
Funções de conversão do tipo
Resumo da Conversão
Uso eficiente de tipos de dados
Solução de problemas de tipos de dados
Caracteres de tipo
Tipo de dados Integer (Visual Basic)
Artigo • 21/02/2023 • 3 minutos para o fim da leitura
Armazena inteiros de 32 bits (4 bytes) com sinal que variam em valor de -2.147.483.648
a 2.147.483.647.
Comentários
O tipo de dados Integer proporciona um desempenho ideal em um processador de 32
bits. Os outros tipos integrais são mais lentos para carregar e armazenar na memória.
Atribuições literais
Você pode declarar e inicializar uma variável Integer atribuindo a ela um literal decimal,
hexadecimal, octal ou (a partir do Visual Basic 2017) binário. Se o literal inteiro estiver
fora do intervalo de Integer (ou seja, se for menor que Int32.MinValue ou maior que
Int32.MaxValue, ocorrerá um erro de compilação.
VB
Console.WriteLine(intValue1)
Console.WriteLine(intValue2)
Console.WriteLine(intValue3)
' 90946
' 90946
' 90946
7 Observação
Use o prefixo &h ou &H para indicar um literal hexadecimal, &b ou &B para indicar
um literal binário e &o ou &O para indicar um literal octal. Literais decimais não têm
nenhum prefixo.
A partir do Visual Basic 2017, você também pode usar o caractere de sublinhado, _ ,
como separador de dígitos para melhorar a legibilidade, como no exemplo a seguir.
VB
Console.WriteLine(intValue1)
Console.WriteLine(intValue2)
Console.WriteLine(intValue3)
' 90946
' 90946
' 90946
A partir do Visual Basic 15.5, você também pode usar o caractere de sublinhado ( _ )
como separador à esquerda entre o prefixo e os dígitos hexadecimais, binários ou
octais. Por exemplo:
VB
Para usar o caractere de sublinhado como separador à esquerda, você deve adicionar o
seguinte elemento ao arquivo de projeto do Visual Basic (*.vbproj):
XML
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obter mais informações, consulte Selecionar a versão da linguagem Visual Basic.
Literais numéricos também podem incluir o I caractere de tipo para indicar o tipo de
dados Integer , como mostra o exemplo a seguir.
VB
Dicas de programação
Considerações sobre interoperabilidade. Se você estiver fazendo interface com
componentes não escritos para o .NET Framework, como objetos Automation ou
COM, lembre-se de que Integer possui uma largura de dados diferente (16 bits)
em outros ambientes. Se você estiver passando um argumento de 16 bits para
esse componente, declare-o como Short em vez de Integer no seu novo código
do Visual Basic.
Intervalo
Se você tentar definir uma variável de um tipo integral para um número fora do
intervalo para esse tipo, ocorrerá um erro. Se você tentar defini-lo como uma fração, o
número será arredondado para cima ou para baixo para o valor inteiro mais próximo. Se
o número for igualmente próximo de dois valores inteiros, o valor será arredondado
para o inteiro par mais próximo. Esse comportamento minimiza erros de
arredondamento gerados ao arredondar consistentemente um valor de ponto médio
em uma única direção. O código a seguir mostra exemplos de arredondamento.
VB
Dim k As Integer
' The following statement causes an error because the value is too large.
k = 2147483648
k = 5.9
k = 4.5
' Note, Visual Basic uses banker’s rounding (toward nearest even number)
k = 5.5
Confira também
System.Int32
Data Types
Tipo de Dados Long
Tipo de Dados Short
Funções de conversão do tipo
Resumo da Conversão
Uso eficiente de tipos de dados
Tipo de dados Long (Visual Basic)
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Comentários
Use o tipo de dados Long para conter números inteiros que são muito grandes para
caber no tipo de dados Integer .
Atribuições literais
Você pode declarar e inicializar uma variável Long atribuindo a ela um literal decimal,
hexadecimal, octal ou (a partir do Visual Basic 2017) binário. Se o literal inteiro estiver
fora do intervalo de Long (ou seja, se for menor que Int64.MinValue ou maior que
Int64.MaxValue, ocorrerá um erro de compilação.
VB
Console.WriteLine(longValue1)
Console.WriteLine(longValue2)
Console.WriteLine(longValue3)
' 4294967296
' 4294967296
' 4294967296
7 Observação
Use o prefixo &h ou &H para indicar um literal hexadecimal, &b ou &B para indicar
um literal binário e &o ou &O para indicar um literal octal. Literais decimais não têm
nenhum prefixo.
A partir do Visual Basic 2017, você também pode usar o caractere de sublinhado, _ ,
como separador de dígitos para melhorar a legibilidade, como no exemplo a seguir.
VB
Console.WriteLine(longValue1)
Console.WriteLine(longValue2)
Console.WriteLine(longValue3)
' 4294967296
' 4294967296
' 4294967296
A partir do Visual Basic 15.5, você também pode usar o caractere de sublinhado ( _ )
como separador à esquerda entre o prefixo e os dígitos hexadecimais, binários ou
octais. Por exemplo:
VB
Para usar o caractere de sublinhado como separador à esquerda, você deve adicionar o
seguinte elemento ao arquivo de projeto do Visual Basic (*.vbproj):
XML
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obter mais informações, consulte Selecionar a versão da linguagem Visual Basic.
Literais numéricos também podem incluir o L caractere de tipo para indicar o tipo de
dados Long , como mostra o exemplo a seguir.
VB
Dicas de programação
Considerações sobre interoperabilidade. Se você estiver fazendo interface com
componentes não escritos para o .NET Framework, como objetos COM ou
Automação, lembre-se de que Long possui uma largura de dados diferente (32
bits) em outros ambientes. Se você estiver passando um argumento de 32 bits
para esse componente, declare-o como Integer em vez de Long no seu novo
código do Visual Basic.
Confira também
Int64
Data Types
Tipo de Dados Integer
Tipo de Dados Short
Funções de conversão do tipo
Resumo da Conversão
Uso eficiente de tipos de dados
Tipo de dados Object
Artigo • 21/02/2023 • 3 minutos para o fim da leitura
Contém endereços que se referem a objetos. Você pode atribuir qualquer tipo de
referência (cadeia de caracteres, matriz, classe ou interface) a uma variável Object . Uma
variável Object também pode se referir a dados de qualquer tipo de valor (numérico,
Boolean , Char , Date , estrutura ou enumeração).
Comentários
O tipo de dados Object pode apontar para dados de qualquer tipo de dados, incluindo
qualquer instância de objeto que seu aplicativo reconheça. Use Object quando você
não souber em tempo de compilação para qual tipo de dados a variável pode apontar.
Tipos de dados
Você pode atribuir uma variável, constante ou expressão de qualquer tipo de dados a
uma variável Object . Para determinar o tipo de dados ao qual uma variável Object se
refere atualmente, você pode usar o método GetTypeCode da classe System.Type. O
exemplo a seguir ilustra essa situação.
VB
datTyp = Type.GetTypeCode(myObject.GetType())
Armazenamento
Seja qual for o tipo de dados ao qual ela se refere, a variável Object não contém o valor
de dados em si, mas sim um ponteiro para o valor. Ela sempre usa quatro bytes na
memória do computador, mas isso não inclui o armazenamento dos dados que
representam o valor da variável. Devido ao código que usa o ponteiro para localizar os
dados, variáveis Object que contêm tipos de valor são ligeiramente mais lentas de
acessar do que as variáveis com tipos explícitos.
Dicas de programação
Considerações sobre interoperabilidade. Se você estiver estabelecendo interface
com componentes não gravados para o .NET Framework, por exemplo, automação
ou objetos COM, tenha em mente que os tipos de ponteiro em outros ambientes
não são compatíveis com o tipo Object do Visual Basic.
Desempenho. Uma variável que você declara com o tipo Object é flexível o
suficiente para conter uma referência a qualquer objeto. No entanto, quando você
invoca um método ou propriedade em uma variável como essa, sempre acarreta
associação tardia (em tempo de execução). Para forçar a associação antecipada (em
tempo de compilação) e um melhor desempenho, declare a variável com um nome
de classe específico ou converta-a para o tipo de dados específico.
Ao declarar uma variável de objeto, tente usar um tipo de classe específico, por
exemplo OperatingSystem, em vez do tipo generalizado Object . Você também
deve usar a classe mais específica disponível, como TextBox em vez de Control,
para que possa acessar as propriedades e métodos. Normalmente, você pode usar
a lista Classes no Pesquisador de Objetos para localizar nomes de classe
disponíveis.
No entanto, quando você converte entre tipos de valor e Object , o Visual Basic
executa operações chamadas boxing e unboxing, o que tornará a execução mais
lenta.
Caracteres de tipo. Object não tem nenhum caractere de tipo literal nem
caractere de identificação de tipo.
Exemplo
O exemplo a seguir ilustra uma variável Object apontando para uma instância de
objeto.
VB
objDb = myCollection.Item(1)
Confira também
Object
Data Types
Funções de conversão do tipo
Resumo da Conversão
Uso eficiente de tipos de dados
Como determinar se dois objetos estão relacionados
Como determinar se dois objetos são idênticos
Tipo de dados SByte (Visual Basic)
Artigo • 28/11/2022 • 3 minutos para o fim da leitura
Armazena inteiros de 8 bits (1 byte) com sinal que variam de -128 a 127.
Comentários
Use o tipo de dados SByte para conter valores inteiros que não exigem a largura
completa dos dados de Integer ou mesmo a metade da largura de dados de Short . Em
alguns casos, o Common Language Runtime pode ser capaz de agrupar as variáveis
SByte e economizar o consumo de memória.
Atribuições literais
Você pode declarar e inicializar uma variável SByte atribuindo a ela um literal decimal,
hexadecimal, octal ou (a partir do Visual Basic 2017) binário.
VB
Console.WriteLine(sbyteValue1)
Console.WriteLine(sbyteValue4)
Console.WriteLine(sbyteValue5)
' -102
' -102
' -102
7 Observação
Use o prefixo &h ou &H para indicar um literal hexadecimal, &b ou &B para indicar
um literal binário e &o ou &O para indicar um literal octal. Literais decimais não têm
nenhum prefixo.
A partir do Visual Basic 2017, você também pode usar o caractere de sublinhado, _ ,
como separador de dígitos para melhorar a legibilidade, como no exemplo a seguir.
VB
Console.WriteLine(sbyteValue3)
' -102
A partir do Visual Basic 15.5, você também pode usar o caractere de sublinhado ( _ )
como separador à esquerda entre o prefixo e os dígitos hexadecimais, binários ou
octais. Por exemplo:
VB
Para usar o caractere de sublinhado como separador à esquerda, você deve adicionar o
seguinte elemento ao arquivo de projeto do Visual Basic (*.vbproj):
XML
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obter mais informações, consulte Selecionar a versão da linguagem Visual Basic.
Se o literal inteiro estiver fora do intervalo de SByte (ou seja, se for menor que
SByte.MinValue ou maior que SByte.MaxValue, ocorrerá um erro de compilação. Quando
um literal inteiro não tem sufixo, um inteiro é inferido. Se o literal inteiro estiver fora do
intervalo do tipo Integer , um Long será inferido. Isso significa que, nos exemplos
anteriores, os literais numéricos 0x9A e 0b10011010 são interpretados como inteiros com
sinal de 32 bits com um valor de 156, que excede SByte.MaxValue. Para compilar com
êxito um código como este que atribui um inteiro não decimal a um SByte , você pode
fazer qualquer um dos seguintes procedimentos:
VB
Console.WriteLine(sByteValue1)
Console.WriteLine(sByteValue2)
Dicas de programação
Compatível com CLS. O tipo de dados SByte não faz parte da CLS (Common
Language Specification ), portanto, o código compatível com CLS não pode
consumir um componente que o utilize.
Caracteres de tipo. SByte não tem nenhum caractere de tipo literal nem caractere
de identificação de tipo.
Confira também
System.SByte
Data Types
Funções de conversão do tipo
Resumo da Conversão
Tipo de Dados Short
Tipo de Dados Integer
Tipo de Dados Long
Uso eficiente de tipos de dados
Tipo de dados Short (Visual Basic)
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Contém inteiros de 16 bits (2 bytes) com sinal, que variam de no valor de -32.768 a
32.767.
Comentários
Use o tipo de dados Short para conter valores inteiros que não exigem a largura
completa dos dados de Integer . Em alguns casos, o Common Language Runtime pode
agrupar as variáveis Short e economizar o consumo de memória.
Atribuições literais
Você pode declarar e inicializar uma variável Short atribuindo a ela um literal decimal,
hexadecimal, octal ou (a partir do Visual Basic 2017) binário. Se o literal inteiro estiver
fora do intervalo de Short (ou seja, se for menor que Int16.MinValue ou maior que
Int16.MaxValue, ocorrerá um erro de compilação.
VB
Console.WriteLine(shortValue1)
Console.WriteLine(shortValue2)
Console.WriteLine(shortValue3)
' 1034
' 1034
' 1034
7 Observação
Use o prefixo &h ou &H para indicar um literal hexadecimal, &b ou &B para indicar
um literal binário e &o ou &O para indicar um literal octal. Literais decimais não têm
nenhum prefixo.
A partir do Visual Basic 2017, você também pode usar o caractere de sublinhado, _ ,
como separador de dígitos para melhorar a legibilidade, como no exemplo a seguir.
VB
Console.WriteLine(shortValue1)
Console.WriteLine(shortValue3)
' 1034
' 1034
A partir do Visual Basic 15.5, você também pode usar o caractere de sublinhado ( _ )
como separador à esquerda entre o prefixo e os dígitos hexadecimais, binários ou
octais. Por exemplo:
VB
Para usar o caractere de sublinhado como separador à esquerda, você deve adicionar o
seguinte elemento ao arquivo de projeto do Visual Basic (*.vbproj):
XML
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obter mais informações, consulte Selecionar a versão da linguagem Visual Basic.
Literais numéricos também podem incluir o S caractere de tipo para indicar o tipo de
dados Short , como mostra o exemplo a seguir.
VB
Dicas de programação
Ampliação. O tipo de dados Short é ampliado para Integer , Long , Decimal ,
Single ou Double . Isso significa que você pode converter Short em qualquer um
Confira também
System.Int16
Data Types
Funções de conversão do tipo
Resumo da Conversão
Tipo de Dados Integer
Tipo de Dados Long
Uso eficiente de tipos de dados
Tipo de dados único (Visual Basic)
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Contém números de ponto flutuante de precisão simples com sinal do IEEE de 32 bits (4
bytes) variando em valor de -3,4028235E+38 a -1,401298E-45 para valores negativos e
de 1,401298E-45 a 3,4028235E+38 para valores positivos. Os números de precisão
simples armazenam uma aproximação de um número real.
Comentários
Use o tipo de dados Single para conter valores de ponto flutuante que não exigem a
largura completa dos dados de Double . Em alguns casos, o Common Language Runtime
pode ser capaz de agrupar as variáveis Single e economizar o consumo de memória.
Dicas de programação
Precisão. Quando você trabalha com números de ponto flutuante, tenha em
mente que eles nem sempre têm uma representação precisa na memória. Isso
pode levar a resultados inesperados de determinadas operações, como a
comparação de valores e o operador Mod . Para obter mais informações, consulte
Tipos de dados de solução de problemas.
Ampliação. O tipo de dados Single é ampliado para Double . Isso significa que
você pode converter Single para Double sem que ocorra um erro
System.OverflowException.
Contém sequências de pontos de código sem sinal de 16 bits (2 bytes) que variam no
valor de 0 a 65535. Cada ponto de código, ou código de caractere, representa um
caractere Unicode único. Uma cadeia de caracteres pode conter de 0 a
aproximadamente dois bilhões (2 ^ 31) caracteres Unicode.
Comentários
Use o tipo de dados String para armazenar vários caracteres sem a sobrecarga de
gerenciamento de matriz de Char() , uma matriz de elementos Char .
O valor padrão de String é Nothing (uma referência nula). Observe que isso não é o
mesmo que a cadeia de caracteres vazia (valor "" ).
Caracteres Unicode
Os primeiros 128 pontos de código (0 a 127) do Unicode correspondem às letras e
símbolos em um teclado padrão dos EUA. Esses primeiros 128 pontos de código são os
mesmos definidos pelo conjunto de caracteres ASCII. Os segundos 128 pontos de
código (128-255) representam caracteres especiais, como letras alfabéticas de base
latina, acentos, símbolos de moeda e frações. O Unicode usa os pontos de código
restantes (256-65535) para uma ampla variedade de símbolos. Isso inclui caracteres
textuais, diacríticos e símbolos matemáticos e técnicos em todo o mundo.
Requisitos de formato
Você deve colocar um literal String entre aspas ( " " ). Se você precisar incluir uma aspa
como um dos caracteres na cadeia de caracteres, use duas aspas contíguas ( "" ). O
exemplo a seguir ilustra essa situação.
VB
Dim j As String = "Joe said ""Hello"" to me."
MsgBox(j)
MsgBox("Joe said " & """" & h & """" & " to me.")
Observe que as aspas contíguas que representam uma aspa na cadeia de caracteres são
independentes das aspas que começam e terminam o literal String .
Você pode manipular o conteúdo de uma variável String usando uma variedade de
funções de cadeia de caracteres. O exemplo a seguir ilustra a função Left
VB
S = Microsoft.VisualBasic.Left(S, 4)
Uma cadeia de caracteres criada por outro componente pode ser preenchida com
espaços à esquerda ou à direita. Se você receber essa cadeia de caracteres, poderá usar
as funções Trim, LTrim e RTrim para remover esses espaços.
Dicas de programação
Números Negativos. Lembre-se de que os caracteres mantidos por String não
têm sinal e não podem representar valores negativos. De qualquer forma, você
não deve usar String para manter valores numéricos.
Considerações sobre interoperabilidade. Se você estiver fazendo interface com
componentes não escritos para o .NET Framework, por exemplo, objetos de
Automação ou COM, lembre-se de que os caracteres de sua cadeia têm uma
largura de dados diferente (8 bits) em outros ambientes. Se você estiver passando
um argumento de cadeia de caracteres de 8 bits para tal componente, declare-o
como Byte() , uma matriz de elementos Byte , em vez de String no novo código
do Visual Basic.
Confira também
System.String
Data Types
Tipo de Dados de Caractere
Funções de conversão do tipo
Resumo da Conversão
Como: Chamar uma função do Windows que use tipos não assinados
Uso eficiente de tipos de dados
tipo de dados UInteger
Artigo • 28/11/2022 • 3 minutos para o fim da leitura
Contém inteiros sem sinal de 32 bits (4 bytes) variando no valor de zero a 4.294.967.295.
Comentários
O tipo de dados UInteger fornece o maior valor não assinado na largura de dados mais
eficiente.
Atribuições
Você pode declarar e inicializar uma variável UInteger atribuindo a ela um literal
decimal, hexadecimal, octal ou (a partir do Visual Basic 2017) binário. Se o literal inteiro
estiver fora do intervalo de UInteger (ou seja, se for menor que UInt32.MinValue ou
maior que UInt32.MaxValue, ocorrerá um erro de compilação.
VB
Console.WriteLine(uintValue1)
Console.WriteLine(uintValue2)
Console.WriteLine(uintValue3)
' 3000000000
' 3000000000
' 3000000000
7 Observação
Use o prefixo &h ou &H para indicar um literal hexadecimal, &b ou &B para indicar
um literal binário e &o ou &O para indicar um literal octal. Literais decimais não têm
nenhum prefixo.
A partir do Visual Basic 2017, você também pode usar o caractere de sublinhado, _ ,
como separador de dígitos para melhorar a legibilidade, como no exemplo a seguir.
VB
Console.WriteLine(uintValue1)
Console.WriteLine(uintValue2)
Console.WriteLine(uintValue3)
' 3000000000
' 3000000000
' 3000000000
A partir do Visual Basic 15.5, você também pode usar o caractere de sublinhado ( _ )
como separador à esquerda entre o prefixo e os dígitos hexadecimais, binários ou
octais. Por exemplo:
VB
Para usar o caractere de sublinhado como separador à esquerda, você deve adicionar o
seguinte elemento ao arquivo de projeto do Visual Basic (*.vbproj):
XML
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obter mais informações, consulte Selecionar a versão da linguagem Visual Basic.
Literais numéricos também podem incluir UI ou ui caractere do tipo para indicar o tipo
de dados UInteger , como mostra o exemplo a seguir.
VB
Dicas de programação
Os tipos de dados UInteger e Integer fornecem desempenho ideal em um processador
de 32 bits, pois os tipos inteiros menores ( UShort , Short , Byte e SByte ), embora usem
menos bits, levam mais tempo para carregar, armazenar e buscar.
Números Negativos. Como UInteger é um tipo sem sinal, não pode representar
um número negativo. Se você usar o operador unário menos ( - ) em uma
expressão avaliada como tipo UInteger , o Visual Basic primeiro converterá a
expressão em Long .
Compatível com CLS. O tipo de dados UInteger não faz parte da CLS ( Common
Language Specification ), portanto, o código em conformidade com CLS não
pode consumir um componente que o utilize.
Confira também
UInt32
Data Types
Funções de conversão do tipo
Resumo da Conversão
Como: Chamar uma função do Windows que use tipos não assinados
Uso eficiente de tipos de dados
Tipo de Dados ULong (Visual Basic)
Artigo • 28/11/2022 • 3 minutos para o fim da leitura
Comentários
Use o tipo de dados ULong para conter dados binários muito grandes para UInteger ou
os maiores valores inteiros sem sinal possíveis.
Atribuições literais
Você pode declarar e inicializar uma variável ULong atribuindo a ela um literal decimal,
hexadecimal, octal ou (a partir do Visual Basic 2017) binário. Se o literal inteiro estiver
fora do intervalo de ULong (ou seja, se for menor que UInt64.MinValue ou maior que
UInt64.MaxValue, ocorrerá um erro de compilação.
VB
Console.WriteLine(ulongValue1)
Console.WriteLine(ulongValue2)
Console.WriteLine(ulongValue3)
' 7934076125
' 7934076125
' 7934076125
7 Observação
Use o prefixo &h ou &H para indicar um literal hexadecimal, &b ou &B para indicar
um literal binário e &o ou &O para indicar um literal octal. Literais decimais não têm
nenhum prefixo.
A partir do Visual Basic 2017, você também pode usar o caractere de sublinhado, _ ,
como separador de dígitos para melhorar a legibilidade, como no exemplo a seguir.
VB
Console.WriteLine(longValue1)
Console.WriteLine(longValue2)
Console.WriteLine(longValue3)
' 4294967296
' 4294967296
' 4294967296
A partir do Visual Basic 15.5, você também pode usar o caractere de sublinhado ( _ )
como separador à esquerda entre o prefixo e os dígitos hexadecimais, binários ou
octais. Por exemplo:
VB
Para usar o caractere de sublinhado como separador à esquerda, você deve adicionar o
seguinte elemento ao arquivo de projeto do Visual Basic (*.vbproj):
XML
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obter mais informações, consulte Selecionar a versão da linguagem Visual Basic.
Literais numéricos também podem incluir caractere do tipo UL ou ul para indicar o tipo
de dados ULong , como mostra o exemplo a seguir.
VB
Dicas de programação
Números Negativos. Como ULong é um tipo sem sinal, não pode representar um
número negativo. Se você usar o operador unário menos ( - ) em uma expressão
avaliada como tipo ULong , o Visual Basic primeiro converterá a expressão em
Decimal .
Compatível com CLS. O tipo de dados ULong não faz parte da CLS ( Common
Language Specification ), portanto, o código em conformidade com CLS não
pode consumir um componente que o utilize.
Confira também
UInt64
Data Types
Funções de conversão do tipo
Resumo da Conversão
Como: Chamar uma função do Windows que use tipos não assinados
Uso eficiente de tipos de dados
Tipo de dados definido pelo usuário
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
As versões anteriores do Visual Basic dão suporte ao UDT (tipo definido pelo usuário). A
versão atual expande o UDT para uma estrutura. Uma estrutura é uma concatenação de
um ou mais membros de vários tipos de dados. O Visual Basic trata uma estrutura como
uma unidade única, embora você também possa acessar os respectivos membros
individualmente.
Comentários
Defina e use um tipo de dados de estrutura quando precisar combinar vários tipos de
dados em uma unidade única ou quando nenhum dos tipos de dados elementares
atender às necessidades.
Formato de declaração
Uma declaração de estrutura começa com a Instrução Structure e termina com a
instrução End Structure . A instrução Structure fornece o nome da estrutura, que
também é o identificador do tipo de dados que a estrutura está definindo. Outras partes
do código podem usar esse identificador para declarar variáveis, parâmetros e valores
de retorno de função como sendo do tipo de dados dessa estrutura.
Dicas de programação
Consumo de memória. Assim como acontece com todos os tipos de dados
compostos, você não pode calcular com segurança o consumo total de memória
de uma estrutura adicionando as alocações de armazenamento nominais de seus
membros. Além disso, você não pode supor com segurança que a ordem de
armazenamento na memória seja a mesma que sua ordem de declaração. Se você
precisar controlar o layout de armazenamento de uma estrutura, poderá aplicar o
atributo StructLayoutAttribute à instrução Structure .
Exemplo
O paradigma a seguir mostra o contorno da declaração de uma estrutura.
VB
' ...
End Structure
Confira também
ValueType
StructLayoutAttribute
Data Types
Funções de conversão do tipo
Resumo da Conversão
Instrução Structure
Widening
Narrowing
Estruturas
Uso eficiente de tipos de dados
Tipo de dados UShort (Visual Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Contém inteiros sem sinal de 16 bits (2 bytes) variando no valor de zero a 65.535.
Comentários
Use o tipo de dados UShort para conter dados binários muito grandes para Byte .
Atribuições de literal
Você pode declarar e inicializar uma variável UShort atribuindo a ela um literal decimal,
hexadecimal, octal ou (a partir do Visual Basic 2017) binário. Se o literal inteiro estiver
fora do intervalo de UShort (ou seja, se for menor que UInt16.MinValue ou maior que
UInt16.MaxValue, ocorrerá um erro de compilação.
VB
Console.WriteLine(ushortValue1)
Console.WriteLine(ushortValue2)
Console.WriteLine(ushortValue3)
' 65034
' 65034
' 65034
7 Observação
Use o prefixo &h ou &H para indicar um literal hexadecimal, &b ou &B para indicar
um literal binário e &o ou &O para indicar um literal octal. Literais decimais não têm
nenhum prefixo.
A partir do Visual Basic 2017, você também pode usar o caractere de sublinhado, _ ,
como separador de dígitos para melhorar a legibilidade, como no exemplo a seguir.
VB
Console.WriteLine(ushortValue1)
Console.WriteLine(ushortValue3)
' 65034
' 65034
A partir do Visual Basic 15.5, você também pode usar o caractere de sublinhado ( _ )
como separador à esquerda entre o prefixo e os dígitos hexadecimais, binários ou
octais. Por exemplo:
VB
Para usar o caractere de sublinhado como separador à esquerda, você deve adicionar o
seguinte elemento ao arquivo de projeto do Visual Basic (*.vbproj):
XML
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obter mais informações, consulte Selecionar a versão da linguagem Visual Basic.
Literais numéricos também podem incluir caractere do tipo US ou us para indicar o tipo
de dados UShort , como mostra o exemplo a seguir.
VB
Dicas de programação
Números Negativos. Como UShort é um tipo sem sinal, não pode representar um
número negativo. Se você usar o operador unário menos ( - ) em uma expressão
avaliada como tipo UShort , o Visual Basic primeiro converterá a expressão em
Integer .
Compatível com CLS. O tipo de dados UShort não faz parte da CLS (Common
Language Specification ), portanto, o código compatível com CLS não pode
consumir um componente que o utilize.
Confira também
UInt16
Data Types
Funções de conversão do tipo
Resumo da Conversão
Como: Chamar uma função do Windows que use tipos não assinados
Uso eficiente de tipos de dados
Diretiva #Const
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
constname
expression
Comentários
Constantes de compilador condicional são sempre privadas para o arquivo no qual elas
aparecem. Você não pode criar constantes de compilador público usando a diretiva
#Const ; é possível criá-las apenas na interface do usuário ou com a opção do
compilador /define .
Exemplo
Este exemplo usa a diretiva #Const .
VB
#Const MyLocation = "USA"
#Const CustomerNumber = 36
Confira também
-define (Visual Basic)
Diretivas #If...Then...#Else
Instrução Const
Compilação Condicional
Instrução If...Then...Else
Diretiva #ExternalSource
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
[ LogicalLine+ ]
#End ExternalSource
Partes
StringLiteral
IntLiteral
LogicalLine
#End ExternalSource
Comentários
Essa diretiva é usada apenas pelo compilador e pelo depurador.
As diretivas de origem externa não têm efeito na compilação e não podem ser
aninhadas. Elas destinam-se apenas ao uso interno pelo aplicativo.
Confira também
Compilação Condicional
Diretivas #If...Then...#Else
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
statements
[ statements ]
...
[ statements ] ]
[ #Else
[ statements ] ]
#End If
Partes
expression
statements
#End If
Comentários
Na superfície, o comportamento das diretivas #If...Then...#Else aparece o mesmo
que o das instruções If...Then...Else . No entanto, as diretivas #If...Then...#Else
avaliam o que é compilado pelo compilador, enquanto as instruções If...Then...Else
avaliam as condições em tempo de execução.
7 Observação
Não existe nenhuma forma de linha única das diretivas #If , #Else , #ElseIf e #End
If . Nenhum outro código pode aparecer na mesma linha que qualquer uma das
diretivas.
VB
<WebMethod()>
#Else
<WebMethod(CacheDuration:=86400)>
Public Function SomeFunction() As String
#End If
Exemplo
Este exemplo usa o constructo #If...Then...#Else para determinar se é necessário
compilar determinadas instruções.
VB
#Const CustomerNumber = 36
#Else
#End If
Confira também
Diretiva #Const
Instrução If...Then...Else
Compilação Condicional
System.Diagnostics.ConditionalAttribute
Diretiva #Region
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
#Region string_literal
#End Region
Partes
Termo Definição
string_literal Obrigatórios. Cadeia de caracteres (entre aspas duplas) que atua como o título
de uma região quando ela é recolhida. As regiões são recolhidas por padrão.
Comentários
Use a diretiva #Region para especificar um bloco de código que pode ser expandido ou
recolhido ao usar o recurso de estrutura de tópicos do IDE do Visual Studio. Você pode
colocar ou aninhar regiões em outras delas para agrupar regiões semelhantes.
Exemplo
Este exemplo usa a diretiva #Region .
VB
#Region "MathFunctions"
#End Region
Confira também
Diretivas #If...Then...#Else
Estrutura de tópicos
Como: Recolher e ocultar seções do código
Diretivas #Disable e #Enable (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
VB
#Disable Warning
#Enable Warning
VB
Console.WriteLine("testing")
End Function
Você também pode desabilitar e habilitar uma lista separada por vírgulas de códigos de
aviso.
Confira também
Referência da linguagem Visual Basic
Como suprimir os avisos da análise de código
Funções (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Os tópicos nesta seção contêm tabelas das funções de membro de tempo de execução
do Visual Basic.
7 Observação
Você também pode criar funções e chamá-las. Para obter mais informações,
consulte instrução Function e Como criar um procedimento que retorna um
valor.
Nesta seção
Funções de conversão
Funções Matemáticas
Função CType
Seções relacionadas
Referência da linguagem Visual Basic
Funções de conversão (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Asc
AscW
Função CBool
Função CByte
Função CChar
Função CDate
Função CDbl
Função CDec
Chr
ChrW
Função CInt
Função CLng
Função CObj
Função CSByte
Função CShort
Função CSng
Função CStr
Função CType
Função CUInt
Função CULng
Função CUShort
Format
Hex
Oct
Str
Val
Confira também
Funções de conversão do tipo
Convertendo tipos de dados
Funções matemáticas (Visual Basic)
Artigo • 22/02/2023 • 5 minutos para o fim da leitura
Comentários
A tabela a seguir lista métodos da classe System.Math. Você pode usá-los em um
programa do Visual Basic:
DivRem Retorna o quociente de dois inteiros com sinal de 32 bits ou 64 bits e também
retorna o restante em um parâmetro de saída.
IEEERemainder Retorna o resto que resulta da divisão de um número especificado por outro
número especificado.
Round Retorna um valor Decimal ou Double arredondado para o valor integral mais
próximo ou para um número especificado de dígitos fracionários.
A tabela a seguir lista os métodos da classe System.Math que não existem em .NET
Framework, mas são adicionados no .NET Standard ou no .NET Core:
Acosh Retorna o ângulo cujo cosseno hiperbólico é o Do .NET Core 2.1 e do .NET
número especificado. Standard 2.1 em diante
Asinh Retorna o ângulo cujo seno hiperbólico é o Do .NET Core 2.1 e do .NET
número especificado. Standard 2.1 em diante
Atanh Retorna o ângulo cuja tangente hiperbólica é Do .NET Core 2.1 e do .NET
o número especificado. Standard 2.1 em diante
BitDecrement Retorna o próximo valor menor que é Do SDK do .NET Core 3.0
comparado como menor que x . em diante
BitIncrement Retorna o próximo valor maior que é Do SDK do .NET Core 3.0
comparado como maior que x . em diante
Clamp Retorna value fixado no intervalo inclusivo de Do .NET Core 2.0 e do .NET
min e max . Standard 2.1 em diante
Método .NET Descrição Disponível em
MaxMagnitude Retorna a maior magnitude de dois números Do SDK do .NET Core 3.0
de ponto flutuante de precisão dupla. em diante
MinMagnitude Retorna a menor magnitude de dois números Do SDK do .NET Core 3.0
de ponto flutuante de precisão dupla. em diante
ScaleB Retorna x * 2^n computado com eficiência. Do SDK do .NET Core 3.0
em diante
Para usar essas funções sem qualificação, importe o namespace System.Math para o
projeto adicionando o seguinte código à parte superior do arquivo de origem:
VB
Imports System.Math
Exemplo – Abs
Este exemplo usa o método Abs da classe Math para calcular o valor absoluto de um
número.
VB
Console.WriteLine(x)
Console.WriteLine(y)
' 50.3
' 50.3
Exemplo – Atan
Este exemplo usa o método Atan da classe Math para calcular o valor de pi.
VB
End Function
7 Observação
Exemplo – Cos
Este exemplo usa o método Cos da classe Math para retornar o cosseno de um ângulo.
VB
End Function
Exemplo – Exp
Este exemplo usa o método Exp da classe Math para retornar o valor elevado a uma
potência.
VB
End Function
Exemplo – Log
Este exemplo usa o método Log da classe Math para retornar o logaritmo natural de um
número.
VB
End Function
Exemplo – Round
Este exemplo usa o método Round da classe Math para arredondar um número para o
inteiro mais próximo.
VB
Console.WriteLine(myVar2)
' 3
Exemplo – Sign
Este exemplo usa o método Sign da classe Math para determinar o sinal de um número.
VB
Console.WriteLine(mySign1)
Console.WriteLine(mySign2)
Console.WriteLine(mySign3)
' 1
' -1
' 0
Exemplo – Sin
Este exemplo usa o método Sin da classe Math para retornar o seno de um ângulo.
VB
End Function
Exemplo – Sqrt
Este exemplo usa o método Sqrt da classe Math para calcular a raiz quadrada de um
número.
VB
Console.WriteLine(mySqrt1)
Console.WriteLine(mySqrt2)
Console.WriteLine(mySqrt3)
Console.WriteLine(mySqrt4)
' 2
' 4.79583152331272
' 0
' NaN
Exemplo – Tan
Este exemplo usa o método Tan da classe Math para retornar a tangente de um ângulo.
VB
End Function
Confira também
Rnd
Randomize
NaN
Funções Matemáticas Derivadas
Operadores aritméticos
Funções da cadeia de caracteres (Visual
Basic)
Artigo • 22/02/2023 • 6 minutos para o fim da leitura
LSet Retorna uma cadeia de caracteres alinhada à esquerda que contém a cadeia
especificada ajustada no tamanho especificado.
LTrim Retorna uma cadeia de caracteres contendo uma cópia de uma cadeia de
caracteres especificada sem espaços à esquerda.
RSet Retorna uma cadeia de caracteres alinhada à direita que contém a cadeia
especificada ajustada no tamanho especificado.
RTrim Retorna uma cadeia de caracteres contendo uma cópia de uma cadeia de
caracteres especificada sem espaços à direita.
Split Retorna uma matriz unidimensional baseada em zero que contém um número
especificado de subcadeias de caracteres.
StrReverse Retorna uma cadeia de caracteres na qual a ordem dos caracteres de uma
cadeia de caracteres especificada é invertida.
Trim Retorna uma cadeia de caracteres contendo uma cópia de uma cadeia de
caracteres especificada sem espaços à direita ou à esquerda.
Método .NET Descrição
Framework
Você pode usar a instrução Option Compare para definir se as cadeias de caracteres são
comparadas usando uma ordem de classificação de texto que não diferencia maiúsculas
de minúsculas determinada pela localidade do sistema ( Text ) ou pelas representações
binárias internas dos caracteres ( Binary ). O método de comparação de texto padrão é
Binary .
Exemplo: UCase
Este exemplo usa a função UCase para retornar uma versão de uma cadeia de caracteres
em letras minúsculas.
VB
Exemplo: LTrim
Este exemplo usa a função LTrim para retirar espaços à esquerda e a função RTrim para
retirar espaços à direita de um variável de cadeia de caracteres. Usa a função de Trim
para retirar ambos os tipos de espaços.
VB
trimString = LTrim(testString)
trimString = RTrim(testString)
trimString = LTrim(RTrim(testString))
' Using the Trim function alone achieves the same result.
trimString = Trim(testString)
Exemplo: Mid
Este exemplo usa a função Mid para retornar um número especificado de caracteres de
uma cadeia de caracteres.
VB
Exemplo: Len
Este exemplo usa Len para retornar o número especificado de caracteres em uma
cadeia de caracteres.
VB
Exemplo: InStr
Este exemplo usa a função InStr para retornar a posição da primeira ocorrência de uma
cadeia de caracteres dentro da outra.
VB
' Returns 0.
Exemplo: Format
Este exemplo mostra vários usos da função Format para formatar valores usando os
formatos String e os formatos definidos pelo usuário. Para o separador de data ( / ),
separador de hora ( : ) e indicadores AM/PM ( t e tt ), a saída formatada real exibida
pelo seu sistema depende das configurações de localidade que o código está usando.
Quando horas e datas são exibidas no ambiente de desenvolvimento, o formato
abreviado de tempo e o formato abreviado de data do local do código são usados.
7 Observação
VB
' Returns current system time in the system-defined long time format.
' Returns current system date in the system-defined long date format.
' Also returns current system date in the system-defined long date
' format, using the single letter code for the format.
testStr = Format(23)
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de manipulação da cadeia de caracteres
Métodos de classe System.String
Funções de conversão do tipo (Visual
Basic)
Artigo • 12/12/2022 • 13 minutos para o fim da leitura
Essas funções são compiladas embutidas, o que significa que o código de conversão faz
parte do código que avalia a expressão. Às vezes, não há chamada para um
procedimento para realizar a conversão, o que melhora o desempenho. Cada função
força uma expressão a um tipo de dados específico.
Sintaxe
VB
CBool(expression)
CByte(expression)
CChar(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CObj(expression)
CSByte(expression)
CShort(expression)
CSng(expression)
CStr(expression)
CUInt(expression)
CULng(expression)
CUShort(expression)
Parte
expression
CByte Tipo de Byte.MinValue (0) a Byte.MaxValue (255) (sem sinal); as partes fracionárias
Dados são arredondadas.1
Byte
A partir do Visual Basic 15.8, o desempenho da conversão de ponto
flutuante para byte com a função CByte é otimizado; consulte a seção
Comentários para obter mais informações. Consulte a seção Exemplo de
CInt para obter um exemplo.
CChar Tipo de Qualquer expressão Char ou String válida; somente o primeiro caractere
Dados de de um String é convertido; o valor pode ser de 0 a 65535 (sem sinal).
Caractere
Integer
A partir do Visual Basic 15.8, o desempenho da conversão de ponto
flutuante em inteiro com a função CInt é otimizado; consulte a seção
Comentários para obter mais informações. Consulte a seção Exemplo de
CInt para obter um exemplo.
Long
A partir do Visual Basic 15.8, o desempenho da conversão de ponto
flutuante em inteiro de 64 bits com a função CLng é otimizado; consulte a
seção Comentários para obter mais informações. Consulte a seção
Exemplo de CInt para obter um exemplo.
Nome Tipo de Intervalo para argumento expression
da dados
função de
retorno
SByte
A partir do Visual Basic 15.8, o desempenho da conversão de ponto
flutuante em byte com sinal com a função CSByte é otimizado; consulte a
seção Comentários para obter mais informações. Consulte a seção
Exemplo de CInt para obter um exemplo.
Short
A partir do Visual Basic 15.8, o desempenho da conversão de ponto
flutuante em inteiro de 16 bits com a função CShort é otimizado; consulte
a seção Comentários para obter mais informações. Consulte a seção
Exemplo de CInt para obter um exemplo.
UInteger
A partir do Visual Basic 15.8, o desempenho da conversão de ponto
flutuante em inteiro sem sinal com a função CUInt é otimizado; consulte a
seção Comentários para obter mais informações. Consulte a seção
Exemplo de CInt para obter um exemplo.
ULong
A partir do Visual Basic 15.8, o desempenho da conversão de ponto
flutuante em inteiro longo sem sinal com a função CULng é otimizado;
consulte a seção Comentários para obter mais informações. Consulte a
seção Exemplo de CInt para obter um exemplo.
Nome Tipo de Intervalo para argumento expression
da dados
função de
retorno
UShort
A partir do Visual Basic 15.8, o desempenho da conversão de ponto
flutuante em inteiro de 16 bits sem sinal com a função CUShort é
otimizado; consulte a seção Comentários para obter mais informações.
Consulte a seção Exemplo de CInt para obter um exemplo.
Comentários
Como regra, você deve usar as funções de conversão de tipo do Visual Basic ao invés
dos métodos .NET Framework, como ToString() , na classe Convert ou em uma
estrutura ou classe de tipo individual. As funções do Visual Basic foram projetadas para
uma interação ideal com o código do Visual Basic e também tornam o código-fonte
mais curto e fácil de ler. Além disso, os métodos de conversão do .NET Framework nem
sempre produzem os mesmos resultados que as funções do Visual Basic, por exemplo,
ao converter Boolean em Integer . Para obter mais informações, consulte Tipos de
dados de solução de problemas.
Conversion.Fix(Double)
Conversion.Fix(Object)
Conversion.Fix(Single)
Conversion.Int(Double)
Conversion.Int(Object)
Conversion.Int(Single)
Math.Ceiling(Double)
Math.Floor(Double)
Math.Round(Double)
Math.Truncate(Double)
Essa otimização permite que o código que faz um grande número de conversões de
inteiro seja executado duas vezes mais rápido. O exemplo a seguir ilustra estas
conversões otimizadas de ponto flutuante em inteiro:
VB
Dim d As Double = s
Comportamento
Coerção. Em geral, você pode usar as funções de conversão de tipo de dados para
forçar o resultado de uma operação a um tipo de dados específico em vez do tipo
de dados padrão. Por exemplo, use CDec para forçar a aritmética decimal nos
casos em que a aritmética de precisão única, precisão dupla ou inteiro
normalmente ocorreria.
CInt e CLng diferem das funções Int e Fix, que truncam, em vez de arredondar, a
parte fracionária de um número. Além disso, Fix e Int sempre retorna um valor
do mesmo tipo de dados que você passa.
Conversões de data/hora. Use a função IsDate para determinar se um valor pode
ser convertido em uma data e hora. CDate reconhece literais de data e literais de
hora, mas não valores numéricos. Para converter um valor Date do Visual Basic 6.0
em um valor Date no Visual Basic 2005 ou versões posteriores, você pode usar o
método DateTime.FromOADate.
Função CType
A Função CType usa um segundo argumento typename , e força expression a typename ,
onde typename pode ser qualquer tipo de dados, estrutura, classe ou interface para o
qual existe uma conversão válida.
VB
Dim a, b, c As Integer
a = 5
b = 5
check = CBool(a = b)
c = 0
check = CBool(c)
Exemplo de CByte
O exemplo a seguir usa a função CByte para converter uma expressão em Byte .
VB
aDouble = 125.5678
aByte = CByte(aDouble)
Exemplo de CChar
O exemplo a seguir usa a função CChar para converter o primeiro caractere de uma
expressão String em um tipo Char .
VB
aString = "BCD"
aChar = CChar(aString)
O argumento de entrada de CChar deve ser do tipo de dados Char ou String . Você não
pode usar CChar para converter um número em um caractere, porque CChar não pode
aceitar um tipo de dados numérico. O exemplo a seguir obtém um número que
representa um ponto de código (código de caractere) e o converte no caractere
correspondente. Ele usa a função InputBox para obter a cadeia de caracteres de dígitos,
CInt para converter a cadeia de caracteres no tipo Integer e ChrW converter o número
no tipo Char .
VB
codePoint = CInt(someDigits)
' The following line of code sets thisChar to the Char value of codePoint.
thisChar = ChrW(codePoint)
Exemplo de CDate
O seguinte exemplo usa a função CDate para converter cadeias de caracteres em valores
Date . Em geral, não é recomendável codificar datas e horas como cadeias de caracteres
(conforme mostrado neste exemplo). Use literais de data e de hora, como #Feb 12,
1969# e #4:45:23 PM#
VB
aDate = CDate(aDateString)
aTime = CDate(aTimeString)
Exemplo de CDbl
VB
' The following line of code uses the literal type character D to make aDec
a Decimal.
aDec = 234.456784D
Exemplo de CDec
O seguinte exemplo usa a função CDec para converter um valor numérico em Decimal .
VB
aDecimal = CDec(aDouble)
Exemplo de CInt
O seguinte exemplo usa a função CInt para converter um valor em Integer .
VB
aDbl = 2345.5678
anInt = CInt(aDbl)
Exemplo de CLng
O seguinte exemplo usa a função CLng para converter valores em Long .
VB
aDbl1 = 25427.45
aDbl2 = 25427.55
aLng1 = CLng(aDbl1)
aLng2 = CLng(aDbl2)
Exemplo de CObj
O seguinte exemplo usa a função CObj para converter um valor numérico em Object . A
variável Object em si contém apenas um ponteiro de quatro bytes, que aponta para o
valor Double atribuído a ela.
VB
aDouble = 2.7182818284
anObject = CObj(aDouble)
Exemplo de CSByte
O seguinte exemplo usa a função CSByte para converter um valor numérico em SByte .
VB
aDouble = 39.501
anSByte = CSByte(aDouble)
Exemplo de CShort
O seguinte exemplo usa a função CShort para converter um valor numérico em Short .
VB
aByte = 100
aShort = CShort(aByte)
Exemplo de CSng
O seguinte exemplo usa a função CSng para converter valores em Single .
VB
Dim aDouble1, aDouble2 As Double
aDouble1 = 75.3421105
aDouble2 = 75.3421567
aSingle1 = CSng(aDouble1)
aSingle2 = CSng(aDouble2)
Exemplo de CStr
O seguinte exemplo usa a função CStr para converter um valor numérico em String .
VB
aDouble = 437.324
aString = CStr(aDouble)
O seguinte exemplo usa a função CStr para converter valores Date em valores String .
VB
' The following line of code generates a COMPILER ERROR because of invalid
format.
' Date literals must be in the format #m/d/yyyy# or they are invalid.
' The following line of code sets the time component of aDate to midnight.
aDate = #2/12/1969#
' The following conversion suppresses the neutral time value of 00:00:00.
aString = CStr(aDate)
' The following line of code sets the time component of aDate to one second
past midnight.
' The following line of code sets aString to "2/12/1969 12:00:01 AM".
aString = CStr(aDate)
CStr sempre renderiza um valor Date no formato curto padrão da localidade atual, por
Exemplo de CUInt
O seguinte exemplo usa a função CUInt para converter um valor numérico em
UInteger .
VB
aDouble = 39.501
aUInteger = CUInt(aDouble)
Exemplo de CULng
O seguinte exemplo usa a função CULng para converter um valor numérico em ULong .
VB
aDouble = 39.501
aULong = CULng(aDouble)
Exemplo de CUShort
O seguinte exemplo usa a função CUShort para converter um valor numérico em
UShort .
VB
aDouble = 39.501
aUShort = CUShort(aDouble)
Confira também
Asc
AscW
Chr
ChrW
Int
Fix
Format
Hex
Oct
Str
Val
Funções de conversão
Conversões de tipo no Visual Basic
Retornar valores para a função CStr
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
A tabela a seguir descreve os valores retornados para CStr para diferentes tipos de
dados de expression .
Tipo de Dados de Uma cadeia de caracteres que contém um valor Date (data e hora) no
Data formato de data curta do sistema.
CStr e Data
O tipo Date sempre contém informações de data e hora. Para fins de conversão de tipo,
o Visual Basic considera 1/1/0001 (1º de janeiro do ano 1) como um valor neutro da
data e 00:00:00 (meia-noite) como um valor neutro da hora. CStr não inclui valores
neutros na cadeia de caracteres resultante. Por exemplo, se você converter #January 1,
0001 9:30:00# em uma cadeia de caracteres, o resultado será "9:30:00 AM"; as
informações de data serão suprimidas. No entanto, as informações de data ainda estão
presentes no valor original Date e podem ser recuperadas com funções como DatePart.
7 Observação
A função CStr executa sua conversão com base nas configurações de cultura atuais
do aplicativo. Para obter a representação de cadeia de caracteres de um número
em uma cultura específica, use o método ToString(IFormatProvider) do número.
Por exemplo, use Double.ToString ao converter um valor de tipo Double em
String .
Confira também
DatePart
Funções de conversão do tipo
Tipo de dados booliano
Tipo de Dados de Data
Função CType (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
CType(expression, typename)
Partes
expression Qualquer expressão válida. Se o valor de expression estiver fora do
intervalo permitido por typename , o Visual Basic lançará uma exceção.
typename Qualquer expressão que seja legal dentro de uma cláusula As em uma
instrução Dim , ou seja, o nome de qualquer tipo de dados, objeto, estrutura, classe ou
interface.
Comentários
Dica
Você também pode usar as seguintes funções para executar uma conversão de
tipo:
Funções de conversão de tipo, como CByte , CDbl e CInt que executam uma
conversão em um tipo de dados específico. Para obter mais informações,
consulte Funções de conversão de tipo.
Operador DirectCast ou Operador TryCast. Esses operadores exigem que um
tipo herde ou implemente o outro tipo. Eles podem fornecer um desempenho
um pouco melhor do que CType ao converter de e para o tipo de dados
Object .
CType é compilado embutido, o que significa que o código de conversão faz parte do
compilação.
Se o tipo de dados de expression ou typename for uma classe ou estrutura que você
definiu, você poderá definir CType nessa classe ou estrutura como um operador de
conversão. Isso faz com que CType atue como um operador sobrecarregado. Se você
fizer isso, poderá controlar o comportamento de conversões de e para sua classe ou
estrutura, incluindo as exceções que podem ser geradas.
Palavras-chave de conversão
Uma comparação das palavras-chave de conversão de tipo é a seguinte.
TryCast Apenas tipos Um tipo deve herdar ou implementar o outro Retorna Nada
de referência tipo
Sobrecarga
O operador CType também pode ser sobrecarregado em uma classe ou estrutura
definida fora do código. Se o código for convertido para ou de uma tal classe ou
estrutura, certifique-se de entender o comportamento de seu operador CType . Para
obter mais informações, consulte Procedimentos de operador.
Exemplo
O exemplo a seguir usa a função CType para converter uma expressão no tipo de dados
Single .
VB
Confira também
OverflowException
InvalidCastException
Funções de conversão do tipo
Funções de conversão
Instrução Operator
Como definir um operador de conversão
Conversão de tipos no .NET Framework
Modificadores (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Nesta seção
Ansi
Assembly
Async
Auto
ByRef
ByVal
Default
Friend
In
Iterador
Chave
Palavra-chave <Module>
MustInherit
MustOverride
Narrowing
NotInheritable
NotOverridable
Opcional
Saída
Sobrecargas
Substituível
Substituições
ParamArray
Parcial
Privado
Particular Protegido
Protegido
Amigo Protegido
Público
ReadOnly (somente-leitura)
Sombras
Compartilhado
Estático
Unicode
Widening
WithEvents
WriteOnly
Seções relacionadas
Referência da linguagem Visual Basic
Ansi (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Especifica que o Visual Basic deve realizar marshal de todas as cadeias de caracteres
para valores ANSI (American National Standards Institute), independentemente do
nome do procedimento externo que está sendo declarado.
Comentários
O modificador Ansi pode ser usado neste contexto:
Instrução Declare
Confira também
Auto
Unicode
Palavras-chave
Assembly (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Muitos atributos pertencem a um elemento de programação individual, como uma
classe ou propriedade. Você aplica esse atributo anexando o bloco de atributo, entre
colchetes angulares ( < > ), diretamente à instrução de declaração.
Confira também
Palavra-chave <Module>
Visão geral de atributos
Async (Visual Basic)
Artigo • 22/02/2023 • 3 minutos para o fim da leitura
O modificador Async indica que o método ou expressão lambda que ele modifica é
assíncrono. Esses métodos são chamados de métodos assíncronos.
7 Observação
VB
' . . .
' . . .
' The return statement completes the task. Any method that is
Return exampleInt
End Function
Async é uma palavra-chave não reservada. Ela é uma palavra-chave quando modifica
um método ou uma expressão lambda. Em todos os outros contextos, ela será
interpretada como um identificador.
Tipos de retorno
Um método assíncrono é um procedimento Sub ou um procedimento Function que tem
um tipo de retorno de Task ou Task<TResult>. O método não pode declarar nenhum
parâmetro ByRef.
Exemplo
Os exemplos a seguir mostram um manipulador de eventos assíncrono, uma expressão
lambda assíncrona e um método assíncrono. Para obter um exemplo completo que usa
esses elementos, confira o Passo a passo: acessando a Web usando Async e Await. Você
pode baixar o exemplo do Navegador de Exemplo do .NET. O código de exemplo está
no projeto SerialAsyncExample.
VB
textBox1.Clear()
Await SumPageSizesAsync()
End Sub
textBox1.Clear()
Await SumPageSizesAsync()
End Sub
' Send the request to the Internet resource and wait for
' Get the data stream that is associated with the specified URL.
Await responseStream.CopyToAsync(content)
End Using
End Using
Return content.ToArray()
End Function
Confira também
AsyncStateMachineAttribute
Operador Await
Programação assíncrona com Async e Await
Instruções passo a passo: acessando a Web e usando Async e Await
Auto (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Comentários
O modificador Auto pode ser usado neste contexto:
Instrução Declare
Confira também
Ansi
Unicode
Palavras-chave
ByRef (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
O modificador ByRef pode ser usado nestes contextos:
Instrução Declare
Instrução Function
Instrução Sub
Confira também
Palavras-chave
Passar argumentos por valor e por referência
ByVal (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
7 Observação
muitas vezes faz com que a palavra-chave ByRef não padrão seja negligenciada.
Comentários
O modificador ByVal pode ser usado nestes contextos:
Instrução Declare
Instrução Function
Instrução Operator
Instrução Property
Instrução Sub
Exemplo
O exemplo a seguir demonstra o uso do mecanismo para passar argumentos do
parâmetro ByVal com um argumento de tipo de referência. No exemplo, o argumento é
c1 , uma instância da classe Class1 . ByVal impede que o código nos procedimentos
VB
Module Module1
Sub Main()
' Declare an instance of the class and assign a value to its field.
c1.Field = 5
Console.WriteLine(c1.Field)
' Output: 5
' ByVal does not prevent changing the value of a field or property.
ChangeFieldValue(c1)
Console.WriteLine(c1.Field)
ChangeClassReference(c1)
Console.WriteLine(c1.Field)
Console.ReadKey()
End Sub
cls.Field = 500
End Sub
cls.Field = 1000
End Sub
End Class
End Module
Confira também
Remover ByVal (regra de estilo IDE0081)
Palavras-chave
Passar argumentos por valor e por referência
Padrão (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Uma classe, estrutura ou interface pode designar no máximo uma das respectivas
propriedades como a propriedade padrão, desde que ela tenha pelo menos um
parâmetro. Se o código fizer uma referência a uma classe ou estrutura sem especificar
um membro, o Visual Basic resolverá essa referência à propriedade padrão.
Você pode reduzir um pouco a chance de erros de propriedade padrão usando sempre
a Instrução Option Strict para definir a verificação de tipo do compilador como On .
Se você estiver planejando usar uma classe ou estrutura predefinida em seu código,
deverá determinar se ela tem uma propriedade padrão e, se for o caso, qual é o nome
dela.
Devido a essas desvantagens, você deveria considerar não definir propriedades padrão.
Para legibilidade de código, você também deve considerar sempre se referir a todas as
propriedades explicitamente, até mesmo propriedades padrão.
Instrução Property
Confira também
Como declarar e chamar uma propriedade padrão no Visual Basic
Palavras-chave
Friend (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Em muitos casos, você deseja que elementos de programação, como classes e
estruturas, sejam usados por todo o assembly, e não apenas pelo componente que os
declara. No entanto, talvez você não queira que eles fiquem acessíveis por código fora
do assembly (por exemplo, se o aplicativo for proprietário). Se você quiser limitar o
acesso a um elemento dessa forma, poderá declará-lo usando o modificador Friend .
7 Observação
Você também pode usar o modificador de acesso Protected Friend, que torna um
membro de classe acessível de dentro dessa classe, de classes derivadas e do
mesmo assembly no qual a classe é definida. Para restringir o acesso a um membro
de dentro de sua classe e de classes derivadas no mesmo assembly, use o
modificador de acesso Private Protected.
7 Observação
Você pode especificar que outro assembly é um assembly amigável, o que permite
que ele acesse todos os tipos e membros marcados como Friend . Para obter mais
informações, consulte Assemblies amigáveis.
Exemplo
A classe a seguir usa o modificador Friend para permitir que outros elementos de
programação dentro do mesmo assembly acessem determinados membros.
VB
Class CustomerInfo
Get
Return p_CustomerID
End Get
End Property
End Sub
p_CustomerID = customerID
End Sub
p_CustomerID = customerID
End Sub
End Class
Uso
Você pode usar o modificador Friend nestes contextos:
Instrução Class
Instrução Const
Instrução Declare
Instrução Delegate
Instrução Dim
Instrução Enum
Instrução Event
Instrução Function
Instrução Interface
Instrução Module
Instrução Property
Instrução Structure
Instrução Sub
Confira também
InternalsVisibleToAttribute
Público
Protegido
Privado
Particular Protegido
Amigo Protegido
Níveis de acesso no Visual Basic
Procedimentos
Estruturas
Objetos e Classes
In (modificador genérico) (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Comentários
A contravariância permite que você use um tipo menos derivado do que aquele
especificado pelo parâmetro genérico. Isso permite a conversão implícita de classes que
implementam interfaces variantes e a conversão implícita de tipos delegados.
Regras
Você pode usar a palavra-chave In em delegados e interfaces genéricas.
A covariância e a contravariância têm suporte para tipos de referência, mas não para
tipos de valor.
Comportamento
Uma interface que tem um parâmetro de tipo contravariante permite que os seus
métodos aceitem argumentos de tipos menos derivados que aqueles especificados pelo
parâmetro de tipo de interface. Por exemplo, como no .NET Framework 4, na interface
IComparer<T>, o tipo T é contravariante, você poderá atribuir um objeto do tipo
IComparer(Of Person) a um objeto do tipo IComparer(Of Employee) , sem usar qualquer
VB
Interface IContravariant(Of In A)
End Interface
Interface IExtContravariant(Of In A)
Inherits IContravariant(Of A)
End Interface
Class Sample(Of A)
Implements IContravariant(Of A)
End Class
Sub Main()
istr = iobj
End Sub
VB
End Sub
End Sub
AddressOf SampleControl
AddressOf SampleButton
dButton = dControl
dButton(New Button())
End Sub
Confira também
Variação em interfaces genéricas
Saída
Iterador (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Um método iterador executa uma iteração personalizada em uma coleção. Um iterador
usa a instrução Yield para retornar um elemento da coleção por vez. Quando uma
instrução Yield for atingida, o local atual no código será retido. A execução será
reiniciada desse local na próxima vez que a função iteradora for chamada.
Um iterador pode ser implementado como função ou acessador Get de uma definição
de propriedade. O modificador Iterator aparece na declaração da função de iterador
ou do acessador Get .
O tipo de retorno de uma função de iterador ou acessador Get pode ser IEnumerable,
IEnumerable<T>, IEnumerator ou IEnumerator<T>.
Um iterador pode ser função anônima. Para obter mais informações, consulte
Iteradores.
Uso
O modificador Iterator pode ser usado nestes contextos:
Instrução Function
Instrução Property
Exemplo 1
O exemplo a seguir demonstra o uso de uma função de iterador. A função de iterador
tem uma instrução Yield que está em um loop For…Next. Cada iteração do corpo da
instrução For Each em Main cria uma chamada para a Power função de iterador. Cada
chamada à função iteradora prossegue para a próxima execução da instrução Yield
que ocorre durante a próxima iteração do loop For…Next .
VB
Sub Main()
Next
Console.ReadKey()
End Sub
As System.Collections.Generic.IEnumerable(Of Integer)
Dim result = 1
Yield result
Next
End Function
Exemplo 2
O exemplo a seguir demonstra um acessador Get que é um iterador. O modificador
Iterator está na declaração de propriedade.
VB
Sub Main()
With theGalaxy
End With
Next
Console.ReadKey()
End Sub
As System.Collections.Generic.IEnumerable(Of Galaxy)
Get
End Get
End Property
End Class
End Class
Confira também
IteratorStateMachineAttribute
Iteradores
Instrução Yield
Chave (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
VB
Igualitário
Duas instâncias de tipo anônimo são iguais se são instâncias do mesmo tipo e se os
valores de suas propriedades-chave são iguais. Nos exemplos a seguir, flight2 é igual
ao flight1 do exemplo anterior porque são instâncias do mesmo tipo anônimo e têm
valores correspondentes para suas propriedades-chave. No entanto, flight3 não é
igual a flight1 porque tem um valor diferente para uma propriedade-chave, FlightNo .
A instância flight4 não é do mesmo tipo de flight1 porque designam propriedades
diferentes como propriedades-chave.
VB
' The following statement displays True. The values of the non-key
Console.WriteLine(flight1.Equals(flight2))
Console.WriteLine(flight1.Equals(flight3))
' The following statement displays False. Instance flight4 is not the
' same type as flight1 because they have different key properties.
Console.WriteLine(flight1.Equals(flight4))
Se duas instâncias forem declaradas apenas com propriedades não chave, idênticas em
nome, tipo, ordem e valor, elas não serão iguais. Uma instância sem propriedades-chave
é igual apenas a si mesma.
Para saber mais sobre as condições nas quais duas instâncias de tipo anônimo são
instâncias do mesmo tipo anônimo, confira Tipos anônimos.
VB
Console.WriteLine(flight1.GetHashCode = flight2.GetHashCode)
As instâncias de um tipo anônimo que tenham valores diferentes para uma ou mais
propriedades-chave têm valores de código hash diferentes. A instrução a seguir retorna
False .
VB
Console.WriteLine(flight1.GetHashCode = flight3.GetHashCode)
VB
Console.WriteLine(flight1.GetHashCode = flight4.GetHashCode)
VB
' The following statement will not compile, because FlightNo is a key
'
flight1.Gate = "C5"
Confira também
Definição do Tipo Anônimo
Como inferir nomes e tipos de propriedade na declaração de tipo anônimo
Tipos anônimos
Módulo <keyword> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Muitos atributos pertencem a um elemento de programação individual, como uma
classe ou propriedade. Você aplica esse atributo anexando o bloco de atributo, entre
colchetes angulares ( < > ), diretamente à instrução de declaração.
Confira também
Assembly
Instrução Module
Visão geral de atributos
MustInherit (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Especifica que uma classe só pode ser usada como classe base e que você não pode
criar um objeto diretamente dela.
Comentários
A finalidade de uma classe base (também conhecida como classe abstrata) é definir a
funcionalidade que é comum a todas as classes derivadas dela. Isso evita que as classes
derivadas tenham de redefinir os elementos comuns. Em alguns casos, essa
funcionalidade comum não é completa o suficiente para tornar um objeto utilizável e
cada classe derivada define a funcionalidade ausente. Nesse caso, você deseja que o
código de consumo crie objetos somente das classes derivadas. Você usa MustInherit
na classe base para impor isso.
Outro uso de uma classe MustInherit é restringir uma variável a um conjunto de classes
relacionadas. Você pode definir uma classe base e derivar todas essas classes dela. A
classe base não precisa fornecer nenhuma funcionalidade comum a todas as classes
derivadas, mas pode servir como um filtro para atribuir valores a variáveis. Se o código
de consumo declarar uma variável como a classe base, o Visual Basic permitirá que você
atribua apenas um objeto de uma das classes derivadas a essa variável.
O .NET Framework define várias classes MustInherit , entre elas Array, Enum e
ValueType. ValueType é um exemplo de uma classe base que restringe uma variável.
Todos os tipos de valor derivam de ValueType. Se você declarar uma variável como
ValueType, poderá atribuir apenas tipos de valor a essa variável.
Regras
Contexto da declaração. Você só pode usar MustInherit em uma instrução Class .
Exemplo
O exemplo a seguir ilustra a herança forçada e a substituição forçada. A classe base
shape define uma variável acrossLine . As classes circle e square derivam de shape .
Elas herdam a definição de acrossLine , mas devem definir a função area porque esse
cálculo é diferente para cada tipo de forma.
VB
End Class
End Function
End Class
End Function
End Class
End Sub
End Class
Você pode declarar shape1 e shape2 como sendo do tipo shape . No entanto, não é
possível criar um objeto de shape porque ele não tem a funcionalidade da função area
e está marcado como MustInherit .
Como elas são declaradas como shape , as variáveis shape1 e shape2 são restritas a
objetos das classes derivadas circle e square . O Visual Basic não permite que você
atribua nenhum outro objeto a essas variáveis, o que oferece um alto nível de segurança
de tipos.
Uso
O modificador MustInherit pode ser usado neste contexto:
Instrução Class
Confira também
Instrução Inherits
NotInheritable
Palavras-chave
Noções básicas de herança
MustOverride (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Você só pode usar MustOverride em uma instrução de declaração de propriedade ou
procedimento. A propriedade ou o procedimento que especifica MustOverride deve ser
membro de uma classe, que deve ser marcada como MustInherit.
Regras
Declaração Incompleta. Ao especificar MustOverride , você não fornece nenhuma
linha de código adicional para a propriedade ou o procedimento, nem mesmo a
instrução End Function , End Property ou End Sub .
Termos Alternativos. Um elemento que não pode ser usado, exceto em uma
substituição, às vezes é chamado de virtual puro.
Instrução Function
Instrução Property
Instrução Sub
Confira também
NotOverridable
Substituível
Substituições
MustInherit
Palavras-chave
Sombreamento no Visual Basic
Narrowing (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Se Option Strict for On , o código de consumo deve ser usar CType para todas as
conversões de restrição.
Instrução Operator
Confira também
Instrução Operator
Widening
Conversões de Widening e Narrowing
Como definir um operador
Função CType
Instrução Option Strict
NotInheritable (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Especifica se uma classe não pode ser usada como um classe base.
Comentários
Termos alternativos. Uma classe que não pode ser herdada às vezes é chamada de
classe sealed.
Instrução Class
Confira também
Instrução Inherits
MustInherit
Palavras-chave
NotOverridable (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
O modificador NotOverridable impede a substituição de um método ou propriedade
em uma classe derivada. O modificador Overridable permite substituir um método ou
propriedade em uma classe em uma classe derivada. Para obter mais informações,
consulte Noções básicas de herança.
Um elemento que não pode ser substituído às vezes é chamado de elemento selado.
Modificadores Combinados
Você não pode especificar Overridable ou NotOverridable para um método Private .
Uso
O modificador NotOverridable pode ser usado nestes contextos:
Instrução Function
Instrução Property
Instrução Sub
Confira também
Modificadores
Noções básicas de herança
MustOverride
Substituível
Substituições
Palavras-chave
Sombreamento no Visual Basic
Opcional (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para cada parâmetro opcional, você deve especificar uma expressão constante como o
valor padrão desse parâmetro. Se a expressão for avaliada como Nothing, o valor
padrão do tipo de dados de valor será usado como o valor padrão do parâmetro.
Instrução Declare
Instrução Function
Instrução Property
Instrução Sub
7 Observação
7 Observação
Exemplo 1
O exemplo a seguir define um procedimento que tem um parâmetro opcional.
VB
If matchCase Then
Where v.Contains(searchString)
Else
Where UCase(v).Contains(UCase(searchString))
End If
Return results.ToList()
End Function
Exemplo 2
O exemplo a seguir demonstra como chamar um procedimento com argumentos
passados por posição e com argumentos passados pelo nome. O procedimento tem
dois parâmetros opcionais.
VB
' Omit one optional argument by holding its place with a comma.
studentInfo("Mary", , #9/21/1981#)
studentInfo("Mary", birth:=#9/21/1981#)
End Sub
Console.WriteLine()
End Sub
Confira também
Lista de parâmetros
Parâmetros Opcionais
Palavras-chave
Out (modificador genérico) (Visual
Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Comentários
A covariância permite que você use um tipo mais derivado do que aquele especificado
pelo parâmetro genérico. Isso permite a conversão implícita de classes que
implementam interfaces variantes e a conversão implícita de tipos delegados.
Regras
Você pode usar a palavra-chave Out em delegados e interfaces genéricas.
Em uma interface genérica, um parâmetro de tipo pode ser declarado covariante se ele
satisfizer as condições a seguir:
7 Observação
Há uma exceção a essa regra. Se, em uma interface covariante, você tiver um
delegado genérico contravariante como um parâmetro de método, você
poderá usar o tipo covariante como um parâmetro de tipo genérico para o
delegado. Para obter mais informações sobre delegados genéricos
covariantes e contravariantes, consulte Variância em delegados e Usando
variância para delegados genéricos Func e Action.
O parâmetro de tipo não é usado como uma restrição genérica para os métodos
de interface.
Em um delegado genérico, um tipo pode ser declarado covariante se for usado apenas
como tipo de retorno do método e não usado para argumentos de método.
A covariância e a contravariância têm suporte para tipos de referência, mas não para
tipos de valor.
Comportamento
Uma interface que tem um parâmetro de tipo covariante permite que seus métodos
retornem tipos mais derivados do que aqueles especificados pelo parâmetro de tipo.
Por exemplo, já que no .NET Framework 4, em IEnumerable<T>, o tipo T é covariante,
você pode atribuir um objeto do tipo IEnumerable(Of String) a um objeto do tipo
IEnumerable(Of Object) sem usar nenhum método de conversão especial.
Pode ser atribuído a um delegado covariante outro delegado do mesmo tipo, mas com
um parâmetro de tipo genérico mais derivado.
Exemplo 1
O exemplo a seguir mostra como declarar, estender e implementar uma interface
genérica covariante. Ele também mostra como usar a conversão implícita para classes
que implementam uma interface covariante.
VB
End Interface
Inherits ICovariant(Of R)
End Interface
Class Sample(Of R)
Implements ICovariant(Of R)
End Class
Sub Main()
iobj = istr
End Sub
Exemplo 2
O exemplo a seguir mostra como declarar, instanciar e invocar um delegado genérico
covariante. Ele também mostra como você pode usar a conversão implícita para tipos
delegados.
VB
End Function
End Function
AddressOf SampleControl
AddressOf SampleButton
dControl = dButton
dControl()
End Sub
Confira também
Variação em interfaces genéricas
In
Sobrecargas (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Sobrecarga é a prática de fornecer mais de uma definição para uma determinada
propriedade ou nome de procedimento no mesmo escopo. O ato de redeclarar uma
propriedade ou procedimento com uma assinatura diferente às vezes é chamado de
ocultação por assinatura.
Regras
Contexto da declaração. Você só pode usar Overloads em uma instrução de
declaração de propriedade ou procedimento.
o número de parâmetros
Todas as sobrecargas devem ter o mesmo nome, mas cada uma deve ser diferente
de todas as outras em um ou mais dos aspectos anteriores. Isso permite que o
compilador distingue qual versão usar quando o código chama a propriedade ou
o procedimento.
Diferenças não permitidas. A alteração de uma ou mais das seguintes opções não
é válida para sobrecarregar uma propriedade ou procedimento, pois elas não
fazem parte da assinatura:
Instrução Function
Instrução Operator
Instrução Property
Instrução Sub
Confira também
Sombras
Sobrecarga de procedimento
Tipos genéricos no Visual Basic
Procedimentos do operador
Como definir um operador de conversão
Substituível (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
O modificador Overridable permite substituir um método ou propriedade em uma
classe em uma classe derivada. O modificador NotOverridable impede a substituição de
um método ou propriedade em uma classe derivada. Para obter mais informações,
consulte Noções básicas de herança.
Um elemento que pode ser substituído às vezes é chamado de elemento virtual. Se ele
pode ser substituído, mas não precisa ser, às vezes também é chamado de elemento
concreto.
Modificadores Combinados
Você não pode especificar Overridable ou NotOverridable para um método Private .
Uso
O modificador Overridable pode ser usado nestes contextos:
Instrução Function
Instrução Property
Instrução Sub
Confira também
Modificadores
Noções básicas de herança
MustOverride
NotOverridable
Substituições
Palavras-chave
Sombreamento no Visual Basic
Substituições (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Regras
Contexto da declaração. Você só pode usar Overrides em uma instrução de
declaração de propriedade ou procedimento.
O nível de acesso
Instrução Function
Instrução Property
Instrução Sub
Confira também
MustOverride
NotOverridable
Substituível
Palavras-chave
Sombreamento no Visual Basic
Tipos genéricos no Visual Basic
Lista de Tipos
ParamArray (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
ParamArray permite que você passe um número arbitrário de argumentos para o
) Importante
Sempre que você lida com uma matriz que pode ser indefinidamente grande, há o
risco de ultrapassar alguma capacidade interna do aplicativo. Se você aceitar uma
matriz de parâmetros do código de chamada, deverá testar seu comprimento e
tomar as etapas apropriadas se ela for muito grande para seu aplicativo.
Instrução Declare
Instrução Function
Instrução Property
Instrução Sub
Confira também
Palavras-chave
Matrizes de parâmetros
Parcial (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
7 Observação
Sintaxe
VB
[ Inherits classname ]
[ Implements interfacenames ]
[ variabledeclarations ]
[ proceduredeclarations ]
Partes
Termo Definição
attrlist Opcional. Lista de atributos que se aplicam a esse tipo. Você deve
colocar a Lista de Atributos entre colchetes angulares ( < > ).
accessmodifier Opcional. Especifica qual código pode acessar esse tipo. Confira Níveis
de acesso no Visual Basic.
interfacenames Obrigatório se você usar Implements . Os nomes das interfaces que esse
tipo implementa.
Comentários
O Visual Basic usa definições de classe parcial para separar o código gerado do código
criado pelo usuário em arquivos de origem separados. Por exemplo, o Windows Form
Designer define classes parciais para controles, como Form. Você não deve modificar o
código gerado nesses controles.
Todas as regras para criação de classe, estrutura, interface e módulo, bem como as que
são para uso e herança do modificador, se aplicam ao criar um tipo parcial.
Práticas Recomendadas
Em circunstâncias normais, você não deve dividir o desenvolvimento de um tipo
simples em duas ou mais declarações. Portanto, na maioria dos casos, você não
precisa da palavra-chave Partial .
Para legibilidade, cada declaração parcial de um tipo deve incluir a palavra-chave
Partial . O compilador permite, no máximo, uma declaração parcial omitir a
palavra-chave; se dois ou mais omitirem, o compilador sinalizará um erro.
Comportamento
União de Declarações. O compilador trata o tipo como a união de todas as suas
declarações parciais. Cada modificador de cada definição parcial se aplica ao tipo
inteiro e cada membro de cada definição parcial está disponível para o tipo inteiro.
Instrução Class
Instrução Structure
Exemplo
O exemplo a seguir divide a definição da classe sampleClass em duas declarações, cada
uma das quais define um procedimento Sub diferente.
VB
End Sub
End Class
End Sub
End Class
Comentários
Se um elemento de programação representa a funcionalidade proprietária ou contém
dados confidenciais, você geralmente deseja limitar o acesso a ele o mais estritamente
possível. Você atinge a limitação máxima permitindo que apenas o módulo, a classe ou
a estrutura que o define possa acessá-lo. Para limitar o acesso a um elemento dessa
forma, você pode declará-lo com Private .
7 Observação
Você também pode usar o modificador de acesso Particular Protegido, que torna
um membro acessível de dentro dessa classe e de classes derivadas localizadas no
assembly que o contém.
Regras
Contexto da declaração. Você só pode usar Private no nível do módulo. Isso
significa que o contexto de declaração de um elemento Private deve ser um
módulo, classe ou estrutura e não pode ser um arquivo de origem, namespace,
interface ou procedimento.
Comportamento
Nível de acesso. Todo o código dentro de um contexto de declaração pode
acessar os respectivos elementos Private . Isso inclui código dentro de um tipo
contido, como uma classe aninhada ou uma expressão de atribuição em uma
enumeração. Nenhum código fora do contexto de declaração pode acessar os
respectivos elementos Private .
Instrução Class
Instrução Const
Instrução Declare
Instrução Delegate
Instrução Dim
Instrução Enum
Instrução Event
Instrução Function
Instrução Interface
Instrução Property
Instrução Structure
Instrução Sub
Confira também
Público
Protegido
Friend
Particular Protegido
Amigo Protegido
Níveis de acesso no Visual Basic
Procedimentos
Estruturas
Objetos e Classes
Protegido de forma particular (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
XML
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
7 Observação
Regras
Contexto da declaração. Você só pode usar Private Protected no nível da classe.
Isso significa que o contexto de declaração de um elemento Protected precisa ser
uma classe e não pode ser um arquivo de origem, namespace, interface, módulo,
estrutura ou procedimento.
Comportamento
Nível de acesso. Todo o código em uma classe pode acessar os elementos dela. O
código em qualquer classe que deriva de uma classe base e está contido no
mesmo assembly pode acessar todos os elementos Private Protected da classe
base. No entanto, o código em qualquer classe que deriva de uma classe base e
está contido em um assembly diferente não pode acessar os elementos Private
Protected da classe base.
Instrução Const
Instrução Declare
Instrução Dim
Instrução Event
Instrução Function
Instrução Property
Instrução Sub
Confira também
Público
Protegido
Friend
Privado
Amigo Protegido
Níveis de acesso no Visual Basic
Procedimentos
Estruturas
Objetos e Classes
Protegido (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Às vezes, um elemento de programação declarado em uma classe contém dados
confidenciais ou código restrito e você deseja limitar o acesso ao elemento. No entanto,
se a classe for herdável e você esperar uma hierarquia de classes derivadas, talvez seja
necessário que elas acessem os dados ou o código. Nesse caso, você deseja que o
elemento seja acessível tanto da classe base quanto de todas as classes derivadas. Para
limitar o acesso a um elemento dessa forma, você pode declará-lo com Protected .
7 Observação
Regras
Contexto da declaração. Você só pode usar Protected no nível da classe. Isso significa
que o contexto de declaração de um elemento Protected precisa ser uma classe e não
pode ser um arquivo de origem, namespace, interface, módulo, estrutura ou
procedimento.
Comportamento
Nível de acesso. Todo o código em uma classe pode acessar os elementos dela. O
código em qualquer classe derivada de uma classe base pode acessar todos os
elementos Protected da classe base. Isso é verdade para todas as gerações de
derivação. Isso significa que uma classe pode acessar elementos Protected da
classe base da classe base e assim por diante.
Instrução Class
Instrução Const
Instrução Declare
Instrução Delegate
Instrução Dim
Instrução Enum
Instrução Event
Instrução Function
Instrução Interface
Instrução Property
Instrução Structure
Instrução Sub
Confira também
Público
Friend
Privado
Particular Protegido
Amigo Protegido
Níveis de acesso no Visual Basic
Procedimentos
Estruturas
Objetos e Classes
Amigo Protegido (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
7 Observação
Confira também
Público
Protegido
Friend
Privado
Particular Protegido
Níveis de acesso no Visual Basic
Procedimentos
Estruturas
Objetos e Classes
Público (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Se for publicar um componente ou conjunto de componentes, como uma biblioteca de
classes, geralmente deseja que os elementos de programação sejam acessíveis por
qualquer código que interopere com o assembly. Para conferir esse acesso ilimitado em
um elemento, você pode declará-lo com Public .
O acesso público é o nível normal para um elemento de programação quando você não
precisa limitar o acesso a ele. Observe que o nível de acesso de um elemento declarado
dentro de uma interface, módulo, classe ou estrutura assume o padrão Public se não o
declarar de outra forma.
Regras
Contexto da declaração. Você só pode usar Public em nível de módulo, interface
ou namespace. Isso significa que o contexto de declaração de um elemento
Public deve ser um arquivo de origem, namespace, interface, módulo, classe ou
estrutura e não pode ser um procedimento.
Comportamento
Nível de acesso. Todo código que pode acessar um módulo, uma classe ou uma
estrutura pode acessar seus elementos Public .
Instrução Class
Instrução Const
Instrução Declare
Instrução Delegate
Instrução Dim
Instrução Enum
Instrução Event
Instrução Function
Instrução Interface
Instrução Module
Instrução Operator
Instrução Property
Instrução Structure
Instrução Sub
Confira também
Protegido
Friend
Privado
Particular Protegido
Amigo Protegido
Níveis de acesso no Visual Basic
Procedimentos
Estruturas
Objetos e Classes
ReadOnly (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Especifica que uma variável ou propriedade pode ser lida, mas não gravada.
Comentários
Regras
Contexto da declaração. Você só pode usar ReadOnly no nível do módulo. Isso
significa que o contexto de declaração de um elemento ReadOnly precisa ser uma
classe, uma estrutura ou um módulo, e não pode ser um arquivo de origem,
namespace ou procedimento.
Você pode atribuir um valor a uma variável ReadOnly somente em sua declaração
ou no construtor de uma classe ou estrutura na qual ela é definida.
) Importante
Se o tipo de dados da variável for um tipo de referência, como uma matriz ou uma
instância de classe, seus membros poderão ser alterados mesmo que a variável em
si seja ReadOnly . O exemplo a seguir ilustra essa situação.
VB
Sub ChangeArrayElement()
characterArray(1) = "M"c
End Sub
Quando inicializada, a matriz apontada por characterArray() contém "x", "y" e "z".
Como a variável characterArray é ReadOnly , você não pode alterar o valor depois que
ela é inicializada; ou seja, você não pode atribuir uma nova matriz a ela. No entanto,
você pode alterar os valores de um ou mais membros da matriz. Após uma chamada ao
procedimento ChangeArrayElement , a matriz apontada por characterArray() contém "x",
"M" e "z".
Exemplo
O exemplo a seguir define uma propriedade ReadOnly para a data em que um
funcionário foi contratado. A classe armazena o valor da propriedade internamente
como uma variável Private e apenas o código dentro da classe pode alterar esse valor.
No entanto, a propriedade é Public , e qualquer código que possa acessar a classe pode
ler a propriedade.
VB
Class employee
' Only code inside class employee can change the value of hireDateValue.
' Any code that can access class employee can read property dateHired.
Get
Return hireDateValue
End Get
End Property
End Class
Instrução Dim
Instrução Property
Confira também
WriteOnly
Palavras-chave
Sombras (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
A principal finalidade do sombreamento (que também é conhecido como ocultar por
nome) é preservar a definição de seus membros de classe. A classe base pode sofrer
uma alteração que cria um elemento com o mesmo nome que você já definiu. Se isso
acontecer, o modificador Shadows força as referências por meio de sua classe a serem
resolvidas para o membro que você definiu, em vez de para o novo elemento de classe
base.
Regras
Contexto da declaração. Você só pode usar Shadows no nível da classe. Isso
significa que o contexto de declaração de um elemento Shadows precisa ser uma
classe e não pode ser um arquivo de origem, namespace, interface, módulo,
estrutura ou procedimento.
Instrução Class
Instrução Const
Instrução Declare
Instrução Delegate
Instrução Dim
Instrução Enum
Instrução Event
Instrução Function
Instrução Interface
Instrução Property
Instrução Structure
Instrução Sub
Confira também
Compartilhado
Estático
Privado
Me, My, MyBase e MyClass
Noções básicas de herança
MustOverride
NotOverridable
Sobrecargas
Substituível
Substituições
Sombreamento no Visual Basic
Compartilhado (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Regras
Contexto da declaração. Você só pode usar Shared no nível do módulo. Isso
significa que o contexto de declaração de um elemento Shared precisa ser uma
classe ou uma estrutura, e não pode ser um arquivo de origem, namespace ou
procedimento.
Comportamento
Armazenamento. Uma variável ou evento compartilhado é armazenado na
memória apenas uma vez, não importa quantas instâncias você crie da classe ou
estrutura. Da mesma forma, um procedimento ou uma propriedade compartilhada
contém apenas um conjunto de variáveis locais.
VB
Sub Main()
ShareTotal.Total = 10
instanceVar.Total += 100
' ReturnClass(). This adds 1000 to total but does not work as
ReturnClass().Total += 1000
End Sub
End Function
End Class
No exemplo anterior, o compilador gera uma mensagem de aviso nas duas vezes
em que o código acessa a propriedade Total compartilhada por meio de uma
instância. Em cada caso, ele faz o acesso diretamente por meio da classe
ShareTotal e não usa nenhuma instância. No caso da chamada pretendida para o
procedimento ReturnClass , isso significa que ele nem mesmo gera uma chamada
para ReturnClass , portanto, a ação adicional de exibição "Function ReturnClass()
called" não é executada.
Instrução Dim
Instrução Event
Instrução Function
Instrução Operator
Instrução Property
Instrução Sub
Confira também
Sombras
Estático
Tempo de vida no Visual Basic
Procedimentos
Estruturas
Objetos e Classes
Estático (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Especifica que uma ou mais variáveis locais declaradas devem continuar existindo e
manter os valores mais recentes após a finalização do procedimento em que elas são
declaradas.
Comentários
Normalmente, uma variável local em um procedimento deixa de existir assim que o
procedimento é interrompido. Uma variável estática continua existindo e mantém o
valor mais recente. Na próxima vez que o código chamar o procedimento, a variável não
será reinicializada e ainda conterá o valor mais recente atribuído a ela. Uma variável
estática continua existindo durante o tempo de vida da classe ou do módulo em que
está definida.
Regras
Contexto da declaração. Você só pode usar Static em variáveis locais. Isso
significa que o contexto de declaração para uma variável Static precisa ser um
procedimento ou um bloco em um procedimento e não pode ser um arquivo de
origem, um namespace, uma classe, uma estrutura ou um módulo.
Os tipos de dados de vaiáveis locais Static não podem ser inferidos. Para obter
mais informações, confira Inferência de tipo de variável local.
Comportamento
Quando você declara uma variável estática em um procedimento Shared , apenas uma
cópia da variável estática está disponível para todo o aplicativo. Você chama um
procedimento Shared usando o nome da classe, não uma variável que aponta para uma
instância da classe.
Quando você declara uma variável estática em um procedimento que não é Shared ,
apenas uma cópia da variável está disponível para cada instância da classe. Você chama
um procedimento não compartilhado usando uma variável que aponta para uma
instância específica da classe.
Exemplo
O exemplo a seguir demonstra o uso de Static .
VB
totalSales += thisSale
Return totalSales
End Function
A variável Static totalSales é inicializada para 0 apenas uma vez. Cada vez que você
insere updateSales , totalSales ainda tem o valor mais recente que você calculou para
ela.
Instrução Dim
Confira também
Sombras
Compartilhado
Tempo de vida no Visual Basic
Declaração de Variável
Estruturas
Inferência de Tipo de Variável Local
Objetos e Classes
Unicode (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Especifica que o Visual Basic deve realizar marshal de todas as cadeias de caracteres
para valores Unicode, independentemente do nome do procedimento externo que está
sendo declarado.
Comentários
O modificador Unicode pode ser usado neste contexto:
Instrução Declare
Confira também
Ansi
Auto
Palavras-chave
Widening (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O código de consumo não precisa usar CType para conversões de expansão, mesmo
que Option Strict seja On .
Instrução Operator
Confira também
Instrução Operator
Narrowing
Conversões de Widening e Narrowing
Como definir um operador
Função CType
Instrução Option Strict
Como definir um operador de conversão
WithEvents (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Especifica que uma ou mais variáveis de membro declaradas referem-se a uma instância
de uma classe que pode gerar eventos.
Comentários
Quando uma variável é definida com o uso de WithEvents , você pode especificar de
forma declarativa que um método manipula os eventos da variável usando a palavra-
chave Handles .
Você só pode usar WithEvents no nível de classe ou módulo. Isso significa que o
contexto de declaração de uma variável WithEvents precisa ser uma classe, estrutura,
um módulo, procedimento ou bloco e não pode ser um arquivo de origem, namespace
ou uma interface.
Você pode declarar apenas variáveis individuais, não matrizes, com WithEvents .
Regras
Tipos de Elemento. Você deve declarar variáveis WithEvents como variáveis de objeto
para que elas possam aceitar instâncias de classe. No entanto, você não pode declará-
las como Object . Você deve declará-las como a classe específica que pode gerar os
eventos.
Exemplo
VB
Confira também
Alças
Palavras-chave
Eventos
WriteOnly (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Especifica que uma propriedade pode ser escrita, mas não lida.
Comentários
Regras
Contexto da declaração. Você só pode usar WriteOnly no nível do módulo. Isso
significa que o contexto de declaração de uma propriedade WriteOnly precisa ser uma
classe, uma estrutura ou um módulo, e não pode ser um arquivo de origem, namespace
ou procedimento.
Você pode declarar uma propriedade como WriteOnly , mas não como uma variável.
) Importante
Instrução Property
Confira também
ReadOnly (somente-leitura)
Privado
Palavras-chave
Módulos (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O Visual Basic fornece vários módulos que permitem simplificar tarefas comuns no
código, incluindo a manipulação de cadeias de caracteres, a execução de cálculos
matemáticos, a obtenção de informações do sistema, a execução de operações de
arquivo e diretório e assim por diante. A tabela a seguir lista os módulos fornecidos pelo
Visual Basic.
Módulo Descrição
Constants Contém constantes diversas. Essas constantes podem ser usadas em qualquer
lugar no seu código.
Conversion Contém membros que convertem números decimais em outras bases, números
em cadeias de caracteres, cadeias de caracteres em números e um tipo de dados
para outro.
DateAndTime Contém membros que obtêm a data ou hora atual, executam cálculos de data,
retornam uma data ou hora, definem a data ou hora ou a duração de um
processo.
ErrObject Contém informações sobre erros e métodos em tempo de execução para gerar
ou limpar um erro.
Financial Contém procedimentos que são usados para realizar cálculos financeiros.
Confira também
Referência da linguagem Visual Basic
Palavra-chave Nothing (Visual Basic)
Artigo • 07/04/2023 • 4 minutos para o fim da leitura
Representa o valor padrão de qualquer tipo de dados. Para tipos de referência, o valor
padrão é a referência null . Para tipos de valor, o valor padrão depende se o tipo de
valor é anulável.
7 Observação
Para tipos de valor não anuláveis, Nothing no Visual Basic difere de null em C#.
No Visual Basic, se você definir uma variável de um tipo de valor não anulável
como Nothing , a variável será definida como o valor padrão para o tipo declarado.
Em C#, se você atribuir uma variável de um tipo de valor não anulável a null ,
ocorrerá um erro em tempo de compilação.
Comentários
Nothing representa o valor padrão de qualquer tipo de dados. O valor padrão depende
se a variável é de um tipo de valor ou de um tipo de referência.
Uma variável de um tipo de valor contém diretamente seu valor. Os tipos de valor
incluem todos os tipos de dados numéricos, Boolean , Char , Date , todas as estruturas e
todas as enumerações. Uma variável de um tipo de referência armazena uma referência
a uma instância do objeto na memória. Tipos de referência incluem classes, matrizes,
delegados e cadeias de caracteres. Para obter mais informações, consulte Tipos de Valor
e Tipos de Referência.
Se uma variável for de um tipo de valor não anulável, atribuir Nothing a ela a definirá
como o valor padrão para seu tipo declarado. Se esse tipo contiver membros variáveis,
todos eles serão definidos como seus valores padrão. O exemplo a seguir ilustra esse
recurso para tipos escalares.
VB
Module Module1
Sub Main()
Dim ts As TestStruct
Dim i As Integer
Dim b As Boolean
ts = Nothing
i = Nothing
b = Nothing
Console.WriteLine($"ts.Name: {ts.Name}")
Console.WriteLine($"ts.Number: {ts.Number}")
Console.WriteLine($"i: {i}")
Console.WriteLine($"b: {b}")
Console.ReadKey()
End Sub
End Structure
End Module
Se uma variável for de um tipo de referência, atribuir Nothing à variável a definirá como
uma referência null do tipo da variável. Uma variável definida como uma referência
null não está associada a nenhum objeto. O exemplo a seguir demonstra este:
VB
Module Module1
Sub Main()
' The following statement sets testObject so that it does not refer
to
testObject = Nothing
tc = Nothing
'Console.WriteLine(tc.Field1)
End Sub
Class TestClass
' . . .
End Class
End Module
Ao verificar se uma variável de referência (ou tipo de valor anulável) é null , não use =
Nothing ou <> Nothing . Sempre use Is Nothing ou IsNot Nothing .
VB
Module Module1
Sub Main()
testObject = Nothing
Console.WriteLine(testObject Is Nothing)
tc = Nothing
Dim n? As Integer
Console.WriteLine(n Is Nothing)
n = 4
Console.WriteLine(n Is Nothing)
n = Nothing
Console.ReadKey()
End Sub
Class TestClass
End Class
End Module
Se você declarar uma variável sem usar uma cláusula As e defini-la como Nothing , a
variável terá um tipo de Object . Um exemplo disso é o Dim something = Nothing . Um
erro em tempo de compilação ocorre nesse caso quando Option Strict está ativado e
Option Infer , desativado.
Quando você atribui Nothing a uma variável de objeto, ela não se refere mais a
nenhuma instância de objeto. Se a variável já tiver se referido a uma instância, defini-la
como Nothing não encerra a instância em si. A instância é encerrada e os recursos de
memória e sistema associados a ela são liberados somente depois que o coletor de lixo
(GC) detectar que não há referências ativas restantes.
Nothing difere do objeto DBNull, que representa uma variante não inicializada ou uma
Confira também
Instrução Dim
Tempo de vida do objeto: como os objetos são criados e destruídos
Tempo de vida no Visual Basic
Operador Is
Operador IsNot
Tipos de Valor Anulável
Objetos (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Este artigo fornece links para outros artigos que documentam os objetos de tempo de
execução do Visual Basic e que contêm tabelas dos procedimentos, das propriedades e
dos eventos dos seus membros.
Confira também
Referência da linguagem Visual Basic
Objeto My.Application
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e propriedades do objeto My.Application ,
confira os seguintes recursos:
Requisitos
Namespace:Microsoft.VisualBasic.ApplicationServices
Confira também
Objeto My.Application.Info
Objeto My.Application.Log
Objeto My.Application.Info
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
My.Application.Info , confira AssemblyInfo.
7 Observação
Requisitos
Namespace:Microsoft.VisualBasic.ApplicationServices
Classe:AssemblyInfo
Confira também
Objeto My.Application
Objeto My.Application.Log
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
My.Application.Log , confira Log.
7 Observação
Você também pode usar classes no .NET Framework para registrar informações do
aplicativo. Para obter mais informações, confira Aplicativos de rastreamento e
instrumentação.
Requisitos
Namespace:Microsoft.VisualBasic.Logging
Classe:Log
Confira também
Objeto My.Application
Objeto My.Computer
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e as propriedades do objeto My.Computer ,
confira Computer. A classe base ServerComputer fornece os membros que estão
disponíveis em todos os projetos.
Requisitos
Namespace:Microsoft.VisualBasic.Devices
Confira também
Objeto My.Computer.Audio
Objeto My.Computer.Clipboard
Objeto My.Computer.Clock
Objeto My.Computer.FileSystem
Objeto My.Computer.FileSystem.SpecialDirectories
Objeto My.Computer.Info
Objeto My.Computer.Keyboard
Objeto My.Computer.Mouse
Objeto My.Computer.Network
Objeto My.Computer.Ports
Objeto My.Computer.Registry
Objeto My.Computer.Audio
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
My.Computer.Audio , confira Audio.
Requisitos
Namespace:Microsoft.VisualBasic.Devices
Classe:Audio
Confira também
Objeto My.Computer
Objeto My.Computer.Clipboard
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
My.Computer.Clipboard , confira ClipboardProxy.
Para obter mais informações, confira Como armazenar dados e ler na área de
transferência.
7 Observação
Requisitos
Namespace:Microsoft.VisualBasic.MyServices
Confira também
Clipboard
Objeto My.Computer
Objeto My.Computer.Clock
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Fornece propriedades para acessar a hora local atual e o Tempo Universal Coordenado
(equivalente ao Horário do Meridiano de Greenwich) no relógio do sistema.
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
My.Computer.Clock , confira Clock.
Requisitos
Namespace:Microsoft.VisualBasic.Devices
Classe:Clock
Confira também
Objeto My.Computer
Objeto My.Computer.FileSystem
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e propriedades do objeto
My.Computer.FileSystem , confira FileSystem.
Para saber mais informações, confira Acesso a Arquivos com o Visual Basic.
7 Observação
Requisitos
Namespace:Microsoft.VisualBasic.MyServices
Confira também
Objeto My.Computer.FileSystem.SpecialDirectories
Objeto My.Computer
Objeto
My.Computer.FileSystem.SpecialDirector
ies
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
My.Computer.FileSystem.SpecialDirectories , confira SpecialDirectories.
Para obter mais informações, confira Como recuperar o conteúdo do diretório Meus
Documentos.
Requisitos
Namespace:Microsoft.VisualBasic.MyServices
Confira também
Objeto My.Computer.FileSystem
Objeto My.Computer
Objeto My.Computer.Info
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre as propriedades do objeto My.Computer.Info , confira
ComputerInfo.
Requisitos
Namespace:Microsoft.VisualBasic.Devices
Classe:ComputerInfo
Confira também
Objeto My.Computer
Objeto My.Computer.Keyboard
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Fornece propriedades para acessar o estado atual do teclado, como quais teclas estão
pressionadas no momento e fornece um método para enviar pressionamentos de teclas
para a janela ativa.
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
My.Computer.Keyword , confira Keyboard.
Requisitos
Namespace:Microsoft.VisualBasic.Devices
Classe:Keyboard
Confira também
Objeto My.Computer
Objeto My.Computer.Mouse
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
My.Computer.Mouse , confira Mouse.
Requisitos
Namespace:Microsoft.VisualBasic.Devices
Classe:Mouse
Confira também
Objeto My.Computer
Objeto My.Computer.Network
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Fornece uma propriedade, um evento e métodos para interagir com a rede à qual o
computador está conectado.
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
My.Computer.Network , confira Network.
Requisitos
Namespace:Microsoft.VisualBasic.Devices
Classe:Network
Confira também
Objeto My.Computer
Objeto My.Computer.Ports
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
My.Computer.Ports , confira Ports.
7 Observação
Requisitos
Namespace:Microsoft.VisualBasic.Devices
Classe:Ports
Confira também
Objeto My.Computer
Objeto My.Computer.Registry
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
My.Computer.Registry , confira RegistryProxy.
7 Observação
Requisitos
Namespace:Microsoft.VisualBasic.MyServices
Confira também
Objeto My.Computer
Objeto My.Forms
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
O objeto My.Forms fornece uma instância de cada formulário no projeto atual. O nome
da propriedade é igual ao nome do formulário acessado pela propriedade.
Você pode acessar os formulários fornecidos pelo objeto My.Forms usando o nome do
formulário, sem qualificação. Como o nome da propriedade é igual ao nome do tipo do
formulário, isso permite acessar um formulário como se ele tivesse uma instância
padrão. Por exemplo, My.Forms.Form1.Show é equivalente a Form1.Show .
O objeto My.Forms expõe apenas os formulários associados ao projeto atual. Ele não
fornece acesso aos formulários declarados em DLLs referenciadas. Para acessar um
formulário fornecido por uma DLL, você deve usar o nome qualificado do formulário,
escrito como DllName.FormName.
Você pode usar a propriedade OpenForms para obter uma coleção de todos os
formulários abertos do aplicativo.
Propriedades
Cada propriedade do objeto My.Forms fornece acesso a uma instância de um formulário
no projeto atual. O nome da propriedade é igual ao nome do formulário que a
propriedade acessa e o tipo de propriedade é igual ao tipo do formulário.
7 Observação
Você pode testar se uma propriedade do objeto My.Forms armazena uma instância do
formulário usando o operador Is ou IsNot . Você pode usar esses operadores para
verificar se o valor da propriedade é Nothing .
7 Observação
Exemplo
Este exemplo altera o título do formulário padrão SidebarMenu .
VB
My.Forms.SidebarMenu.Text = newTitle
End If
End Sub
Para que este exemplo funcione, o projeto deve ter um formulário nomeado
SidebarMenu .
Site Não
Confira também
OpenForms
Form
Close
Objetos
Operador Is
Operador IsNot
Como acessar formulários de aplicativo
Objeto My.Log
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e as propriedades do objeto My.Log , confira
AspLog.
O objeto My.Log está disponível somente para aplicativos do ASP.NET. Para aplicativos
cliente, use o objeto My.Application.Log.
Requisitos
Namespace:Microsoft.VisualBasic.Logging
Classe:AspLog
Comentários
O objeto My.Request contém informações sobre a solicitação HTTP atual.
Exemplo
O exemplo a seguir obtém a coleção de cabeçalho do objeto My.Request e usa o objeto
My.Response para gravá-lo na página ASP.NET.
ASP.NET (VB)
<script runat="server">
coll = My.Request.Headers
Next
Next
End Sub
</script>
Confira também
HttpRequest
Objeto My.Response
Objeto My.Response
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Obtém o objeto HttpResponse associado a Page. Esse objeto permite que você envie
dados de resposta HTTP para um cliente e contém informações sobre essa resposta.
Comentários
O objeto My.Response contém o objeto HttpResponse atual associado à página.
Exemplo
O exemplo a seguir obtém a coleção de cabeçalho do objeto My.Request e usa o objeto
My.Response para gravá-lo na página ASP.NET.
ASP.NET (VB)
<script runat="server">
coll = My.Request.Headers
Next
Next
End Sub
</script>
Confira também
HttpResponse
Objeto My.Request
Objeto My.Resources
Artigo • 28/11/2022 • 3 minutos para o fim da leitura
Comentários
O objeto My.Resources fornece acesso aos recursos do aplicativo e permite que você
recupere recursos dinamicamente para o aplicativo. Para obter mais informações,
consulte Gerenciando recursos de aplicativo (.NET).
O objeto My.Resources expõe apenas recursos globais. Ele não fornece acesso a
arquivos de recursos associados a formulários. Você deve acessar os respectivos
recursos no formulário.
Propriedades
As propriedades do objeto My.Resources fornecem acesso somente leitura aos recursos
do aplicativo. Para adicionar ou remover recursos, use o Designer de Projeto. Você pode
acessar recursos adicionados por meio do Designer de Projeto usando
My.Resources. resourceName.
Imagens Bitmap
Ícones Icon
Áudio UnmanagedMemoryStream
Classes
O objeto My.Resources expõe cada arquivo de recurso como uma classe com
propriedades compartilhadas. O nome da classe é igual ao nome do arquivo de recurso.
Conforme descrito na seção anterior, os recursos em um arquivo de recurso são
expostos como propriedades na classe.
Exemplo 1
Este exemplo define o título de um formulário para o recurso de cadeia de caracteres
nomeado Form1Title no arquivo de recurso do aplicativo. Para que o exemplo funcione,
o aplicativo deve ter uma cadeia de caracteres nomeada Form1Title no arquivo de
recurso.
VB
Sub SetFormTitle()
Me.Text = My.Resources.Form1Title
End Sub
Exemplo 2
Este exemplo define o ícone do formulário como aquele nomeado Form1Icon
armazenado no arquivo de recurso do aplicativo. Para que o exemplo funcione, o
aplicativo deve ter um ícone nomeado Form1Icon no arquivo de recurso.
VB
Sub SetFormIcon()
Me.Icon = My.Resources.Form1Icon
End Sub
Exemplo 3
Este exemplo define a imagem em segundo plano de um formulário para o recurso de
imagem nomeado Form1Background , que está no arquivo de recurso do aplicativo. Para
que o exemplo funcione, o aplicativo deve ter um recurso de imagem nomeado
Form1Background no arquivo de recurso.
VB
Sub SetFormBackgroundImage()
Me.BackgroundImage = My.Resources.Form1Background
End Sub
Exemplo 4
Este exemplo reproduz o som armazenado como um recurso de áudio nomeado
Form1Greeting no arquivo de recurso do aplicativo. Para que o exemplo funcione, o
aplicativo deve ter um recurso de áudio nomeado Form1Greeting no arquivo de recurso.
O método My.Computer.Audio.Play está disponível apenas para aplicativos do Windows
Forms.
VB
Sub PlayFormGreeting()
My.Computer.Audio.Play(My.Resources.Form1Greeting,
AudioPlayMode.Background)
End Sub
Exemplo 5
Este exemplo recupera a versão de cultura francesa de um recurso de cadeia de
caracteres do aplicativo. O recurso é nomeado Message . Para alterar a cultura que o
objeto My.Resources usa, o exemplo usa ChangeUICulture.
Para que este exemplo funcione, o aplicativo deve ter uma cadeia de caracteres
nomeada Message no arquivo de recurso e o aplicativo deve ter a versão de cultura
francesa desse arquivo de recurso, Resources.fr-FR.resx. Se o aplicativo não tiver a
versão de cultura francesa do arquivo de recurso, o objeto My.Resource recuperará o
recurso do arquivo de recurso de cultura padrão.
VB
Sub ShowLocalizedMessage()
My.Application.ChangeUICulture("fr-FR")
MsgBox(My.Resources.Message)
My.Application.ChangeUICulture(culture)
End Sub
Confira também
Gerenciando recursos de aplicativo (.NET)
Recursos em aplicativos .NET
Objeto My.Settings
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Comentários
O objeto My.Settings fornece acesso às configurações do aplicativo e permite
armazenar e recuperar dinamicamente configurações de propriedade e outras
informações sobre o seu aplicativo. Para obter mais informações, consulte Gerenciando
configurações de aplicativo (.NET).
Propriedades
As propriedades do objeto My.Settings fornecem acesso às configurações do seu
aplicativo. Para adicionar ou remover configurações, use o Designer de Configurações.
Cada configuração tem um Name, Type, Scope e Value, que determinam como a
propriedade acessa cada configuração que aparece no objeto My.Settings :
Métodos
Método Descrição
Reload Recarrega as configurações do usuário com base nos últimos valores salvos.
Para Consulte
Criar uma grade de propriedades para Como criar grades de propriedades para
configurações do usuário configurações de usuário no Visual Basic
Exemplo
Este exemplo exibe o valor da configuração Nickname .
VB
Sub ShowNickname()
End Sub
Para que esse exemplo funcione, seu aplicativo deve ter uma configuração Nickname , do
tipo String .
Confira também
ApplicationSettingsBase
Como ler configurações do aplicativo no Visual Basic
Como alterar configurações do usuário no Visual Basic
Como persistir configurações de usuário no Visual Basic
Como criar grades de propriedades para configurações de usuário no Visual Basic
Gerenciando configurações de aplicativo (.NET)
Objeto My.User
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
Para obter informações sobre os métodos e as propriedades do objeto My.User , confira
Microsoft.VisualBasic.ApplicationServices.User.
Requisitos
Assembly: Biblioteca de Tempo de Execução do Visual Basic (em
Microsoft.VisualBasic.dll)
Confira também
IPrincipal
CurrentPrincipal
User
Current
Objeto My.WebServices
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Fornece propriedades para criar e acessar uma única instância de cada serviço Web XML
referenciado pelo projeto atual.
Comentários
O objeto My.WebServices fornece uma instância de cada serviço Web referenciado pelo
projeto atual. Cada instância é instanciada sob demanda. É possível acessar esses
serviços Web por meio das propriedades do objeto My.WebServices . O nome da
propriedade é igual ao nome do serviço Web acessado pela propriedade. Qualquer
classe que herda de SoapHttpClientProtocol é um serviço Web. Para obter informações
sobre como adicionar serviços Web a um projeto, confira Acesso a serviços Web de
aplicativo.
O objeto My.WebServices expõe apenas os serviços Web associados ao projeto atual. Ele
não fornece acesso aos serviços Web declarados em DLLs referenciadas. Para acessar
um serviço Web que uma DLL fornece, você precisa usar o nome qualificado do serviço
Web, no formato DllName.WebServiceName. Para obter mais informações, confira
Acesso a serviços Web de aplicativo.
Propriedades
Cada propriedade do objeto My.WebServices fornece acesso a uma instância de um
serviço Web referenciado pelo projeto atual. O nome da propriedade é o mesmo que o
nome do serviço Web que a propriedade acessa, e o tipo de propriedade é o mesmo
que o tipo do serviço Web.
7 Observação
usando My.WebServices.WindowsApplication1_Namespace1_Service1 .
Quando você acessa pela primeira vez uma das propriedades My.WebServices do objeto,
ele cria uma instância do serviço Web e o armazena. Os acessos seguintes dessa
propriedade retornam essa instância do serviço Web.
Você pode descartar um serviço Web atribuindo Nothing à propriedade desse serviço
Web. O setter de propriedade atribui Nothing ao valor armazenado. Se você atribuir
qualquer valor diferente de Nothing à propriedade, o setter gerará uma exceção
ArgumentException.
7 Observação
Exemplo
Este exemplo chama o método FahrenheitToCelsius do serviço Web XML
TemperatureConverter e retorna o resultado.
VB
Function ConvertFromFahrenheitToCelsius(
Return
My.WebServices.TemperatureConverter.FahrenheitToCelsius(dFahrenheit)
End Function
Para que este exemplo funcione, seu projeto precisa fazer referência a um serviço Web
chamado Converter e esse serviço Web precisa expor o método ConvertTemperature .
Para obter mais informações, confira Acesso a serviços Web de aplicativo.
Site Não
Confira também
SoapHttpClientProtocol
ArgumentException
Como acessar serviços Web de aplicativo
Objeto TextFieldParser
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Comentários
Para obter informações sobre os métodos e as propriedades do objeto
TextFieldParser , confira TextFieldParser.
Requisitos
Namespace:Microsoft.VisualBasic.FileIO
Classe:TextFieldParser
Nesta seção
Precedência do operador no Visual Basic
Operadores listados por funcionalidade
Tipos de dados de resultados do operador
Operador DirectCast
Operador TryCast
Operador NameOf
Novo operador
Operadores condicionais null
Operadores aritméticos
Operadores de atribuição
Operadores Bit Shift
Operadores de comparação
Operadores de concatenação
Operadores lógicos bit a bit
Operadores diversos
Seções relacionadas
Referência da linguagem Visual Basic
Precedência do operador no Visual
Basic
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Quando ocorrem várias operações em uma expressão, cada parte é avaliada e resolvida
em uma ordem predeterminada chamada precedência do operador.
Regras de precedência
Quando as expressões contêm operadores de mais de uma categoria, elas são avaliadas
de acordo com as seguintes regras:
Ordem de precedência
Os operadores são avaliados na seguinte ordem de precedência:
Operador Await
Await
Divisão de inteiros ( \ )
Adição e subtração ( + , – )
Operadores de comparação
Todos os operadores de comparação ( = , <> , < , <= , > , >= , Is , IsNot , Like ,
TypeOf ... Is )
Comentários
O operador = é apenas o de comparação de igualdade, não o de atribuição.
Capacidade de associação
Quando operadores de igual precedência aparecem juntos em uma expressão, como
multiplicação e divisão, o compilador avalia cada operação conforme a encontra da
esquerda para a direita. O exemplo a seguir ilustra essa situação.
VB
Dim n1 As Integer = 96 / 8 / 4
Dim n3 As Integer = 96 / (8 / 4)
A primeira expressão avalia a divisão 96/8 (que resulta em 12) e depois a divisão 12/4,
que resulta em três. Como o compilador avalia as operações para n1 da esquerda para
a direita, a avaliação é a mesma quando essa ordem é indicada explicitamente para n2 .
n1 e n2 têm um resultado de três. Por outro lado, n3 tem um resultado de 48, porque
VB
Dim a, b, c, d, e, f, g As Double
a = 8.0
b = 3.0
c = 4.0
d = 2.0
e = 1.0
f = a - b + c / d * e
f = (a - b) + ((c / d) * e)
g = (a - (b + c)) / (d * e)
Confira também
Operador =
Operador Is
Operador IsNot
Operador Like
Operador TypeOf
Operador Await
Operadores Listados por Funcionalidade
Operadores e Expressões
Tipos de dados de resultados do
operador (Visual Basic)
Artigo • 07/04/2023 • 8 minutos para o fim da leitura
O Visual Basic determina o tipo de dados de resultado de uma operação com base nos
tipos de dados dos operandos. Em alguns casos, esse pode ser um tipo de dados com um
intervalo maior do que o de qualquer operando.
Para obter mais informações sobre tipos de dados do Visual Basic, confira Tipos de dados.
Aritmética decimal
Observe que o tipo de dados Decimal não é ponto flutuante nem inteiro.
Se o operando de uma operação + , – , * , / ou Mod for Decimal e o outro não for Single
nem Double , o Visual Basic ampliará o outro operando para Decimal . Ele executa a
operação em Decimal , e o tipo de dados de resultado é Decimal .
Aritmético de ponto flutuante
O Visual Basic executa a aritmética de ponto flutuante no tipo Double, que é o tipo de
dados mais eficiente para essas operações. No entanto, se um operando for Single e o
outro não for Double , o Visual Basic executará a operação em Single . Ele amplia cada
operando conforme necessário para o tipo de dados apropriado antes da operação, e o
resultado tem esse tipo de dados.
Operadores / e ^
O operador / é definido apenas para os tipos de dados Decimal, Single e Double. O
Visual Basic amplia cada operando conforme necessário para o tipo de dados apropriado
antes da operação, e o resultado tem esse tipo de dados.
A tabela a seguir mostra os tipos de dados de resultado do operador / . Observe que esta
tabela é simétrica; para uma determinada combinação de tipos de dados de operando, o
tipo de dados de resultado é o mesmo, independentemente da ordem dos operandos.
O operador ^ é definido apenas para o tipo de dados Double . O Visual Basic amplia cada
operando conforme necessário para Double antes da operação, e o tipo de dados de
resultado é sempre Double .
Aritmética do inteiro
O tipo de dados de resultado de uma operação de inteiro depende dos tipos de dados
dos operandos. Em geral, o Visual Basic usa as seguintes políticas para determinar o tipo
de dados de resultado:
Observe que o tipo de dados de resultado pode não ser o mesmo que qualquer tipo de
dados operando.
7 Observação
O tipo de dados de resultado nem sempre é grande o suficiente para conter todos os
valores possíveis resultantes da operação. Uma exceção OverflowException poderá
ocorrer se o valor for muito grande para o tipo de dados de resultado.
Operadores unários + e –
A tabela a seguir mostra os tipos de dados de resultado dos dois operadores unários, + e
–.
Unário + Short SByte Byte Short UShort Integer UInteger long ULong
Unário – Short SByte Short Short Integer Integer long long Decimal
<< , >> Short SByte Byte Short UShort Integer UInteger long ULong
Se o operando esquerdo for Decimal , Single ou Double , o String Visual Basic tentará
convertê-lo em Long antes da operação, e o tipo de dados de resultado será Long . O
operando à direita (o número de posições de bit a serem deslocadas) deve ser Integer ou
um tipo que se expanda para Integer .
Boolean Short SByte Short Short Integer Integer long long Decimal
SByte SByte SByte Short Short Integer Integer long long Decimal
Byte Short Short Byte Short UShort Integer UInteger long ULong
Short Short Short Short Short Integer Integer long long Decimal
UShort Integer Integer UShort Integer UShort Integer UInteger long ULong
Integer Integer Integer Integer Integer Integer Integer long long Decimal
UInteger long long UInteger long UInteger long UInteger long ULong
Long long long long long long long long long Decimal
ULong Decimal Decimal ULong Decimal ULong Decimal ULong Decimal ULong
Operador \
A tabela a seguir mostra os tipos de dados de resultado do operador \ . Observe que esta
tabela é simétrica; para uma determinada combinação de tipos de dados de operando, o
tipo de dados de resultado é o mesmo, independentemente da ordem dos operandos.
Boolean Short SByte Short Short Integer Integer long long long
SByte SByte SByte Short Short Integer Integer long long long
Byte Short Short Byte Short UShort Integer UInteger long ULong
Short Short Short Short Short Integer Integer long long long
UShort Integer Integer UShort Integer UShort Integer UInteger long ULong
Integer Integer Integer Integer Integer Integer Integer long long long
UInteger long long UInteger long UInteger long UInteger long ULong
Long long long long long long long long long long
ULong long long ULong long ULong long ULong long ULong
Se o operando do operador \ for Decimal, Single ou Double, o Visual Basic tentará
convertê-lo em Long antes da operação, e o tipo de dados de resultado será Long .
O tipo de dados de resultado de uma operação lógica bi a bit depende dos tipos de dados
dos operandos. Observe que AndAlso e OrElse são definidos apenas para Boolean , e o
Visual Basic converte cada operando conforme necessário em Boolean antes de executar a
operação.
Not Booliano SByte Byte Short UShort Integer UInteger long ULong
Se o operando for Decimal , Single ou Double , o String Visual Basic tentará convertê-lo
em Long antes da operação, e o tipo de dados de resultado será Long .
Boolean Booliano SByte Short Short Integer Integer long long long
SByte SByte SByte Short Short Integer Integer long long long
Byte Short Short Byte Short UShort Integer UInteger long ULong
Short Short Short Short Short Integer Integer long long long
UShort Integer Integer UShort Integer UShort Integer UInteger long ULong
Integer Integer Integer Integer Integer Integer Integer long long long
UInteger long long UInteger long UInteger long UInteger long ULong
Long long long long long long long long long long
ULong long long ULong long ULong long ULong long ULong
Se um operando for Decimal , Single , Double ou String , o Visual Basic tentará convertê-
lo em Long antes da operação, e o tipo de dados de resultado será o mesmo que se esse
operando já tivesse sido Long .
Operadores diversos
O operador & é definido apenas para concatenação de operandos String . O Visual Basic
converte cada operando conforme necessário em String antes da operação, e o tipo de
dados de resultado é sempre String . Para as finalidades do operador & , todas as
conversões em String são consideradas ampliadas, mesmo que Option Strict seja On .
Confira também
Data Types
Operadores e Expressões
Operadores aritméticos no Visual Basic
Operadores de comparação no Visual Basic
Operadores
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores aritméticos
Operadores de comparação
Instrução Option Strict
Operadores listados por funcionalidade
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Consulte uma das categorias listadas abaixo ou abra esta parte do sumário da Ajuda
para ver uma lista alfabética de operadores do Visual Basic.
Categorias de operadores
Operadores Descrição
Confira também
Operadores e Expressões
Precedência do operador no Visual Basic
Operadores aritméticos (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Operador ^
Operador *
Operador /
Operador \
Operador Mod
Confira também
Precedência do operador no Visual Basic
Operadores aritméticos no Visual Basic
Operadores de atribuição (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Operador =
Operador ^=
Operador *=
Operador /=
Operador \=
Operador +=
Operador -=
<<Operador =
>>Operador =
&Operador =
Confira também
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operadores Bit Shift (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
<< Operador
>> Operador
Confira também
Operadores Listados por Funcionalidade
Operadores de comparação (Visual
Basic)
Artigo • 07/04/2023 • 5 minutos para o fim da leitura
Operador <
Operador <=
Operador >
Operador >=
Operador =
Operador <>
Operador Is
Operador IsNot
Operador Like
Esses operadores comparam duas expressões para determinar se são iguais e, caso
contrário, as diferenças entre elas. Is , IsNot e Like são discutidos detalhadamente em
páginas de Ajuda separadas. Os operadores de comparação relacional são discutidos
detalhadamente nesta página.
Sintaxe
VB
Partes
result
comparisonoperator
object1 , object2
string
pattern
Comentários
A tabela a seguir contém uma lista dos operadores de comparação relacional e as
condições que determinam se result é True ou False .
<= (Menor que ou igual a) expression1 <= expression2 expression1 > expression2
>= (Maior que ou igual a) expression1 >= expression2 expression1 < expression2
7 Observação
Comparação de Números
Quando você compara uma expressão de tipo Single a um tipo Double , a expressão
Single é convertida em Double . Esse comportamento é oposto ao comportamento
encontrado no Visual Basic 6.
Da mesma forma, quando você compara uma expressão de tipo Decimal a uma
expressão de tipo Single ou Double , a expressão Decimal é convertida em Single ou
Double . Para expressões Decimal , qualquer valor fracionário menor que 1E-28 pode se
perder. Essa perda de valor fracionário pode fazer com que dois valores sejam
comparados como iguais, quando não são. Por esse motivo, você deve ter cuidado ao
usar a igualdade ( = ) para comparar duas variáveis de ponto flutuante. É mais seguro
testar se o valor absoluto da diferença entre os dois números é menor que uma
pequena tolerância aceitável.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Dependência de Localidade
Quando você define Option Compare Text , o resultado de uma comparação de cadeia
de caracteres pode depender da localidade em que o aplicativo está em execução. Dois
caracteres podem ser comparados como iguais em uma localidade, mas não em outra.
Se você estiver usando uma comparação de cadeia de caracteres para tomar decisões
importantes, como aceitar uma tentativa de logon, você deve estar atento à
confidencialidade da localidade. Configure Option Compare Binary ou chame StrComp,
que leva em conta a localidade.
Sobrecarga
Os operadores de comparação relacional ( < , <= , > , >= , = , <> ) podem ser
sobrecarregados, o que significa que uma classe ou estrutura pode redefinir o
comportamento deles, quando um operando tiver o tipo dessa classe ou estrutura. Se o
código usar qualquer um desses operadores nessa classe ou estrutura, você deve
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir mostra vários usos de operadores de comparação relacional, que
você aplica para comparar expressões. Os operadores de comparação relacional
retornam um resultado Boolean , que representa se a expressão declarada é avaliada
como True . Quando você aplica os operadores > e < a cadeias de caracteres, a
comparação é feita usando a ordem de classificação alfabética normal das cadeias de
caracteres. Essa ordem pode depender da configuração de localidade. Determinar se a
classificação diferencia maiúsculas de minúsculas depende da configuração de
Comparação de Opções.
VB
Dim x As testClass
x = y
If x Is y Then
End If
Confira também
InvalidCastException
Operador =
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Solução de problemas de tipos de dados
Operadores de comparação no Visual Basic
Operadores de concatenação (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
& Operador
Operador +
Confira também
System.Text
StringBuilder
Precedência do operador no Visual Basic
Operadores de concatenação no Visual Basic
Operadores lógicos/bit a bit (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Operador And
Operador Not
Operador Or
Operador Xor
Operador AndAlso
Operador OrElse
Operador IsFalse
Operador IsTrue
Confira também
Precedência do operador no Visual Basic
Operadores lógicos e bit a bit no Visual Basic
Operadores diversos (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
operador AddressOf
operador Await
operador GetType
Expressão de função
operador If
operador TypeOf
Confira também
Operadores listados por funcionalidade
Operador & (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
result
expression1
Obrigatórios. Qualquer expressão com um tipo de dados que se amplia para String .
expression2
Obrigatórios. Qualquer expressão com um tipo de dados que se amplia para String .
Comentários
Se o tipo de dados de expression1 ou expression2 não for String , mas aumentar para
String , ele será convertido em String . Se qualquer um dos tipos de dados não for
ampliado para String , o compilador gerará um erro.
7 Observação
O operador & pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe
ou estrutura. Se o código usar esse operador em uma classe ou estrutura,
certifique-se de entender seu comportamento redefinido. Para obter mais
informações, confira Procedimentos de operador.
7 Observação
O caractere ampersand (&) também pode ser usado para identificar variáveis como
tipo Long . Para obter mais informações, confira Caracteres do Tipo.
Exemplo
Este exemplo usa o operador & para forçar a concatenação da cadeia de caracteres. O
resultado é um valor de cadeia de caracteres que representa a concatenação de dois
operandos da cadeia de caracteres.
VB
Confira também
&Operador =
Operadores de concatenação
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores de concatenação no Visual Basic
Operador &= (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
variableorproperty
expression
Comentários
O elemento no lado esquerdo do operador &= pode ser uma variável escalar simples,
uma propriedade ou um elemento de uma matriz. A variável ou propriedade não pode
ser ReadOnly. O operador &= concatena a expressão String à direita à variável ou
propriedade String à esquerda e atribui o resultado a essa última.
Sobrecarga
O operador & pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Sobrecarregar o operador & afeta o comportamento do operador &= . Se o
seu código usa &= em uma classe ou estrutura que sobrecarrega & , certifique-se de
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador &= para concatenar duas variáveis String e atribuir
o resultado à primeira delas.
VB
Confira também
& Operador
Operador +=
Operadores de Atribuição
Operadores de concatenação
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operador * (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
number1 * number2
Partes
Termo Definição
Result
O resultado é o produto de number1 e number2 .
Comentários
O tipo de dados do resultado depende dos tipos de operandos. A tabela a seguir
mostra como o tipo de dados do resultado é determinado.
Ambas as expressões são tipos de dados Um tipo de dados numérico apropriado para os
integrais (SByte, Byte, Short, UShort, Integer, tipos de dados de number1 e number2 . Consulte
UInteger, Long, ULong) as tabelas "Aritmética de inteiros" nos Tipos de
dados de resultados do operador.
Tipos de dados de operando Tipos de dados de resultado
Se uma expressão for avaliada como Nothing, ela será tratada como zero.
Sobrecarga
O operador * pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Se o código usar esse operador em uma classe ou estrutura, certifique-se de
entender seu comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
Este exemplo usa o operador * para multiplicar dois números. O resultado é o produto
dos dois operandos.
VB
testValue = 2 * 2
Confira também
Operador *=
Operadores aritméticos
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores aritméticos no Visual Basic
Operador *= (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Multiplica o valor de uma variável ou propriedade pelo valor de uma expressão e atribui
o resultado à variável ou à propriedade.
Sintaxe
VB
variableorproperty *= expression
Partes
variableorproperty
expression
Comentários
O elemento no lado esquerdo do operador *= pode ser uma variável escalar simples,
uma propriedade ou um elemento de uma matriz. A variável ou propriedade não pode
ser ReadOnly.
Sobrecarga
O operador * pode ser sobrecarregado, o que significa que uma classe ou estrutura pode
redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Sobrecarregar o operador * afeta o comportamento do operador *= . Se o
seu código usa *= em uma classe ou estrutura que sobrecarrega * , certifique-se de
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador *= para multiplicar uma variável Integer por um
segundo e atribuir o resultado à primeira variável.
VB
var1 *= var2
Confira também
Operador *
Operadores de Atribuição
Operadores aritméticos
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operador + (Visual Basic)
Artigo • 28/11/2022 • 5 minutos para o fim da leitura
Adiciona dois números ou retorna o valor positivo de uma expressão numérica. Também
pode ser usado para concatenar duas expressões de cadeia de caracteres.
Sintaxe
VB
expression1 + expression2
ou
VB
+expression1
Partes
Termo Definição
Result
Se expression1 e expression2 forem numéricos, o resultado será a soma aritmética.
Comentários
Em geral, + executa a adição aritmética quando possível e concatena somente quando
as duas expressões são cadeias de caracteres.
Se nenhuma das expressões for uma Object , o Visual Basic executará as ações a seguir.
As duas expressões são tipos de Adicionar. O tipo de dados do resultado será um tipo
dados numéricos ( SByte , Byte , numérico apropriado para os tipos de dados de
Short , UShort , Integer , UInteger , expression1 e expression2 . Consulte as tabelas
Long , ULong , Decimal , Single ou "Aritmética de inteiros" nos Tipos de dados de resultados
Double ) do operador.
Uma expressão é um tipo de dados Se Option Strict for On , gere um erro do compilador.
Uma expressão é um tipo de dados Adicionar, com Nothing com valor de zero.
numérico e a outra é Nothing
Uma expressão é uma cadeia de Concatenar, com Nothing com valor de "".
caracteres, e a outra é Nothing
numérico
Se Option Strict for Off , adicione.
A expressão Object contém uma cadeia de Se Option Strict for On , gere um erro do
caracteres e a outra é um tipo de dados compilador.
numérico
Se Option Strict for Off , converta implicitamente
a cadeia de caracteres Object em Double e
adicione.
A expressão Object contém uma cadeia de Se Option Strict for On , gere um erro do
caracteres e a outra é do tipo String compilador.
de caracteres
Se não for possível converter a cadeia de caracteres
Object em um valor numérico, gere uma exceção
InvalidCastException.
Se uma das expressões Object for avaliada como Nothing ou DBNull, o operador + a
tratará como um String com valor de "".
7 Observação
Sobrecarga
O operador + pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Se o código usar esse operador em uma classe ou estrutura, certifique-se de
entender seu comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador + para adicionar números. Se os operandos forem
numéricos, o Visual Basic calculará o resultado aritmético. O resultado aritmético
representa a soma dos dois operandos.
VB
sumNumber = 2 + 2
VB
Option Strict On
VB
VB
VB
VB
VB
' We do not recommend use of Option Strict Off for these operations.
Para eliminar a ambiguidade, você deve usar o operador & em vez de + para
concatenação.
Confira também
& Operador
Operadores de concatenação
Operadores aritméticos
Operadores Listados por Funcionalidade
Precedência do operador no Visual Basic
Operadores aritméticos no Visual Basic
Instrução Option Strict
Operador += (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
variableorproperty += expression
Partes
variableorproperty
expression
Comentários
O elemento no lado esquerdo do operador += pode ser uma variável escalar simples,
uma propriedade ou um elemento de uma matriz. A variável ou propriedade não pode
ser ReadOnly.
7 Observação
Sobrecarga
O operador + pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Sobrecarregar o operador + afeta o comportamento do operador += . Se o
seu código usa += em uma classe ou estrutura que sobrecarrega + , certifique-se de
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador += para combinar o valor de uma variável com
outra. A primeira parte usa += com variáveis numéricas para adicionar um valor a outro.
A segunda parte usa += com String variáveis para concatenar um valor com outro. Nos
dois casos, o resultado é atribuído à primeira variável.
VB
num1 += num2
VB
str1 += str2
Sintaxe
VB
variableorproperty = value
Partes
variableorproperty
value
Comentários
O elemento no lado esquerdo do sinal de igual ( = ) pode ser uma variável escalar
simples, uma propriedade ou um elemento de uma matriz. A variável ou propriedade
não pode ser ReadOnly. O operador = atribui o valor à direita à variável ou à
propriedade à esquerda.
7 Observação
Sobrecarga
O operador = pode ser sobrecarregado apenas como um operador de comparação
relacional, não como um operador de atribuição. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir demonstra o operador de atribuição. O valor à direita é atribuído à
variável da esquerda.
VB
testInt = 42
testObject = testInt
testObject = testString
testObject = testButton
Confira também
&Operador =
Operador *=
Operador +=
Operador -= (Visual Basic)
Operador /= (Visual Basic)
Operador \=
Operador ^=
Instruções
Operadores de comparação
ReadOnly (somente-leitura)
Inferência de Tipo de Variável Local
Operador - (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
expression1 – expression2
ou
VB
–expression1
Partes
expression1
expression2
Result
O resultado é a diferença entre expression1 e expression2 , ou o valor negativo de
expression1 .
O tipo de dados do resultado será um tipo numérico apropriado para os tipos de dados
de expression1 e expression2 . Consulte as tabelas "Aritmética de inteiros" nos Tipos de
dados de resultados do operador.
Comentários
No primeiro uso mostrado na sintaxe mostrada anteriormente, o operador – é o
operador de subtração aritmética binária para a diferença entre duas expressões
numéricas.
Se uma das expressões for avaliada como Nothing, o operador – a tratará como zero.
7 Observação
O operador – pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe
ou estrutura. Se o código usar esse operador em uma classe ou estrutura,
certifique-se de entender seu comportamento redefinido. Para obter mais
informações, consulte Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador – para calcular e retornar a diferença entre dois
números e, em seguida, para negativar um número.
VB
Confira também
Operador -= (Visual Basic)
Operadores aritméticos
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores aritméticos no Visual Basic
Operador -= (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
variableorproperty -= expression
Partes
variableorproperty
expression
Comentários
O elemento no lado esquerdo do operador -= pode ser uma variável escalar simples,
uma propriedade ou um elemento de uma matriz. A variável ou propriedade não pode
ser ReadOnly.
Sobrecarga
O Operador - (Visual Basic) pode ser sobrecarregado, o que significa que uma classe ou
estrutura pode redefinir seu comportamento quando um operando tem o tipo dessa
classe ou estrutura. Sobrecarregar o operador - afeta o comportamento do operador -
= . Se o seu código usa -= em uma classe ou estrutura que sobrecarrega - , certifique-se
de entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador -= para subtrair uma variável Integer de outra e
atribuir o resultado à última variável.
VB
var1 -= var2
Confira também
Operador - (Visual Basic)
Operadores de Atribuição
Operadores aritméticos
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operadores de comparação (Visual
Basic)
Artigo • 07/04/2023 • 5 minutos para o fim da leitura
Operador <
Operador <=
Operador >
Operador >=
Operador =
Operador <>
Operador Is
Operador IsNot
Operador Like
Esses operadores comparam duas expressões para determinar se são iguais e, caso
contrário, as diferenças entre elas. Is , IsNot e Like são discutidos detalhadamente em
páginas de Ajuda separadas. Os operadores de comparação relacional são discutidos
detalhadamente nesta página.
Sintaxe
VB
Partes
result
comparisonoperator
object1 , object2
string
pattern
Comentários
A tabela a seguir contém uma lista dos operadores de comparação relacional e as
condições que determinam se result é True ou False .
<= (Menor que ou igual a) expression1 <= expression2 expression1 > expression2
>= (Maior que ou igual a) expression1 >= expression2 expression1 < expression2
7 Observação
Comparação de Números
Quando você compara uma expressão de tipo Single a um tipo Double , a expressão
Single é convertida em Double . Esse comportamento é oposto ao comportamento
encontrado no Visual Basic 6.
Da mesma forma, quando você compara uma expressão de tipo Decimal a uma
expressão de tipo Single ou Double , a expressão Decimal é convertida em Single ou
Double . Para expressões Decimal , qualquer valor fracionário menor que 1E-28 pode se
perder. Essa perda de valor fracionário pode fazer com que dois valores sejam
comparados como iguais, quando não são. Por esse motivo, você deve ter cuidado ao
usar a igualdade ( = ) para comparar duas variáveis de ponto flutuante. É mais seguro
testar se o valor absoluto da diferença entre os dois números é menor que uma
pequena tolerância aceitável.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Dependência de Localidade
Quando você define Option Compare Text , o resultado de uma comparação de cadeia
de caracteres pode depender da localidade em que o aplicativo está em execução. Dois
caracteres podem ser comparados como iguais em uma localidade, mas não em outra.
Se você estiver usando uma comparação de cadeia de caracteres para tomar decisões
importantes, como aceitar uma tentativa de logon, você deve estar atento à
confidencialidade da localidade. Configure Option Compare Binary ou chame StrComp,
que leva em conta a localidade.
Sobrecarga
Os operadores de comparação relacional ( < , <= , > , >= , = , <> ) podem ser
sobrecarregados, o que significa que uma classe ou estrutura pode redefinir o
comportamento deles, quando um operando tiver o tipo dessa classe ou estrutura. Se o
código usar qualquer um desses operadores nessa classe ou estrutura, você deve
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir mostra vários usos de operadores de comparação relacional, que
você aplica para comparar expressões. Os operadores de comparação relacional
retornam um resultado Boolean , que representa se a expressão declarada é avaliada
como True . Quando você aplica os operadores > e < a cadeias de caracteres, a
comparação é feita usando a ordem de classificação alfabética normal das cadeias de
caracteres. Essa ordem pode depender da configuração de localidade. Determinar se a
classificação diferencia maiúsculas de minúsculas depende da configuração de
Comparação de Opções.
VB
Dim x As testClass
x = y
If x Is y Then
End If
Confira também
InvalidCastException
Operador =
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Solução de problemas de tipos de dados
Operadores de comparação no Visual Basic
Operadores de comparação (Visual
Basic)
Artigo • 07/04/2023 • 5 minutos para o fim da leitura
Operador <
Operador <=
Operador >
Operador >=
Operador =
Operador <>
Operador Is
Operador IsNot
Operador Like
Esses operadores comparam duas expressões para determinar se são iguais e, caso
contrário, as diferenças entre elas. Is , IsNot e Like são discutidos detalhadamente em
páginas de Ajuda separadas. Os operadores de comparação relacional são discutidos
detalhadamente nesta página.
Sintaxe
VB
Partes
result
comparisonoperator
object1 , object2
string
pattern
Comentários
A tabela a seguir contém uma lista dos operadores de comparação relacional e as
condições que determinam se result é True ou False .
<= (Menor que ou igual a) expression1 <= expression2 expression1 > expression2
>= (Maior que ou igual a) expression1 >= expression2 expression1 < expression2
7 Observação
Comparação de Números
Quando você compara uma expressão de tipo Single a um tipo Double , a expressão
Single é convertida em Double . Esse comportamento é oposto ao comportamento
encontrado no Visual Basic 6.
Da mesma forma, quando você compara uma expressão de tipo Decimal a uma
expressão de tipo Single ou Double , a expressão Decimal é convertida em Single ou
Double . Para expressões Decimal , qualquer valor fracionário menor que 1E-28 pode se
perder. Essa perda de valor fracionário pode fazer com que dois valores sejam
comparados como iguais, quando não são. Por esse motivo, você deve ter cuidado ao
usar a igualdade ( = ) para comparar duas variáveis de ponto flutuante. É mais seguro
testar se o valor absoluto da diferença entre os dois números é menor que uma
pequena tolerância aceitável.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Dependência de Localidade
Quando você define Option Compare Text , o resultado de uma comparação de cadeia
de caracteres pode depender da localidade em que o aplicativo está em execução. Dois
caracteres podem ser comparados como iguais em uma localidade, mas não em outra.
Se você estiver usando uma comparação de cadeia de caracteres para tomar decisões
importantes, como aceitar uma tentativa de logon, você deve estar atento à
confidencialidade da localidade. Configure Option Compare Binary ou chame StrComp,
que leva em conta a localidade.
Sobrecarga
Os operadores de comparação relacional ( < , <= , > , >= , = , <> ) podem ser
sobrecarregados, o que significa que uma classe ou estrutura pode redefinir o
comportamento deles, quando um operando tiver o tipo dessa classe ou estrutura. Se o
código usar qualquer um desses operadores nessa classe ou estrutura, você deve
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir mostra vários usos de operadores de comparação relacional, que
você aplica para comparar expressões. Os operadores de comparação relacional
retornam um resultado Boolean , que representa se a expressão declarada é avaliada
como True . Quando você aplica os operadores > e < a cadeias de caracteres, a
comparação é feita usando a ordem de classificação alfabética normal das cadeias de
caracteres. Essa ordem pode depender da configuração de localidade. Determinar se a
classificação diferencia maiúsculas de minúsculas depende da configuração de
Comparação de Opções.
VB
Dim x As testClass
x = y
If x Is y Then
End If
Confira também
InvalidCastException
Operador =
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Solução de problemas de tipos de dados
Operadores de comparação no Visual Basic
Operadores de comparação (Visual
Basic)
Artigo • 07/04/2023 • 5 minutos para o fim da leitura
Operador <
Operador <=
Operador >
Operador >=
Operador =
Operador <>
Operador Is
Operador IsNot
Operador Like
Esses operadores comparam duas expressões para determinar se são iguais e, caso
contrário, as diferenças entre elas. Is , IsNot e Like são discutidos detalhadamente em
páginas de Ajuda separadas. Os operadores de comparação relacional são discutidos
detalhadamente nesta página.
Sintaxe
VB
Partes
result
comparisonoperator
object1 , object2
string
pattern
Comentários
A tabela a seguir contém uma lista dos operadores de comparação relacional e as
condições que determinam se result é True ou False .
<= (Menor que ou igual a) expression1 <= expression2 expression1 > expression2
>= (Maior que ou igual a) expression1 >= expression2 expression1 < expression2
7 Observação
Comparação de Números
Quando você compara uma expressão de tipo Single a um tipo Double , a expressão
Single é convertida em Double . Esse comportamento é oposto ao comportamento
encontrado no Visual Basic 6.
Da mesma forma, quando você compara uma expressão de tipo Decimal a uma
expressão de tipo Single ou Double , a expressão Decimal é convertida em Single ou
Double . Para expressões Decimal , qualquer valor fracionário menor que 1E-28 pode se
perder. Essa perda de valor fracionário pode fazer com que dois valores sejam
comparados como iguais, quando não são. Por esse motivo, você deve ter cuidado ao
usar a igualdade ( = ) para comparar duas variáveis de ponto flutuante. É mais seguro
testar se o valor absoluto da diferença entre os dois números é menor que uma
pequena tolerância aceitável.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Dependência de Localidade
Quando você define Option Compare Text , o resultado de uma comparação de cadeia
de caracteres pode depender da localidade em que o aplicativo está em execução. Dois
caracteres podem ser comparados como iguais em uma localidade, mas não em outra.
Se você estiver usando uma comparação de cadeia de caracteres para tomar decisões
importantes, como aceitar uma tentativa de logon, você deve estar atento à
confidencialidade da localidade. Configure Option Compare Binary ou chame StrComp,
que leva em conta a localidade.
Sobrecarga
Os operadores de comparação relacional ( < , <= , > , >= , = , <> ) podem ser
sobrecarregados, o que significa que uma classe ou estrutura pode redefinir o
comportamento deles, quando um operando tiver o tipo dessa classe ou estrutura. Se o
código usar qualquer um desses operadores nessa classe ou estrutura, você deve
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir mostra vários usos de operadores de comparação relacional, que
você aplica para comparar expressões. Os operadores de comparação relacional
retornam um resultado Boolean , que representa se a expressão declarada é avaliada
como True . Quando você aplica os operadores > e < a cadeias de caracteres, a
comparação é feita usando a ordem de classificação alfabética normal das cadeias de
caracteres. Essa ordem pode depender da configuração de localidade. Determinar se a
classificação diferencia maiúsculas de minúsculas depende da configuração de
Comparação de Opções.
VB
Dim x As testClass
x = y
If x Is y Then
End If
Confira também
InvalidCastException
Operador =
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Solução de problemas de tipos de dados
Operadores de comparação no Visual Basic
Operadores de comparação (Visual
Basic)
Artigo • 07/04/2023 • 5 minutos para o fim da leitura
Operador <
Operador <=
Operador >
Operador >=
Operador =
Operador <>
Operador Is
Operador IsNot
Operador Like
Esses operadores comparam duas expressões para determinar se são iguais e, caso
contrário, as diferenças entre elas. Is , IsNot e Like são discutidos detalhadamente em
páginas de Ajuda separadas. Os operadores de comparação relacional são discutidos
detalhadamente nesta página.
Sintaxe
VB
Partes
result
comparisonoperator
object1 , object2
string
pattern
Comentários
A tabela a seguir contém uma lista dos operadores de comparação relacional e as
condições que determinam se result é True ou False .
<= (Menor que ou igual a) expression1 <= expression2 expression1 > expression2
>= (Maior que ou igual a) expression1 >= expression2 expression1 < expression2
7 Observação
Comparação de Números
Quando você compara uma expressão de tipo Single a um tipo Double , a expressão
Single é convertida em Double . Esse comportamento é oposto ao comportamento
encontrado no Visual Basic 6.
Da mesma forma, quando você compara uma expressão de tipo Decimal a uma
expressão de tipo Single ou Double , a expressão Decimal é convertida em Single ou
Double . Para expressões Decimal , qualquer valor fracionário menor que 1E-28 pode se
perder. Essa perda de valor fracionário pode fazer com que dois valores sejam
comparados como iguais, quando não são. Por esse motivo, você deve ter cuidado ao
usar a igualdade ( = ) para comparar duas variáveis de ponto flutuante. É mais seguro
testar se o valor absoluto da diferença entre os dois números é menor que uma
pequena tolerância aceitável.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Dependência de Localidade
Quando você define Option Compare Text , o resultado de uma comparação de cadeia
de caracteres pode depender da localidade em que o aplicativo está em execução. Dois
caracteres podem ser comparados como iguais em uma localidade, mas não em outra.
Se você estiver usando uma comparação de cadeia de caracteres para tomar decisões
importantes, como aceitar uma tentativa de logon, você deve estar atento à
confidencialidade da localidade. Configure Option Compare Binary ou chame StrComp,
que leva em conta a localidade.
Sobrecarga
Os operadores de comparação relacional ( < , <= , > , >= , = , <> ) podem ser
sobrecarregados, o que significa que uma classe ou estrutura pode redefinir o
comportamento deles, quando um operando tiver o tipo dessa classe ou estrutura. Se o
código usar qualquer um desses operadores nessa classe ou estrutura, você deve
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir mostra vários usos de operadores de comparação relacional, que
você aplica para comparar expressões. Os operadores de comparação relacional
retornam um resultado Boolean , que representa se a expressão declarada é avaliada
como True . Quando você aplica os operadores > e < a cadeias de caracteres, a
comparação é feita usando a ordem de classificação alfabética normal das cadeias de
caracteres. Essa ordem pode depender da configuração de localidade. Determinar se a
classificação diferencia maiúsculas de minúsculas depende da configuração de
Comparação de Opções.
VB
Dim x As testClass
x = y
If x Is y Then
End If
Confira também
InvalidCastException
Operador =
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Solução de problemas de tipos de dados
Operadores de comparação no Visual Basic
Operador << (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
result
pattern
amount
Comentários
Os deslocamentos aritméticos não são circulares, o que significa que os bits deslocados
de uma extremidade do resultado não são reintroduzidos na outra extremidade. Em um
deslocamento aritmético à esquerda, os bits deslocados para além do intervalo do tipo
de dados de resultado são descartados e as posições de bit desocupadas à direita são
definidas como zero.
Para evitar o deslocamento de mais bits do que o resultado pode conter, o Visual Basic
mascara o valor de amount com uma máscara de tamanho que corresponda ao tipo de
dados de pattern . O AND binário desses valores é usado para a quantidade de
deslocamento. As máscaras de tamanho são as seguintes:
Tipo de dados de Máscara de tamanho Máscara de tamanho
pattern (decimal) (hexadecimal)
Se amount for zero, o valor de result será idêntico ao de pattern . Se amount for
negativo, ele será tomado como um valor sem sinal e mascarado com a máscara de
tamanho apropriada.
7 Observação
O operador << pode ser sobrecarregado, o que significa que uma classe ou
estrutura pode redefinir seu comportamento quando um operando tem o tipo
dessa classe ou estrutura. Se o código usar esse operador em uma classe ou
estrutura, certifique-se de entender seu comportamento redefinido. Para obter
mais informações, confira Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador << para executar turnos aritméticos à esquerda em
valores integrais. O resultado sempre tem o mesmo tipo de dados que o da expressão
que está sendo deslocada.
VB
Confira também
Operadores Bit Shift
Operadores de Atribuição
<<Operador =
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores aritméticos no Visual Basic
Operador <<= (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
variableorproperty
amount
Comentários
O elemento no lado esquerdo do operador <<= pode ser uma variável escalar simples,
uma propriedade ou um elemento de uma matriz. A variável ou propriedade não pode
ser ReadOnly.
Os deslocamentos aritméticos não são circulares, o que significa que os bits deslocados
de uma extremidade do resultado não são reintroduzidos na outra extremidade. Em um
deslocamento aritmético à esquerda, os bits deslocados para além do intervalo do tipo
de dados de resultado são descartados e as posições de bit desocupadas à direita são
definidas como zero.
Sobrecarga
O operador << pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Sobrecarregar o operador << afeta o comportamento do operador <<= . Se o
seu código usa <<= em uma classe ou estrutura que sobrecarrega << , certifique-se de
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador <<= para mudar o padrão de bit de uma variável
Integer deixada pela quantidade especificada e atribuir o resultado à variável.
VB
Confira também
<< Operador
Operadores de Atribuição
Operadores Bit Shift
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operador >> (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
Partes
result
pattern
amount
Comentários
Os deslocamentos aritméticos não são circulares, o que significa que os bits deslocados
de uma extremidade do resultado não são reintroduzidos na outra extremidade. Em um
deslocamento aritmético para a direita, os bits deslocados além da posição de bit mais à
direita são descartados, e o bit mais à esquerda (sinal) é propagado para as posições de
bit desocupadas à esquerda. Isso significa que, se pattern tiver um valor negativo, as
posições desocupadas serão definidas como uma; caso contrário, elas serão definidas
como zero.
Observe que os tipos de dados Byte , UShort , UInteger e ULong não têm sinal, portanto,
não há nenhum bit de sinal a ser propagado. Se pattern for de qualquer tipo sem sinal,
as posições desocupadas sempre serão definidas como zero.
Para evitar o deslocamento de mais bits do que o resultado pode conter, o Visual Basic
mascara o valor de amount com uma máscara de tamanho correspondente ao tipo de
dados de pattern . O AND binário desses valores é usado para a quantidade de
deslocamento. As máscaras de tamanho são as seguintes:
Se amount for zero, o valor de result será idêntico ao de pattern . Se amount for
negativo, ele será tomado como um valor sem sinal e mascarado com a máscara de
tamanho apropriada.
Sobrecarga
O operador >> pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Se o código usar esse operador em uma classe ou estrutura, certifique-se de
entender seu comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador >> para executar turnos aritméticos à direita em
valores integrais. O resultado sempre tem o mesmo tipo de dados que o da expressão
que está sendo deslocada.
VB
VB
Confira também
Operadores Bit Shift
Operadores de Atribuição
>>Operador =
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores aritméticos no Visual Basic
Operador >>= (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
variableorproperty
amount
Comentários
O elemento no lado esquerdo do operador >>= pode ser uma variável escalar simples,
uma propriedade ou um elemento de uma matriz. A variável ou propriedade não pode
ser ReadOnly.
Os deslocamentos aritméticos não são circulares, o que significa que os bits deslocados
de uma extremidade do resultado não são reintroduzidos na outra extremidade. Em um
deslocamento aritmético para a direita, os bits deslocados além da posição de bit mais à
direita são descartados, e o bit mais à esquerda é propagado para as posições de bit
desocupadas à esquerda. Isso significa que, se variableorproperty tiver um valor
negativo, as posições desocupadas serão definidas como uma. Se variableorproperty
for positivo ou se o tipo de dados for um tipo sem sinal, as posições desocupadas serão
definidas como zero.
Sobrecarga
O operador >> pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Sobrecarregar o operador >> afeta o comportamento do operador >>= . Se o
seu código usa >>= em uma classe ou estrutura que sobrecarrega >> , certifique-se de
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador >>= para mudar o padrão de bit de uma variável
Integer para a direita pela quantidade especificada e atribuir o resultado à variável.
VB
' The value of var is now 2 (two bits were lost off the right end).
Confira também
>> Operador
Operadores de Atribuição
Operadores Bit Shift
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operador / (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
expression1 / expression2
Partes
expression1
expression2
Result
O resultado é o quociente total de expression1 dividido por expression2 , incluindo
qualquer resto.
Comentários
O tipo de dados do resultado depende dos tipos de operandos. A tabela a seguir
mostra como o tipo de dados do resultado é determinado.
Ambas as expressões são tipos de dados integrais (SByte, Byte, Short, Double
UShort, Integer, UInteger, Long, ULong)
Antes que a divisão seja executada, todas as expressões numéricas integrais são
ampliadas para Double . Se você atribuir o resultado a um tipo de dados integral, o
Visual Basic tentará converter o resultado desse tipo Double . Isso poderá gerar uma
exceção se o resultado não se encaixar nesse tipo. Em particular, confira "Tentativa de
Divisão por Zero" nesta página de Ajuda.
Se expression1 ou expression2 for avaliada como Nothing, ela será tratada como zero.
Integral (com A tentativa de conversão de volta para o tipo integral gera OverflowException
ou sem sinal) porque os tipos integrais não podem aceitar PositiveInfinity, NegativeInfinity
ou NaN
7 Observação
O operador / pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe
ou estrutura. Se o código usar esse operador em uma classe ou estrutura,
certifique-se de entender seu comportamento redefinido. Para obter mais
informações, confira Procedimentos de operador.
Exemplo
Este exemplo usa o operador / para executar a divisão de ponto flutuante. O resultado
é o quociente dos dois operandos.
VB
resultValue = 10 / 4
resultValue = 10 / 3
Confira também
Operador /= (Visual Basic)
Operador \ (Visual Basic)
Tipos de Dados de Resultados do Operador
Operadores aritméticos
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores aritméticos no Visual Basic
Operador /= (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Divide o valor de uma variável ou propriedade pelo valor de uma expressão e atribui o
resultado do ponto flutuante à variável ou à propriedade.
Sintaxe
VB
variableorproperty /= expression
Partes
variableorproperty
expression
Comentários
O elemento no lado esquerdo do operador /= pode ser uma variável escalar simples,
uma propriedade ou um elemento de uma matriz. A variável ou propriedade não pode
ser ReadOnly.
Sobrecarga
O Operador / (Visual Basic) pode ser sobrecarregado, o que significa que uma classe ou
estrutura pode redefinir seu comportamento quando um operando tem o tipo dessa
classe ou estrutura. Sobrecarregar o operador / afeta o comportamento do operador
/= . Se o seu código usa /= em uma classe ou estrutura que sobrecarrega / , certifique-
se de entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador /= para dividir uma variável Integer por um
segundo e atribuir o quociente à primeira variável.
VB
var1 /= var2
Confira também
Operador / (Visual Basic)
Operador \=
Operadores de Atribuição
Operadores aritméticos
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operador \ (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
expression1 \ expression2
Partes
expression1
expression2
Result
O resultado é quociente de inteiro de expression1 dividido por expression2 , que
descarta qualquer resto e retém apenas a parte do inteiro. Isso é conhecido como
truncamento.
O tipo de dados do resultado será um tipo numérico apropriado para os tipos de dados
de expression1 e expression2 . Consulte as tabelas "Aritmética de inteiros" nos Tipos de
dados de resultados do operador.
Comentários
Antes de executar a divisão, o Visual Basic tenta converter qualquer expressão numérica
de ponto flutuante em Long . Se Option Strict for On , ocorrerá um erro do compilador.
Se Option Strict for Off , OverflowException será possível se o valor estiver fora do
intervalo do Tipo de Dados Longo. A conversão Long também está sujeita ao
arredondamento bancário. Para obter mais informações, confira "`Partes Fracionais" em
Funções de Conversão de Tipo.
Se expression1 ou expression2 for avaliada como Nothing, ela será tratada como zero.
7 Observação
O operador \ pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe
ou estrutura. Se o código usar esse operador em uma classe ou estrutura,
certifique-se de entender seu comportamento redefinido. Para obter mais
informações, confira Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador \ para executar a divisão de inteiros. O resultado é
um inteiro que representa o quociente inteiro dos dois operandos, com o restante
descartado.
VB
resultValue = 11 \ 4
resultValue = 9 \ 3
resultValue = 100 \ 3
resultValue = 67 \ -3
Confira também
Operador \=
Operador / (Visual Basic)
Instrução Option Strict
Operadores aritméticos
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores aritméticos no Visual Basic
Operador \=
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Divide o valor de uma variável ou propriedade pelo valor de uma expressão e atribui o
resultado do inteiro à variável ou propriedade.
Sintaxe
VB
variableorproperty \= expression
Partes
variableorproperty
expression
Comentários
O elemento no lado esquerdo do operador \= pode ser uma variável escalar simples,
uma propriedade ou um elemento de uma matriz. A variável ou propriedade não pode
ser ReadOnly.
Para obter mais informações sobre a divisão de inteiros, confira Operador \ (Visual
Basic).
Sobrecarga
O operador \ pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Sobrecarregar o operador \ afeta o comportamento do operador \= . Se o
seu código usa \= em uma classe ou estrutura que sobrecarrega \ , certifique-se de
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador \= para dividir uma variável Integer por um
segundo e atribuir o resultado do inteiro à primeira variável.
VB
var1 \= var2
Confira também
Operador \ (Visual Basic)
Operador /= (Visual Basic)
Operadores de Atribuição
Operadores aritméticos
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operador ^ (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
number ^ exponent
Partes
number
exponent
Result
O resultado é number elevado à potência de exponent , sempre como um valor Double .
Comentários
O Visual Basic sempre executa exponencialidade no Tipo de Dados Duplo.
7 Observação
O operador ^ pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe
ou estrutura. Se o código usar esse operador em uma classe ou estrutura,
certifique-se de entender seu comportamento redefinido. Para obter mais
informações, confira Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador ^ para elevar um número à potência de um
expoente. O resultado é o primeiro operando elevado à potência do segundo.
VB
exp1 = 2 ^ 2
exp2 = 3 ^ 3 ^ 3
exp3 = (-5) ^ 3
exp4 = (-5) ^ 4
exp6 é definido como 0,5 (1,0 dividido pela raiz cúbica de 8).
exp4 = -5 ^ 4 seria calculado como –(5 à quarta potência), o que resultaria em -625.
exp6 = 8 ^ -1.0 / 3.0 seria calculado como (8 elevado a -1, ou 0,125) dividido por 3,0,
o que resultaria em 0,041666666666666666666666666666667.
Confira também
Operador ^=
Operadores aritméticos
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores aritméticos no Visual Basic
Operador ^= (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
variableorproperty ^= expression
Partes
variableorproperty
expression
Comentários
O elemento no lado esquerdo do operador ^= pode ser uma variável escalar simples,
uma propriedade ou um elemento de uma matriz. A variável ou propriedade não pode
ser ReadOnly.
Sobrecarga
O operador ^ pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir o comportamento quando um operando tem o tipo dessa classe ou
estrutura. Sobrecarregar o operador ^ afeta o comportamento do operador ^= . Se o
seu código usa ^= em uma classe ou estrutura que sobrecarrega ^ , certifique-se de
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
O exemplo a seguir usa o operador ^= para aumentar o valor de uma variável Integer à
potência de uma segunda e atribuir o resultado à primeira delas.
VB
var1 ^= var2
Confira também
Operador ^
Operadores de Atribuição
Operadores aritméticos
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
?. Operadores condicionais nulos ?. e ?()
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Testa o valor do operando esquerdo para nulo ( Nothing )antes de executar um acesso de
membro ( ?. ) ou uma operação de índice ( ?() ); retorna Nothing se o operando
esquerdo é avaliado como Nothing . Observe que, em expressões que normalmente
retornam tipos de valor, o operador nulo condicional retorna um Nullable<T>.
Esses operadores ajudam a escrever menos código para lidar com verificações de
nulidade, especialmente ao entrar em estruturas de dados. Por exemplo:
VB
VB
length = customers.Length
Else
length = Nothing
End If
Às vezes, você precisa executar uma ação em um objeto que pode ser nulo, com base
no valor de um membro booliano nesse objeto (como a propriedade booliana
IsAllowedFreeShipping no seguinte exemplo):
VB
ApplyFreeShippingToOrders(customer)
End If
Você pode reduzir o código e evitar a verificação manual de nulo usando o operador
nulo condicional da seguinte maneira:
VB
VB
A?.B?.C?(E)
Outro uso para o acesso de membro condicional nulo é invocar delegados de maneira
thread-safe com muito menos código. O exemplo a seguir define dois tipos,
NewsBroadcaster e NewsReceiver . Itens de notícias são enviados ao receptor pelo
delegado NewsBroadcaster.SendNews .
VB
End Sub
End Sub
End Module
NewsBroadcaster.Register(AddressOf Me.DisplayNews)
End Sub
Console.WriteLine(newsItem)
End Sub
End Class
VB
SendNews("Just in...")
End If
VB
SendNews?.Invoke("Just in...")
A nova forma é thread-safe porque o compilador gera código para avaliar SendNews
somente uma vez, mantendo o resultado em uma variável temporária. Você precisa
chamar explicitamente o método Invoke porque não há nenhuma sintaxe de invocação
de delegado condicional nulo SendNews?(String) .
Confira também
Operadores (Visual Basic)
Guia de programação do Visual Basic
Referência da linguagem Visual Basic
?. Operadores condicionais nulos ?. e ?()
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Testa o valor do operando esquerdo para nulo ( Nothing )antes de executar um acesso de
membro ( ?. ) ou uma operação de índice ( ?() ); retorna Nothing se o operando
esquerdo é avaliado como Nothing . Observe que, em expressões que normalmente
retornam tipos de valor, o operador nulo condicional retorna um Nullable<T>.
Esses operadores ajudam a escrever menos código para lidar com verificações de
nulidade, especialmente ao entrar em estruturas de dados. Por exemplo:
VB
VB
length = customers.Length
Else
length = Nothing
End If
Às vezes, você precisa executar uma ação em um objeto que pode ser nulo, com base
no valor de um membro booliano nesse objeto (como a propriedade booliana
IsAllowedFreeShipping no seguinte exemplo):
VB
ApplyFreeShippingToOrders(customer)
End If
Você pode reduzir o código e evitar a verificação manual de nulo usando o operador
nulo condicional da seguinte maneira:
VB
VB
A?.B?.C?(E)
Outro uso para o acesso de membro condicional nulo é invocar delegados de maneira
thread-safe com muito menos código. O exemplo a seguir define dois tipos,
NewsBroadcaster e NewsReceiver . Itens de notícias são enviados ao receptor pelo
delegado NewsBroadcaster.SendNews .
VB
End Sub
End Sub
End Module
NewsBroadcaster.Register(AddressOf Me.DisplayNews)
End Sub
Console.WriteLine(newsItem)
End Sub
End Class
VB
SendNews("Just in...")
End If
VB
SendNews?.Invoke("Just in...")
A nova forma é thread-safe porque o compilador gera código para avaliar SendNews
somente uma vez, mantendo o resultado em uma variável temporária. Você precisa
chamar explicitamente o método Invoke porque não há nenhuma sintaxe de invocação
de delegado condicional nulo SendNews?(String) .
Confira também
Operadores (Visual Basic)
Guia de programação do Visual Basic
Referência da linguagem Visual Basic
Operador AddressOf (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
AddressOf procedurename
Partes
procedurename
Comentários
O operador AddressOf cria um delegado que aponta para o sub ou função especificado
por procedurename . Quando o procedimento especificado é um método de instância, o
delegado se refere à instância e ao método. Em seguida, quando o delegado é
invocado, o método especificado da instância especificada é chamado.
Exemplo 1
Este exemplo usa o operador AddressOf com o objetivo de designar um delegado para
manipular o evento Click de um botão.
VB
Exemplo 2
O exemplo a seguir usa o operador AddressOf para designar a função de inicialização
para um thread.
VB
i = i + 1
Loop
End Sub
Sub UseThread()
t.Start()
End Sub
Confira também
Instrução Declare
Instrução Function
Instrução Sub
Representantes
Operador And (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Desenvolve uma conjunção lógica em duas expressões Boolean ou uma conjunção bit a
bit em duas expressões numéricas.
Sintaxe
VB
Partes
result
um valor numérico que representa a conjunção bit a bit de dois padrões de bit
numéricos.
expression1
expression2
Comentários
Para comparação booliana, result é True se e somente se ambos expression1 e
expression2 resultarem em True . A tabela a seguir ilustra como result é determinado.
Quando aplicado a valores numéricos, o operador And executa uma comparação bit a
bit dos bits posicionados de forma idêntica em duas expressões numéricas e define o
bit correspondente em result de acordo com a tabela a seguir.
1 1 1
1 0 0
0 1 0
0 0 0
7 Observação
Como os operadores lógicos e bit a bit têm uma precedência menor do que outros
operadores aritméticos e relacionais, todas as operações bit a bit devem ser
colocadas entre parênteses para garantir resultados precisos.
Tipos de dados
Se os operandos consistirem em uma expressão Boolean e uma expressão numérica, o
Visual Basic converterá a expressão Boolean em um valor numérico (–1 para True e 0
para False ) e executará uma operação bit a bit.
Para uma comparação booliana, o tipo de dados do resultado será Boolean . Para uma
comparação bit a bit, o tipo de dados de resultado será um tipo numérico apropriado
para os tipos de dados de expression1 e expression2 . Consulte a tabela "Comparações
relacionais e bit a bit" nos Tipos de dados de resultados do operador.
7 Observação
O operador And pode ser sobrecarregado, o que significa que uma classe ou
estrutura pode redefinir seu comportamento quando um operando tem o tipo
dessa classe ou estrutura. Se o código usar esse operador em uma classe ou
estrutura, certifique-se de entender seu comportamento redefinido. Para obter
mais informações, confira Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o operador And para executar uma conjunção lógica em duas
expressões. O resultado é um valor Boolean que representa se ambas as expressões são
True .
VB
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Exemplo 2
O exemplo a seguir usa o operador And para executar a conjunção lógica nos bits
individuais de duas expressões numéricas. O bit no padrão de resultado será definido se
os bits correspondentes nos operandos forem definidos como 1.
VB
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
secondPattern = (a And c)
thirdPattern = (b And c)
Confira também
Operadores lógicos/bit a bit (Visual Basic)
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operador AndAlso
Operadores lógicos e bit a bit no Visual Basic
Operador AndAlso (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
Partes
Termo Definição
Comentários
Uma operação lógica será considerada de curto-circuito se o código compilado puder
ignorar a avaliação de uma expressão, a depender do resultado de outra expressão. Se o
resultado da primeira expressão avaliada determinar o resultado final da operação, não
será necessário avaliar a segunda expressão, pois ela não poderá alterar o resultado
final. O curto-circuito pode melhorar o desempenho se a expressão ignorada for
complexa ou se envolver chamadas de procedimento.
Se ambas as expressões forem avaliadas como True , então result retornará True . A
tabela a seguir ilustra como result é determinado.
Tipos de dados
O operador AndAlso é definido apenas para o tipo de dados booliano. O Visual Basic
converte cada operando conforme necessário para Boolean antes de avaliar a
expressão. Se você atribuir o resultado a um tipo numérico, o Visual Basic o converterá
de Boolean para esse tipo, de modo que False se torne 0 e True se torne -1 .
Para
obter mais informações, consulte Conversões de tipo booliano.
Sobrecarga
O operador And e o operador IsFalse podem ser sobrecarregados, o que significa que
uma classe ou estrutura pode redefinir seu comportamento quando um operando tiver
o tipo dessa classe ou estrutura. Sobrecarregar os operadores And e IsFalse afeta o
comportamento do operador AndAlso . Se o seu código usar AndAlso em uma classe ou
estrutura que sobrecarrega And e IsFalse , certifique-se de entender o comportamento
redefinido. Para obter mais informações, confira Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o operador AndAlso para executar uma conjunção lógica em
duas expressões. O resultado é um valor Boolean que representa se toda a expressão
conjunta é verdadeira. Se a primeira expressão for False , a segunda não será avaliada.
VB
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Exemplo 2
O exemplo a seguir mostra um procedimento Function que procura um determinado
valor entre os elementos de uma matriz. Se a matriz estiver vazia, ou se o comprimento
da matriz tiver sido excedido, a instrução While não testará o elemento de matriz em
relação ao valor de pesquisa.
VB
Dim i As Integer = 0
i += 1
End While
Return i
End Function
Confira também
Operadores lógicos/bit a bit (Visual Basic)
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operador And
Operador IsFalse
Operadores lógicos e bit a bit no Visual Basic
Operador Await (Visual Basic)
Artigo • 28/11/2022 • 4 minutos para o fim da leitura
O método no qual Await é usado deve ter um modificador Async. Esse tipo de método,
definido pelo uso do modificador Async e, geralmente, contendo uma ou mais
expressões Await , é conhecido como um método assíncrono.
7 Observação
VB
' To use the HttpClient type in desktop apps, you must include a using
directive and add a
' . . .
' Equivalently, now that you see how it works, you can write the same
thing in a single line.
' . . .
End Function
) Importante
Para obter o exemplo completo, consulte Passo a passo: acessando a Web usando
async e await. Você pode baixar o exemplo do Navegador de Exemplo do .NET. O
código de exemplo está no projeto SerialAsyncExample.
Se Await for aplicado ao resultado de uma chamada de método que retorna uma
Task(Of TResult) , o tipo da expressão Await será TResult. Se Await for aplicado ao
resultado de uma chamada de método que retorna um Task , a expressão Await não
retornará um valor. O exemplo a seguir ilustra a diferença.
VB
Await AsyncMethodThatReturnsTask()
Uma expressão ou instrução Await não bloqueia o thread no qual está sendo
executada. Em vez disso, ela faz com que o compilador inscreva o restante do método
assíncrono, após a expressão Await , como uma continuação da tarefa aguardada. Em
seguida, o controle retorna para o chamador do método assíncrono. Quando a tarefa
for concluída, ela invoca a sua continuação e a execução do método assíncrono
continua de onde parou.
Exceções
A maioria dos métodos assíncronos retorna um Task ou um Task<TResult>. As
propriedades da tarefa retornada transportam informações sobre seu status e histórico
como: se a tarefa foi concluída, se o método assíncrono causou uma exceção ou se foi
cancelado e qual foi o resultado final. O operador Await acessa essas propriedades.
Se você aguarda um método assíncrono de retorno de tarefa que causou uma exceção,
o operador Await relança a exceção.
Uma tarefa única que está em um estado com falha pode refletir várias exceções. Por
exemplo, a tarefa pode ser o resultado de uma chamada para Task.WhenAll. Quando
você aguarda essa tarefa, a operação de aguardar relança apenas uma das exceções. No
entanto, você não pode prever qual das exceções será relançada.
Exemplo
O exemplo do Windows Forms a seguir ilustra o uso do Await em um método
assíncrono WaitAsynchronouslyAsync . Compare o comportamento desse método com o
comportamento de WaitSynchronously . Sem um operador Await , WaitSynchronously é
executado de maneira síncrona, apesar do uso do modificador Async na definição e de
uma chamada para Thread.Sleep no corpo.
VB
End Sub
' blocked during the delay. You can move or resize the Form1 window
Await Task.Delay(10000)
Return "Finished"
End Function
' The following method runs synchronously, despite the use of Async.
' You cannot move or resize the Form1 window while Thread.Sleep
Thread.Sleep(10000)
Return "Finished"
End Function
Confira também
Programação assíncrona com Async e Await
Instruções passo a passo: acessando a Web e usando Async e Await
Async
Operador DirectCast (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
O DirectCast não usa as rotinas auxiliares de tempo de execução do Visual Basic para
conversão; portanto, ele pode fornecer um desempenho um pouco melhor do que o
CType ao converter de e para o tipo de dados Object .
Você usa a palavra-chave DirectCast semelhante à maneira como usa a Função CType e
a palavra-chave Operador TryCast. Você fornece uma expressão como o primeiro
argumento e um tipo para convertê-la como o segundo argumento. O DirectCast testa
uma relação de herança ou implementação entre os tipos de dados dos dois
argumentos. Isso significa que um tipo deve herdar de ou implementar o outro.
Erros e falhas
O DirectCast gerará um erro do compilador se detectar que não existe nenhuma
relação de herança ou implementação. Mas a falta de um erro do compilador não
garante uma conversão bem-sucedida. Se a conversão desejada estiver estreitando, ela
poderá falhar em tempo de execução. Se isso acontecer, o runtime gerará um erro
InvalidCastException.
Palavras-chave de conversão
Uma comparação das palavras-chave de conversão de tipo é a seguinte.
Exemplo
O exemplo a seguir demonstra dois usos de DirectCast , um que falha em tempo de
execução e outro que é bem-sucedido.
VB
Dim c As System.Windows.Forms.Control
c = DirectCast(f, System.Windows.Forms.Control)
Confira também
Convert.ChangeType
Conversões de Widening e Narrowing
Conversões implícitas e explícitas
Expressão de função (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
- or -
Function ( [ parameterlist ] )
[ statements ]
End Function
Partes
Termo Definição
parameterlist Opcional. Uma lista de nomes de variáveis locais que representam os parâmetros
deste procedimento. Os parênteses devem estar presentes mesmo quando a
lista estiver vazia. Confira a Lista de parâmetros.
statements Obrigatórios. Uma lista de instruções que retorna um valor usando a instrução
Return . Confira Instrução Return. O tipo do valor retornado é o tipo de retorno
da função.
Comentários
Uma expressão lambda é uma função sem um nome que calcula e retorna um valor.
Você pode usar uma expressão lambda em qualquer lugar em que possa usar um tipo
delegado, exceto como um argumento para RemoveHandler . Para obter mais
informações sobre delegados e o uso de expressões lambda com delegados, confira
Instrução Delegate e Conversão de delegado reduzida.
As expressões Lambda não usam uma cláusula As para designar o tipo de retorno
da função. Em vez disso, o tipo é inferido do valor ao qual o corpo de uma
expressão lambda de linha única é avaliado ou o valor retornado de uma
expressão lambda de várias linhas. Por exemplo, se o corpo de uma expressão
lambda de linha única for Where cust.City = "London" , o tipo de retorno será
Boolean .
O corpo de uma expressão lambda de linha única deve ser uma expressão, não
uma instrução. O corpo pode consistir em uma chamada para um procedimento
Function, mas não uma chamada para um subprocedimento.
Todos os parâmetros devem ter tipos de dados especificados ou todos devem ser
inferidos.
Exemplo 1
Os exemplos a seguir mostram duas maneiras de criar expressões lambda simples. O
primeiro usa um Dim para fornecer um nome para a função. Para chamar a função, você
envia um valor para o parâmetro.
VB
VB
Console.WriteLine(add1(5))
Exemplo 2
Como alternativa, você pode declarar e executar a função ao mesmo tempo.
VB
Exemplo 3
Mostraremos a seguir um exemplo de uma expressão lambda que incrementa seu
argumento e retorna o valor. O exemplo mostra a sintaxe de expressão lambda de linha
única e de várias linhas para uma função. Para obter mais exemplos, confira Expressões
lambda.
VB
Return x + 2
End Function
Console.WriteLine(increment1(1))
Console.WriteLine(increment2(2))
Exemplo 4
As expressões lambda são subjacentes a muitos dos operadores de consulta LINQ
(consulta integrada à linguagem) e podem ser usadas explicitamente em consultas
baseadas em método. O exemplo a seguir mostra uma consulta LINQ típica, seguida
pela tradução da consulta no formato de método.
VB
Select cust
Select(Function(cust) cust)
Para obter mais informações sobre métodos de consulta, leia Consultas. Para obter mais
informações sobre os operadores de consulta padrão, confira Visão geral de operadores
de consulta padrão.
Confira também
Instrução Function
Expressões Lambda
Operadores e Expressões
Instruções
Comparações de Valor
Expressões Boolianas
Operador If
Conversão de delegado reduzida
Operador GetType (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Retorna um objeto Type para o tipo especificado. O objeto Type fornece informações
sobre o tipo, como suas propriedades, métodos e eventos.
Sintaxe
VB
GetType(typename)
Parâmetros
Parâmetro Descrição
Comentários
O operador GetType retorna o objeto Type para o typename especificado. Você pode
passar o nome de qualquer tipo definido em typename . Isso inclui o seguinte:
Qualquer enumeração definida pelo Visual Basic, pelo .NET Framework ou pelo
aplicativo.
Se você quiser obter o objeto do tipo de uma variável de objeto, use o método
Object.GetType.
Exemplo
Os exemplos a seguir mostram o operador GetType em uso.
VB
' The following statement returns the Type object for Integer.
MsgBox(GetType(Integer).ToString())
' The following statement returns the Type object for one-dimensional string
arrays.
MsgBox(GetType(String()).ToString())
Confira também
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores e Expressões
Object.GetType
Type.GetType
Operador GetXmlNamespace (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
GetXmlNamespace(xmlNamespacePrefix)
Partes
xmlNamespacePrefix Opcional. A cadeia de caracteres que identifica o prefixo de
Valor Retornado
O objeto XNamespace que corresponde ao prefixo do namespace de XML.
Comentários
O operador GetXmlNamespace obtém o objeto XNamespace que corresponde ao prefixo
de namespace de XML xmlNamespacePrefix .
VB
Imports <xmlns:ns="http://SomeNamespace">
Module GetXmlNamespaceSample
Sub RunSample()
Dim contact =
<ns:contact>
<ns:name>Patrick Hines</ns:name>
<ns:phone ns:type="home">206-555-0144</ns:phone>
<ns:phone ns:type="work">425-555-0145</ns:phone>
</ns:contact>
ShowName(contact.<ns:phone>(0))
End Sub
End Sub
End Module
Confira também
Instrução Imports (namespace XML)
Acessando XML no Visual Basic
Operador If (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
Partes
Termo Definição
argument1 Obrigatórios. Boolean . Determina qual dos outros argumentos avaliar e retornar.
argument2 Obrigatórios. Object . Avaliado e retornado se argument1 for avaliado como True .
argument3 Obrigatórios. Object . Avaliado e retornado se argument1 for avaliado como False ou
se argument1 for uma variável anulável Boolean que é avaliada como Nothing.
Um operador If chamado com três argumentos funciona como uma função IIf ,
exceto que ele usa a avaliação de curto-circuito. Uma função IIf sempre avalia todos
os três argumentos, enquanto um operador If que tem três argumentos avalia apenas
dois deles. O primeiro argumento If é avaliado e o resultado é convertido como um
valor Boolean , True ou False . Se o valor for True , argument2 será avaliado e o valor
dele será retornado, mas argument3 não será avaliado. Se o valor da expressão Boolean
for False , argument3 erá avaliado e o valor dele será retornado, mas argument2 não será
avaliado. Os seguintes exemplos ilustram o uso de If quando três argumentos são
usados:
VB
' This statement prints TruePart, because the first argument is true.
' This statement prints FalsePart, because the first argument is false.
Dim number = 3
number = -1
para executar a divisão porque isso resultaria em um erro em tempo de execução. Como
a expressão If usa a avaliação de curto-circuito, ela avalia o segundo ou o terceiro
argumento, dependendo do valor do primeiro argumento. Se o primeiro argumento for
verdadeiro, o divisor não será zero e será seguro avaliar o segundo argumento e
executar a divisão. Se o primeiro argumento for falso, somente o terceiro argumento
será avaliado e um 0 será retornado. Portanto, quando o divisor é 0, nenhuma tentativa
é feita para executar a divisão e nenhum erro é gerado. No entanto, como IIf não usa
a avaliação de curto-circuito, o segundo argumento é avaliado mesmo quando o
primeiro argumento é falso. Isso causa um erro de divisão por zero em tempo de
execução.
VB
number = 12
Dim divisor = 3
' When the divisor is 0, IIf causes a run-time error, but If does not.
divisor = 0
Partes
Termo Definição
argument2 Obrigatórios. Object . Precisa ser um tipo de valor de referência ou anulável. Avaliado
e retornado quando ele é avaliado para qualquer outra coisa diferente de Nothing .
argument3 Obrigatórios. Object . Avaliado e retornado se argument2 for avaliado como Nothing .
VB
Console.WriteLine(If(first, second))
second = Nothing
' Variable first <> Nothing, so the value of first is returned again.
Console.WriteLine(If(first, second))
first = Nothing
second = 6
Console.WriteLine(If(first, second))
Confira também
IIf
Tipos de Valor Anulável
Nothing
Operador Is (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
result
object1
object2
Comentários
O operador Is determina se duas referências de objeto se referem ao mesmo objeto.
No entanto, ele não executa comparações de valor. Se object1 e object2 se referirem
exatamente à mesma instância de objeto, result será True ; se não, result será False .
7 Observação
Exemplo
O exemplo a seguir usa o operador Is para comparar pares de referências de objeto.
Os resultados são atribuídos a um valor Boolean que representa se os dois objetos são
idênticos.
VB
yourObject = myObject
thisObject = myObject
thatObject = otherObject
thatObject = myObject
Como demonstra o exemplo anterior, você pode usar o operador Is para testar objetos
com associação antecipada e tardia.
VB
Confira também
Operador TypeOf
Operador IsNot
Operadores de comparação no Visual Basic
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores e Expressões
Operador IsFalse (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você não pode chamar IsFalse explicitamente no código, mas o compilador do Visual
Basic pode usá-lo para gerar código usando cláusulas AndAlso . Se você definir uma
classe ou estrutura e usar uma variável desse tipo em uma cláusula AndAlso , deverá
definir IsFalse nessa classe ou estrutura.
7 Observação
O operador IsFalse pode ser sobrecarregado, o que significa que uma classe ou
estrutura pode redefinir o respectivo comportamento quando seu operando tem o
tipo dessa classe ou estrutura. Se o código usar esse operador em uma classe ou
estrutura, certifique-se de entender seu comportamento redefinido. Para obter
mais informações, confira Procedimentos de operador.
Exemplo
O exemplo de código a seguir define o contorno de uma estrutura que inclui definições
para os operadores IsFalse e IsTrue .
VB
Public Structure p
Dim a As Double
Dim b As Boolean
Return b
End Operator
Dim b As Boolean
Return b
End Operator
End Structure
Confira também
Operador IsTrue
Como definir um operador
Operador AndAlso
Operador IsNot (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
result
object1
object2
Comentários
O operador IsNot determina se duas referências de objeto se referem a objetos
diferentes. No entanto, ele não executa comparações de valor. Se object1 e object2 se
referirem exatamente à mesma instância de objeto, result será False ; se não, result
será True .
IsNot é o oposto do operador Is . A vantagem de IsNot é que você pode evitar sintaxe
estranha com Not e Is , o que pode ser difícil de ler.
Exemplo
O exemplo de código a seguir usa o operador Is e o operador IsNot para realizar a
mesma comparação.
VB
VB
Confira também
Operador Is
Operador TypeOf
Precedência do operador no Visual Basic
Como testar se dois objetos são iguais
Operador IsTrue (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você não pode chamar IsTrue explicitamente no código, mas o compilador do Visual
Basic pode usá-lo para gerar código usando cláusulas OrElse . Se você definir uma
classe ou estrutura e usar uma variável desse tipo em uma cláusula OrElse , deverá
definir IsTrue nessa classe ou estrutura.
4. Uma conversão de restrição para Boolean? que não envolve uma conversão de
Boolean para Boolean? .
7 Observação
O operador IsTrue pode ser sobrecarregado, o que significa que uma classe ou
estrutura pode redefinir o respectivo comportamento quando seu operando tem o
tipo dessa classe ou estrutura. Se o código usar esse operador em uma classe ou
estrutura, certifique-se de entender seu comportamento redefinido. Para obter
mais informações, confira Procedimentos de operador.
Exemplo
O exemplo de código a seguir define o contorno de uma estrutura que inclui definições
para os operadores IsFalse e IsTrue .
VB
Public Structure p
Dim a As Double
Dim b As Boolean
Return b
End Operator
Dim b As Boolean
Return b
End Operator
End Structure
Confira também
Operador IsFalse
Como definir um operador
Operador OrElse
Operador Like (Visual Basic)
Artigo • 22/02/2023 • 6 minutos para o fim da leitura
) Importante
Atualmente, o operador Like não é compatível com projetos .NET Core e .NET
Standard.
Sintaxe
VB
Partes
result
string
pattern
Comentários
Se o valor em string satisfizer o padrão contido em pattern , result será True . Se a
string não satisfizer o padrão, result será False . Se string e pattern forem cadeias de
caracteres vazias, o resultado será True .
Método de comparação
O comportamento do operador Like depende da Instrução Option Compare. O método
de comparação de cadeia de caracteres padrão para cada arquivo de origem é Option
Compare Binary .
Opções de padrão
Os padrões correspondentes internos fornecem uma ferramenta versátil para
comparações de cadeia de caracteres. Os recursos de padrões correspondentes
permitem que você faça a correspondência de cada caractere em string com um
caractere específico, curinga, uma lista de caracteres ou um intervalo deles. A tabela a
seguir mostra os caracteres permitidos em pattern e os respectivos correspondentes.
Listas de caracteres
Um grupo de um ou mais caracteres ( charlist ) entre colchetes ( [ ] ) pode ser usado
para corresponder a qualquer caractere único em string e pode incluir praticamente
qualquer código de caractere, incluindo dígitos.
Caracteres Especiais
Para corresponder aos colchete esquerdo de caracteres especiais ( [ ), ponto de
interrogação ( ? ), sinal de número ( # ) e asterisco ( * ), coloque-os entre colchetes. O
colchete direito ( ] ) não pode ser usado dentro de um grupo para corresponder a si
mesmo, mas pode ser usado fora de um grupo como um caractere individual.
A sequência de caracteres [] é considerada uma cadeia de caracteres de comprimento
zero ( "" ). No entanto, ele não pode fazer parte de uma lista de caracteres entre
colchetes. Se você quiser verificar se uma posição em string contém um de um grupo
de caracteres ou nenhum deles, você pode usar Like duas vezes. Para obter um
exemplo, confira Como fazer a correspondência de uma cadeia de caracteres com um
padrão.
Intervalos de caracteres
Usando um hífen ( – ) para separar os limites inferior e superior do intervalo, charlist
pode especificar um intervalo de caracteres. Por exemplo, [A–Z] resultará em uma
correspondência se a posição do caractere correspondente em string contiver
qualquer caractere dentro do intervalo A – Z , e [!H–L] resultará em uma
correspondência se a posição do caractere correspondente contiver qualquer caractere
fora do intervalo H – L .
Uso do Hífen
Um hífen ( – ) pode aparecer no início (após um ponto de exclamação, se houver) ou no
final de charlist para corresponder a si mesmo. Em qualquer outro local, o hífen
identifica um intervalo de caracteres delimitado pelos caracteres em cada lado dele.
Sequência de agrupamento
O significado de um intervalo especificado depende da ordem dos caracteres em tempo
de execução, conforme determinado por Option Compare e da configuração de
localidade do sistema em que o código está sendo executado. Com Option Compare
Binary , o intervalo [A–E] corresponde a A , B , C , D e E . Com Option Compare Text , [A–
E] ele corresponde a A , a , À , à , B , b , C , c , D , d , E e e . O intervalo não corresponde
Caracteres de dígrafo
Em alguns idiomas, há caracteres alfabéticos que representam dois caracteres
separados. Por exemplo, várias linguagens usam o caractere æ para representar a e e
quando eles aparecem juntos. O operador Like reconhece que o caractere de dígrafo
único e os dois caracteres individuais são equivalentes.
Sobrecarga
O operador Like pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Se o código usar esse operador em uma classe ou estrutura, certifique-se de
entender seu comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo
Este exemplo usa o operador Like para comparar cadeias de caracteres com vários
padrões. Os resultados entram em uma variável Boolean que indica se cada cadeia de
caracteres satisfaz o padrão.
VB
' The following statement returns True (does "F" satisfy "F"?)
' The following statement returns False for Option Compare Binary
' and True for Option Compare Text (does "F" satisfy "f"?)
' The following statement returns False (does "F" satisfy "FFF"?)
' The following statement returns True (does "aBBBa" have an "a" at the
' between?)
' The following statement returns True (does "F" occur in the set of
' The following statement returns False (does "F" NOT occur in the
' The following statement returns True (does "a2a" begin and end with
' The following statement returns True (does "aM5b" begin with an "a",
' followed by any character from the set "L" through "P", followed
' by any single-digit number, and end with any character NOT in
' The following statement returns True (does "BAT123khg" begin with a
' "B", followed by any single character, followed by a "T", and end
' The following statement returns False (does "CAT123khg"?) begin with
Confira também
InStr
StrComp
Operadores de comparação
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instrução Option Compare
Operadores e Expressões
Como corresponder uma cadeia de caracteres a um padrão
Operador Mod (Visual Basic)
Artigo • 22/02/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
Partes
result
number1
number2
Result
O resultado é o restante após number1 ser dividido por number2 . Por exemplo, a
expressão 14 Mod 4 é avaliada como 2.
7 Observação
VB
End Sub
End Module
' 8 Mod 3 = 2
' -8 Mod 3 = -2
' 8 Mod -3 = 2
' -8 Mod -3 = -2
Comentários
Se number1 ou number2 for um valor de ponto flutuante, o restante do ponto flutuante
da divisão será retornado. O tipo de dados do resultado é o menor tipo de dados que
pode conter todos os valores possíveis resultantes da divisão com os tipos de dados de
number1 e number2 .
Se number1 ou number2 for avaliada como Nothing, ela será tratada como zero.
Fórmula equivalente
A expressão a Mod b é equivalente a qualquer uma das seguintes fórmulas:
a - (b * (a \ b))
a - (b * Fix(a / b))
Sobrecarga
O operador Mod pode ser sobrecarregado, o que significa que uma classe ou uma
estrutura pode redefinir o comportamento. Se o código aplicar Mod a uma instância de
uma classe ou estrutura que inclui essa sobrecarga, entenda o comportamento
redefinido. Para obter mais informações, confira Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o operador Mod para dividir dois números e retornar apenas o
restante. Se um dos números for um número de ponto flutuante, o resultado será um
número de ponto flutuante que representa o restante.
VB
Debug.WriteLine(10 Mod 5)
' Output: 0
Debug.WriteLine(10 Mod 3)
' Output: 1
Debug.WriteLine(-10 Mod 3)
' Output: -1
Debug.WriteLine(12.6 Mod 5)
Exemplo 2
O exemplo a seguir demonstra a possível imprecisão dos operandos de ponto flutuante.
Na primeira instrução, os operandos são Double , e 0,2 é uma fração binária
infinitamente repetida com um valor armazenado de 0,20000000000000001. Na
segunda instrução, o caractere de tipo literal D força ambos os operandos para Decimal
e 0,2 tem uma representação precisa.
VB
Confira também
Int
Fix
Operadores aritméticos
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Solução de problemas de tipos de dados
Operadores aritméticos no Visual Basic
Operador \ (Visual Basic)
Operador NameOf − Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O operador NameOf obtém o nome de uma variável, tipo ou membro como uma cadeia
de caracteres constante:
VB
Você pode usar o operador NameOf para tornar o código de verificação de argumentos
mais passível de manutenção:
VB
Get
Return _name
End Get
Set
End If
End Set
End Property
Introduz uma cláusula New para criar uma nova instância de objeto, especifica uma
restrição de construtor em um parâmetro de tipo ou identifica um procedimento Sub
como um construtor de classe.
Comentários
Em uma declaração ou instrução de atribuição, uma cláusula New deve especificar uma
classe definida da qual a instância pode ser criada. Isso significa que a classe deve expor
um ou mais construtores que o código de chamada pode acessar.
Você pode usar uma cláusula New em uma instrução de declaração ou de atribuição.
Quando a instrução é executada, ela chama o construtor apropriado da classe
especificada, passando todos os argumentos fornecidos. O exemplo a seguir demonstra
isso criando instâncias de uma classe Customer que tem dois construtores, um que não
usa parâmetros e outro que usa um parâmetro de cadeia de caracteres:
VB
' For customer2, call the constructor that takes the name of the
' With Option Infer set to On, the following declaration declares
Como as matrizes são classes, New pode criar uma nova instância de matriz, conforme
mostrado no seguinte exemplo:
VB
' The following example requires that Option Infer be set to On.
7 Observação
Instrução Dim
Of
Instrução Sub
Confira também
OutOfMemoryException
Palavras-chave
Lista de Tipos
Tipos genéricos no Visual Basic
Tempo de vida do objeto: como os objetos são criados e destruídos
Operador Not (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Executa uma negação lógica em uma expressão Boolean ou uma negação bit a bit em
uma expressão numérica.
Sintaxe
VB
Partes
result
expression
Comentários
Para expressões Boolean , a tabela a seguir ilustra como result é determinado.
True False
False True
1 0
0 1
7 Observação
Como os operadores lógicos e bit a bit têm uma precedência menor do que outros
operadores aritméticos e relacionais, todas as operações bit a bit devem ser
colocadas entre parênteses para garantir execução precisa.
Tipos de dados
Para uma negação booliana, o tipo de dados do resultado será Boolean . Para uma
negação bit a bit, o tipo de dados de resultado é o mesmo que o de expression . No
entanto, se a expressão for Decimal , o resultado será Long .
Sobrecarga
O operador Not pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando seu operando tem o tipo dessa classe ou
estrutura. Se o código usar esse operador em uma classe ou estrutura, certifique-se de
entender seu comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o operador Not para executar negação lógica em uma
expressão Boolean . O resultado é um valor Boolean que representa o inverso do valor
da expressão.
VB
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Exemplo 2
O exemplo a seguir usa o operador Not para executar a negação lógica nos bits
individuais de uma expressão numérica. O bit no padrão de resultado é definido como o
inverso do bit correspondente no padrão de operando, incluindo o bit de sinal.
VB
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
secondPattern = (Not b)
thirdPattern = (Not c)
Confira também
Operadores lógicos/bit a bit (Visual Basic)
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores lógicos e bit a bit no Visual Basic
Operador Or (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Desenvolve uma disjunção lógica em duas expressões Boolean ou uma disjunção bit a
bit em duas expressões numéricas.
Sintaxe
VB
Partes
result
result é um valor numérico que representa a disjunção inclusiva bit a bit de dois
padrões de bit numéricos.
expression1
expression2
Comentários
Para comparação Boolean , result é False se e somente se ambos expression1 e
expression2 resultarem em False . A tabela a seguir ilustra como result é
determinado.
7 Observação
Para operações bit a bit, o operador Or executa uma comparação bit a bit dos bits
posicionados de forma idêntica em duas expressões numéricas e define o bit
correspondente em result de acordo com a tabela a seguir.
1 1 1
1 0 1
0 1 1
0 0 0
7 Observação
Como os operadores lógicos e bit a bit têm uma precedência menor do que outros
operadores aritméticos e relacionais, todas as operações bit a bit devem ser
colocadas entre parênteses para garantir execução precisa.
Tipos de dados
Se os operandos consistirem em uma expressão Boolean e uma expressão numérica, o
Visual Basic converterá a expressão Boolean em um valor numérico (–1 para True e 0
para False ) e executará uma operação bit a bit.
Para uma comparação Boolean , o tipo de dados do resultado será Boolean . Para uma
comparação bit a bit, o tipo de dados de resultado será um tipo numérico apropriado
para os tipos de dados de expression1 e expression2 . Consulte a tabela "Comparações
relacionais e bit a bit" nos Tipos de dados de resultados do operador.
Sobrecarga
O operador Or pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Se o código usar esse operador em uma classe ou estrutura, certifique-se de
entender seu comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o operador Or para executar uma disjunção lógica inclusiva em
duas expressões. O resultado é um valor Boolean que representa se uma das duas
expressões é True .
VB
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Exemplo 2
O exemplo a seguir usa o operador Or para executar a disjunção inclusiva lógica nos
bits individuais de duas expressões numéricas. O bit no padrão de resultado será
definido se qualquer um dos bits correspondentes nos operandos for definido como 1.
VB
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
secondPattern = (a Or c)
thirdPattern = (b Or c)
Sintaxe
VB
Partes
result
expression1
expression2
Comentários
Uma operação lógica será considerada de curto-circuito se o código compilado puder
ignorar a avaliação de uma expressão, a depender do resultado de outra expressão. Se o
resultado da primeira expressão avaliada determinar o resultado final da operação, não
será necessário avaliar a segunda expressão, pois ela não poderá alterar o resultado
final. O curto-circuito pode melhorar o desempenho se a expressão ignorada for
complexa ou se envolver chamadas de procedimento.
Se uma das expressões ou as duas forem avaliadas como True , então result retornará
True . A tabela a seguir ilustra como result é determinado.
Tipos de dados
O operador OrElse é definido apenas para o tipo de dados booliano. O Visual Basic
converte cada operando conforme necessário para Boolean antes de avaliar a
expressão. Se você atribuir o resultado a um tipo numérico, o Visual Basic o converterá
de Boolean para esse tipo, de modo que False se torne 0 e True se torne -1 .
Para
obter mais informações, consulte Conversões de tipo booliano.
Sobrecarga
O operador Or e o operador IsTrue podem ser sobrecarregados, o que significa que uma
classe ou estrutura pode redefinir seu comportamento quando um operando tiver o
tipo dessa classe ou estrutura. Sobrecarregar os operadores Or e IsTrue afeta o
comportamento do operador OrElse . Se o seu código usar OrElse em uma classe ou
estrutura que sobrecarrega Or e IsTrue , certifique-se de entender o comportamento
redefinido. Para obter mais informações, confira Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o operador OrElse para executar uma disjunção lógica em duas
expressões. O resultado é um valor Boolean que representa se uma das duas expressões
é verdadeira. Se a primeira expressão for True , a segunda não será avaliada.
VB
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
VB
Confira também
Operadores lógicos/bit a bit (Visual Basic)
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operador Or
Operador IsTrue
Operadores lógicos e bit a bit no Visual Basic
Subexpressão (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
- or -
Sub ( [ parameterlist ] )
[ statements ]
End Sub
Partes
Termo Definição
parameterlist Opcional. Uma lista de nomes de variáveis locais que representam os parâmetros
do procedimento. Os parênteses devem estar presentes mesmo quando a lista
estiver vazia. Para obter mais informações, confira Lista de parâmetros.
Comentários
Uma expressão lambda é uma sub-rotina que não tem um nome e que executa uma ou
mais instruções. Você pode usar uma expressão lambda em qualquer lugar em que
possa usar um tipo delegado, exceto como um argumento para RemoveHandler . Para
obter mais informações sobre delegados e o uso de expressões lambda com delegados,
consulte Instrução Delegate e Conversão de delegado reduzida.
O corpo de uma expressão lambda de linha única deve ser uma instrução, não
uma expressão. O corpo pode consistir em uma chamada para um sub-
procedimento, mas não uma chamada para um procedimento Function.
Exemplo
A seguir está um exemplo de uma expressão lambda que grava um valor no console. O
exemplo mostra a sintaxe de expressão lambda de linha única e de várias linhas para
uma sub-rotina. Para obter mais exemplos, confira Expressões lambda.
VB
Console.WriteLine(x)
End Sub
writeline1("Hello")
writeline2("World")
Confira também
Instrução Sub
Expressões Lambda
Operadores e Expressões
Instruções
Conversão de delegado reduzida
Operador TryCast (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Apresenta uma operação de conversão de tipo que não gera uma exceção.
Comentários
Se uma tentativa de conversão falhar, CType e DirectCast lançam um erro
InvalidCastException. Isso pode afetar negativamente o desempenho do aplicativo.
TryCast retorna Nothing, de modo que, em vez de lidar com uma possível exceção,
Você usa a palavra-chave TryCast semelhante à maneira como usa a Função CType e a
palavra-chave Operador DirectCast. Você fornece uma expressão como o primeiro
argumento e um tipo para convertê-la como o segundo argumento. O TryCast opera
apenas em tipos de referência, como classes e interfaces. Ele requer uma relação de
herança ou implementação entre os dois tipos. Isso significa que um tipo deve herdar
de ou implementar o outro.
Erros e falhas
O TryCast gerará um erro do compilador se detectar que não existe nenhuma relação
de herança ou implementação. Mas a falta de um erro do compilador não garante uma
conversão bem-sucedida. Se a conversão desejada estiver estreitando, ela poderá falhar
em tempo de execução. Se isso acontecer, TryCast retornará Nothing.
Palavras-chave de conversão
Uma comparação das palavras-chave de conversão de tipo é a seguinte.
TryCast Apenas tipos Um tipo deve herdar ou implementar o outro Retorna Nada
de referência tipo
Exemplo
O exemplo a seguir mostra como usar TryCast .
VB
End If
End Function
Confira também
Conversões de Widening e Narrowing
Conversões implícitas e explícitas
Operador TypeOf (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
VB
Partes
result
objectexpression
typename
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.
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.
VB
Confira também
Operador Is
Operador IsNot
Operadores de comparação no Visual Basic
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores e Expressões
Operador Xor (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Desenvolve uma exclusão lógica em duas expressões Boolean ou uma exclusão bit a bit
em duas expressões numéricas.
Sintaxe
VB
Partes
result
operações bit a bit, result é um valor numérico que representa a exclusão bit a bit
(disjunção bit a bit exclusiva) dos dois padrões de bits numéricos.
expression1
expression2
Comentários
Para comparação booleana, result é True se e somente se exatamente um de
expression1 e expression2 for avaliado como True . Ou seja, se e somente se
7 Observação
Para operações bit a bit, o operador Xor executa uma comparação bit a bit dos bits
posicionados de forma idêntica em duas expressões numéricas e define o bit
correspondente em result de acordo com a tabela a seguir.
1 1 0
1 0 1
0 1 1
0 0 0
7 Observação
Como os operadores lógicos e bit a bit têm uma precedência menor do que outros
operadores aritméticos e relacionais, todas as operações bit a bit devem ser
colocadas entre parênteses para garantir execução precisa.
Por exemplo, 5 Xor 3 é 6. Para ver por que isso é assim, converta 5 e 3 nas respectivas
representações binárias, 101 e 011. Em seguida, use a tabela anterior para determinar
que 101 Xor 011 é 110, que é a representação binária do número decimal 6.
Tipos de dados
Se os operandos consistirem em uma expressão Boolean e uma expressão numérica, o
Visual Basic converterá a expressão Boolean em um valor numérico (–1 para True e 0
para False ) e executará uma operação bit a bit.
Para uma comparação Boolean , o tipo de dados do resultado será Boolean . Para uma
comparação bit a bit, o tipo de dados de resultado será um tipo numérico apropriado
para os tipos de dados de expression1 e expression2 . Consulte a tabela "Comparações
relacionais e bit a bit" nos Tipos de dados de resultados do operador.
Sobrecarga
O operador Xor pode ser sobrecarregado, o que significa que uma classe ou estrutura
pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou
estrutura. Se o código usar esse operador em uma classe ou estrutura, certifique-se de
entender o comportamento redefinido. Para obter mais informações, confira
Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o operador Xor para executar a exclusão lógica (disjunção
lógica exclusiva) em duas expressões. O resultado é um valor Boolean que representa se
exatamente uma das expressões é True .
VB
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Exemplo 2
O exemplo a seguir usa o operador Xor para executar a exclusão lógica (disjunção
lógica exclusiva) nos bits individuais de duas expressões numéricas. O bit no padrão de
resultado é definido se exatamente um dos bits correspondentes nos operandos for
definido como 1.
VB
Confira também
Operadores lógicos/bit a bit (Visual Basic)
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operadores lógicos e bit a bit no Visual Basic
Propriedades (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Esta página lista as propriedades que são membros dos módulos do Visual Basic. Outras
propriedades que são membros de objetos específicos do Visual Basic são listadas em
Objetos.
Now Retorna um valor de Date que contém a data e hora atual de acordo
com seu sistema.
Today Retorna ou define um valor Date que contém a data atual de acordo
com o sistema.
Confira também
Referência da linguagem Visual Basic
Consultas (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O Visual Basic permite que você crie expressões LINQ (Consulta integrada à linguagem)
em seu código.
Nesta seção
Cláusula Aggregate
Descreve a cláusula Aggregate , que aplica uma ou mais funções de agregação a uma
coleção.
Cláusula Distinct
Cláusula From
Descreve a cláusula From , que especifica uma coleção e uma variável de intervalo para
uma consulta.
Cláusula Group By
Descreve a cláusula Group Join , que combina duas coleções em uma única coleção
hierárquica.
Cláusula Join
Descreve a cláusula Join , que combina duas coleções em uma única coleção.
Cláusula Let
Descreve a cláusula Let , que calcula um valor e o atribui a uma nova variável na
consulta.
Cláusula Order By
Cláusula Select
Descreve a cláusula Select , que declara um conjunto de variáveis de intervalo para uma
consulta.
Cláusula Skip
Descreve a cláusula Skip While , que ignora elementos em uma coleção, contanto que
uma condição especificada seja true e retorne os elementos restantes.
Cláusula Take
Descreve a cláusula Take While , que inclui elementos em uma coleção, contanto que
uma condição especificada seja true e ignore os elementos restantes.
Cláusula Where
Descreve a cláusula Where , que especifica uma condição de filtragem para uma consulta.
Confira também
LINQ
Introdução a LINQ no Visual Basic
Cláusula Aggregate (Visual Basic)
Artigo • 07/04/2023 • 7 minutos para o fim da leitura
Sintaxe
VB
[ clause ]
Into expressionList
Partes
Termo Definição
element Obrigatórios. Variável usada para iterar por meio dos elementos da coleção.
clause Opcional. Uma ou mais cláusulas de consulta, como Where , para refinar o
resultado da consulta, com o objetivo de aplicar a cláusula ou as cláusulas de
agregação.
expressionList Obrigatórios. Uma ou mais expressões delimitadas por vírgulas que identificam
uma função de agregação a ser aplicada à coleção. Você pode aplicar um alias
a uma função de agregação para especificar um nome de membro para o
resultado da consulta. Se nenhum alias for fornecido, o nome da função de
agregação será usado. Para obter exemplos, confira a seção sobre funções de
agregação posteriormente neste tópico.
Comentários
A cláusula Aggregate pode ser usada para incluir funções de agregação nas consultas.
As funções de agregação realizam verificações e cálculos sobre um conjunto de valores
e retornam um valor único. Você pode acessar o valor calculado usando um membro do
tipo de resultado da consulta. As funções de agregação padrão que você pode usar são
All , Any , Average , Count , LongCount , Max , Min e Sum . Essas funções são familiares aos
A cláusula Aggregate pode iniciar uma consulta ou pode ser incluída como uma cláusula
adicional em uma consulta. Se a cláusula Aggregate iniciar uma consulta, o resultado
será um valor único, que é o resultado da função agregada especificada na cláusula
Into . Se mais de uma função de agregação for especificada na cláusula Into , a consulta
retornará um único tipo com uma propriedade separada para referenciar o resultado de
cada função de agregação na cláusula Into . Se a cláusula Aggregate for incluída como
cláusula adicional em uma consulta, o tipo retornado na coleção de consultas terá uma
propriedade separada para referenciar o resultado de cada função de agregação na
cláusula Into .
Funções de Agregação
Veja a seguir as funções de agregação padrão que podem ser usadas com a cláusula
Aggregate .
Todos
Retorna true se todos os elementos na coleção atenderem a uma condição
especificada; caso contrário, retornará false . A seguir, é mostrado um exemplo:
VB
Qualquer
Retorna true se qualquer elemento na coleção atender a uma condição especificada;
caso contrário, retornará false . A seguir, é mostrado um exemplo:
VB
Média
Calcula a média de todos os elementos na coleção ou calcula uma expressão fornecida
para todos os elementos da coleção. A seguir, é mostrado um exemplo:
VB
Into Average(order.Total)
Contagem
Conta o número de elementos na coleção. Você pode fornecer uma expressão opcional
Boolean para contar apenas o número de elementos na coleção que atendam a uma
VB
Grupo
Refere-se aos resultados da consulta que são agrupados como resultado de uma
cláusula Group By ou Group Join . A função Group é válida somente na cláusula Into de
Group By ou Group Join . Para obter mais informações e exemplos, confira Cláusula
LongCount
Conta o número de elementos na coleção. Você pode fornecer uma expressão opcional
Boolean para contar apenas o número de elementos na coleção que atendam a uma
condição. Retorna o resultado como um Long . Para obter um exemplo, confira a função
de agregação Count .
Max
Calcula o valor máximo da coleção ou uma expressão fornecida para todos os
elementos da coleção. A seguir, é mostrado um exemplo:
VB
Min
Calcula o valor mínimo da coleção ou uma expressão fornecida para todos os elementos
da coleção. A seguir, é mostrado um exemplo:
VB
Somar
Calcula a soma de todos os elementos na coleção ou uma expressão fornecida para
todos os elementos da coleção. A seguir, é mostrado um exemplo:
VB
Into Sum(order.Total)
Exemplo
O exemplo a seguir mostra como usar a cláusula Aggregate para aplicar funções de
agregação a um resultado de consulta.
VB
Dim customerOrderTotal =
Next
End Sub
Por exemplo, o exemplo a seguir mostra uma função de agregação personalizada que
calcula o valor mediano de uma coleção de números. Há duas sobrecargas do método
de extensão Median . A primeira sobrecarga aceita, como entrada, uma coleção de tipo
IEnumerable(Of Double) . Se a função de agregação Median for chamada para um campo
de consulta do tipo Double , esse método será chamado. A segunda sobrecarga do
método Median pode ser passada por qualquer tipo genérico. A sobrecarga genérica do
método Median usa um segundo parâmetro que faz referência à expressão lambda
Func(Of T, Double) para projetar um valor para um tipo (de uma coleção) como o valor
correspondente do tipo Double . Em seguida, ele delega o cálculo do valor mediano para
a outra sobrecarga do método Median . Para obter mais informações sobre expressões
lambda, consulte Expressões lambda.
VB
Imports System.Runtime.CompilerServices
Module UserDefinedAggregates
<Extension()>
If values.Count = 0 Then
End If
Order By number
Else
medianValue = sortedList(itemIndex)
End If
Return medianValue
End Function
' "Cast" the collection of generic items as type Double and call the
<Extension()>
End Function
End Module
VB
Module Module1
Sub Main()
End Sub
End Module
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula Select
Cláusula From
Cláusula Where
Cláusula Group By
Cláusula Distinct (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Distinct
Comentários
Você pode usar a cláusula Distinct para retornar uma lista de itens exclusivos. A
cláusula Distinct faz com que a consulta ignore os resultados da consulta duplicada. A
cláusula Distinct se aplica a valores duplicados para todos os campos de retorno
especificados pela cláusula Select . Se nenhuma cláusula Select for especificada,
Distinct será aplicada à variável de intervalo para a consulta identificada na cláusula
Exemplo
A expressão de consulta a seguir ingressa em uma lista de clientes e uma lista de
pedidos de clientes. A cláusula Distinct está incluída para retornar uma lista de nomes
de clientes exclusivos e datas de pedido.
VB
Distinct
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula From
Cláusula Select
Cláusula Where
Cláusula Equals (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
A palavra-chave Equals é usada nos seguintes contextos:
Cláusula Join
Confira também
Palavras-chave
Cláusula From (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
Partes
Termo Definição
element Obrigatórios. Uma variável de intervalo usada para iterar por meio dos elementos
da coleção. Uma variável de intervalo é usada para se referir a cada membro da
collection como a consulta itera por meio do collection . Deve ser um tipo
enumerável.
type Opcional. O tipo de element . Se nenhum type for especificado, o tipo de element é
inferido de collection .
collection Obrigatórios. Refere-se à coleção a ser consultada. Deve ser um tipo enumerável.
Comentários
A cláusula From é usada para identificar os dados de origem de uma consulta e as
variáveis usadas para fazer referência a um elemento da coleção de origem. Essas
variáveis são chamadas de variáveis de intervalo. A cláusula From é necessária para uma
consulta, exceto quando a cláusula Aggregate é usada para identificar uma consulta que
retorna apenas resultados agregados. Para obter mais informações, confira Cláusula
Aggregate.
Você pode especificar várias cláusulas From em uma consulta para identificar várias
coleções a serem ingressadas. Quando várias coleções são especificadas, elas são
iteradas de maneira independente ou você pode juntá-las se elas estiverem
relacionadas. Você pode ingressar coleções implicitamente usando a cláusula Select ou
explicitamente usando as cláusulas Join ou Group Join . Como alternativa, você pode
especificar diversas variáveis de intervalo e coleções em uma única cláusula From , com
cada variável de intervalo relacionada e coleção separadas das outras por uma vírgula. O
exemplo de código a seguir mostra as duas opções de sintaxe para a cláusula From .
VB
VB
Select ord
Cada cláusula From pode ser seguida por qualquer combinação de cláusulas de consulta
adicionais para refinar a consulta. Você pode refinar a consulta das seguintes formas:
Use a cláusula Aggregate para identificar funções de agregação para avaliar todo o
resultado da consulta.
Use a cláusula Let para introduzir uma variável de iteração cujo valor é
determinado por uma expressão em vez de uma coleção.
Exemplo
A expressão de consulta a seguir usa uma cláusula From para declarar uma variável de
intervalo cust para cada objeto Customer na coleção customers . A cláusula Where usa a
variável de intervalo para restringir a saída aos clientes da região especificada. O loop
For Each exibe o nome da empresa para cada cliente no resultado da consulta.
VB
Console.WriteLine(cust.CompanyName)
Next
End Sub
Confira também
Consultas
Introdução a LINQ no Visual Basic
Instrução For Each...Next
Instrução For...Next
Cláusula Select
Cláusula Where
Cláusula Aggregate
Cláusula Distinct
Cláusula Join
Cláusula Group Join
Cláusula Order By
Cláusula Let
Cláusula Skip
Cláusula Take
Cláusula Skip While
Cláusula Take While
Cláusula Group By (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Agrupa os elementos de um resultado de consulta. Também pode ser usada para aplicar
funções de agregação a cada grupo. A operação de agrupamento é baseada em uma ou
mais chaves.
Sintaxe
VB
Into aggregateList
Partes
listField1 , listField2
keyExp1
Obrigatórios. Uma expressão que identifica a chave a ser usada para determinar os
grupos de elementos. Você pode especificar mais de uma chave para especificar
uma chave composta.
keyExp2
Opcional. Uma ou mais chaves adicionais que são combinadas com keyExp1 para
criar uma chave composta.
aggregateList
Into Group
-ou-
VB
Comentários
Você pode usar a cláusula Group By para interromper os resultados de uma consulta
nos grupos. O agrupamento é baseado em uma chave ou chave composta que consiste
em várias chaves. Os elementos associados aos valores de chave correspondentes são
incluídos no mesmo grupo.
Exemplo
O exemplo de código a seguir agrupa uma lista de clientes com base na localização
(país/região) e fornece uma contagem dos clientes em cada grupo. Os resultados são
ordenados pelo nome de país/região. Os resultados agrupados são ordenados pelo
nome da cidade.
VB
Order By cust.City
Order By CountryName
Console.WriteLine(country.CountryName &
Next
Next
End Sub
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula Select
Cláusula From
Cláusula Order By
Cláusula Aggregate
Cláusula Group Join
Cláusula Join Group (Visual Basic)
Artigo • 28/11/2022 • 3 minutos para o fim da leitura
Sintaxe
VB
Into expressionList
Partes
Termo Definição
element Obrigatórios. A variável de controle para a coleção que está sendo ingressadas.
key1 Equals Obrigatórios. Identifica as chaves para as coleções sendo ingressadas. Você
key2 deve usar o operador Equals para comparar as chaves das coleções que estão
sendo ingressadas. Você pode combinar condições de junção usando o
operador And para identificar várias chaves. O parâmetro key1 deve vir da
coleção do lado esquerdo do operador Join . O parâmetro key2 deve vir da
coleção do lado direito do operador Join .
A coleção resultante de uma operação Group Join pode conter qualquer combinação
de valores da coleção identificada na cláusula From e as expressões identificadas na
cláusula Into da cláusula Group Join . Para obter mais informações sobre expressões
válidas para a cláusula Into , consulte aCláusula agregada.
Você pode usar a cláusula Join para combinar coleções em uma única coleção. Isso é
equivalente a INNER JOIN no SQL.
Exemplo
O exemplo de código a seguir une duas coleções usando a cláusula Group Join .
VB
OrderTotal = Sum(ord.Total)
CustomerOrders, OrderTotal
Console.WriteLine(customer.CompanyName &
Next
Next
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula Select
Cláusula From
Cláusula Join
Cláusula Where
Cláusula Group By
Cláusula Join (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
[ joinClause _ ]
[ groupJoinClause ... _ ]
Partes
element Necessário. A variável de controle para a coleção que está sendo ingressadas.
collection
joinClause
Opcional. Uma ou mais cláusulas adicionais Join para refinar ainda mais a consulta.
groupJoinClause
Opcional. Uma ou mais cláusulas adicionais Group Join para refinar ainda mais a
consulta.
Obrigatórios. Identifica as chaves para as coleções sendo ingressadas. Você deve usar o
operador Equals para comparar as chaves das coleções que estão sendo ingressadas.
Você pode combinar condições de junção usando o operador And para identificar várias
chaves. key1 deve vir da coleção do lado esquerdo do operador Join . key2 deve vir da
coleção do lado direito do operador Join .
As chaves usadas na condição de junção podem ser expressões que incluem mais de um
item da coleção. No entanto, cada expressão de chave pode conter apenas itens de sua
respectiva coleção.
Comentários
A cláusula Join combina duas coleções com base em valores de chave correspondentes
das coleções que estão sendo ingressadas. A coleção resultante pode conter qualquer
combinação de valores da coleção identificada no lado esquerdo do operador Join e a
coleção identificada na cláusula Join . A consulta retornará apenas os resultados para os
quais a condição especificada pelo operador Equals é atendida. Isso é equivalente a
INNER JOIN no SQL.
Você pode usar várias cláusulas Join em uma consulta para unir duas ou mais coleções
em uma coleção única.
Você pode executar uma junção implícita para combinar coleções sem a cláusula Join .
Para fazer isso, inclua várias cláusulas In em From e especifique uma cláusula Where
que identifique as chaves que você deseja usar para a junção.
Você pode usar a cláusula Group Join para combinar coleções em uma coleção
hierárquica única. Isso é como um LEFT OUTER JOIN no SQL.
Exemplo 1
O exemplo de código a seguir executa uma junção implícita para combinar uma lista de
clientes com seus pedidos.
VB
Select cust.CompanyName
Console.WriteLine(companyName)
Next
Exemplo 2
O exemplo de código a seguir une duas coleções usando a cláusula Join .
VB
Imports System.Diagnostics
.ProcessName = "explorer",
.ProcessName = "winlogon",
.ProcessName = "cmd",
.ProcessName = "iexplore",
Next
End Sub
End Class
End Class
Exemplo 3
O exemplo de código a seguir une duas coleções usando a cláusula Join com duas
colunas de chave.
VB
Imports System.Diagnostics
.ProcessName = "explorer",
.Priority = 8})
.ProcessName = "winlogon",
.Priority = 13})
.ProcessName = "cmd",
.Priority = 8})
.ProcessName = "iexplore",
.Priority = 8})
desc.Priority
proc.ProcessName,
proc.Id,
proc.Description,
proc.Priority)
Next
End Sub
End Class
End Class
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula Select
Cláusula From
Cláusula Group Join
Cláusula Where
Cláusula Let (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
Termo Definição
variable Obrigatórios. Um alias que pode ser usado para fazer referência aos resultados da
expressão fornecida.
expression Obrigatórios. Uma expressão que será avaliada e atribuída à variável especificada.
Comentários
A cláusula Let permite calcular valores para cada resultado de consulta e referenciá-los
usando um alias. O alias pode ser usado em outras cláusulas, como a cláusula Where . A
cláusula Let permite criar uma instrução de consulta mais fácil de ler porque você pode
especificar um alias para uma cláusula de expressão incluída na consulta e substituir o
alias sempre que a cláusula de expressão for usada.
Exemplo
O exemplo de código a seguir usa a cláusula Let para calcular um desconto de 10% em
produtos.
VB
Dim discountedProducts = From prod In products
prod.ProductName, prod.UnitPrice.ToString("$#.00"),
(prod.UnitPrice - prod.Discount).ToString("$#.00"))
Next
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula Select
Cláusula From
Cláusula Where
Cláusula Order By (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
orderExp1 Necessário. Um ou mais campos do resultado da consulta atual que
Comentários
Você pode usar a cláusula Order By para classificar os resultados de uma consulta. A
cláusula Order By só pode classificar um resultado com base na variável de intervalo
para o escopo atual. Por exemplo, a cláusula Select introduz um novo escopo em uma
expressão de consulta com novas variáveis de iteração para esse escopo. As variáveis de
intervalo definidas antes de uma cláusula Select em uma consulta não estão
disponíveis após Select . Portanto, se você quiser ordenar os resultados por um campo
que não esteja disponível na cláusula Select , deverá colocar a Order By antes de
Select . Um exemplo de quando você teria que fazer isso é quando deseja classificar a
consulta por campos que não são retornados como parte do resultado.
VB
Exemplo 2
A expressão de consulta a seguir usa a cláusula Order By para classificar o resultado da
consulta por preço em ordem decrescente. Livros com o mesmo preço são classificados
por título em ordem crescente.
VB
Exemplo 3
A expressão de consulta a seguir usa uma cláusula Select para selecionar o título do
livro, o preço, a data de publicação e o autor. Em seguida, ele preenche os campos
Title , Price , PublishDate e Author da variável de intervalo para o novo escopo. A
cláusula Order By ordena a nova variável de intervalo por nome do autor, título do livro
e preço. Cada coluna é classificada na ordem padrão (crescente).
VB
Dim bookOrders =
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula Select
Cláusula From
Cláusula Select (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
Partes
var1
Opcional. Um alias que pode ser usado para fazer referência aos resultados da
expressão da coluna.
fieldName1
Comentários
Você pode usar a cláusula Select para definir os resultados a serem retornados de uma
consulta. Isso permite definir os membros de um novo tipo anônimo criado por uma
consulta ou direcionar os membros de um tipo nomeado que é retornado por uma
consulta. A cláusula Select não é necessária para uma consulta. Se nenhuma cláusula
Select for especificada, a consulta retornará um tipo com base em todos os membros
das variáveis de intervalo identificadas para o escopo atual. Para obter mais
informações, consulte Tipos Anônimos. Quando uma consulta cria um tipo nomeado,
ela retorna um resultado do tipo IEnumerable<T> em que T é o tipo criado.
A cláusula Select pode fazer referência a qualquer variável no escopo atual. Isso inclui
variáveis de intervalo identificadas na cláusula From (ou cláusulas From ). Ele também
inclui novas variáveis criadas com um alias pelas cláusulas Aggregate , Let , Group By ou
Group Join , ou variáveis de uma cláusula Select anterior na expressão de consulta. A
cláusula Select também pode incluir valores estáticos. Por exemplo, o exemplo de
código a seguir mostra uma expressão de consulta na qual a cláusula Select define o
resultado da consulta como um novo tipo anônimo com quatro membros: ProductName ,
Price , Discount e DiscountedPrice . Os valores de membro ProductName e Price são
VB
Dim priceList =
VB
VB
Dim customerNames = From cust In customers
Select cust.CompanyName
.Address = cust.Address,
.City = cust.City,
.Region = cust.Region,
.Country = cust.Country}
Exemplo
A expressão de consulta a seguir usa uma cláusula From para declarar uma variável de
intervalo cust para a coleção customers . A cláusula Select seleciona o nome do cliente
e o valor da ID e preenche as colunas CompanyName e CustomerID da nova variável de
intervalo. A instrução For Each faz loop sobre cada objeto retornado e exibe as colunas
CompanyName e CustomerID de cada registro.
VB
Next
End Sub
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula From
Cláusula Where
Cláusula Order By
Tipos anônimos
Cláusula Skip (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Skip count
Partes
count
Comentários
A cláusula Skip faz com que uma consulta ignore os elementos no início de uma lista
de resultados e retorne os elementos restantes. O número de elementos a serem
ignorados é identificado pelo parâmetro count .
Você pode usar a cláusula Skip com a cláusula Take para retornar um intervalo de
dados de qualquer segmento de uma consulta. Para fazer isso, passe o índice do
primeiro elemento do intervalo para a cláusula Skip e o tamanho do intervalo para a
cláusula Take .
Ao usar a cláusula Skip em uma consulta, talvez você também precise garantir que os
resultados sejam retornados em uma ordem que permitirá que a cláusula Skip ignore
os resultados pretendidos. Para obter mais informações sobre como ordenar resultados
da consulta, confira Cláusula Order By.
Você pode usar a cláusula SkipWhile para especificar que apenas determinados
elementos sejam ignorados, dependendo de uma condição fornecida.
Exemplo
O exemplo de código a seguir usa a cláusula Skip junto com a cláusula Take para
retornar dados de uma consulta em páginas. A função GetCustomers usa a cláusula Skip
para ignorar os clientes na lista até o valor de índice inicial fornecido e usa a cláusula
Take para retornar uma página de clientes começando a partir do valor de índice.
VB
Next
Console.WriteLine(vbCrLf)
pageNumber += 1
Loop
End Sub
Return returnCustomers
End Function
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula Select
Cláusula From
Cláusula Order By
Cláusula Skip While
Cláusula Take
Ignorar cláusula While (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Ignora elementos em uma coleção, contanto que uma condição especificada seja true
e retorne os elementos restantes.
Sintaxe
VB
Partes
Termo Definição
expression Obrigatórios. Uma expressão que representa uma condição para a qual testar
elementos. A expressão deve retornar um valor Boolean ou um equivalente
funcional, como um Integer para ser avaliado como um Boolean .
Comentários
A cláusula Skip While ignora elementos do início de um resultado de consulta até que
o expression fornecido retorne false . Depois que expression retornar false , a
consulta retorna todos os elementos restantes. O expression é ignorado para os
resultados restantes.
A cláusula Skip While difere da cláusula Where porque a cláusula Where pode ser usada
para excluir todos os elementos de uma consulta que não atendam a uma condição
específica. A cláusula Skip While exclui elementos somente até a primeira vez em que a
condição não é atendida. A cláusula Skip While é mais útil quando você está
trabalhando com um resultado de consulta ordenado.
Exemplo
O exemplo de código a seguir usa a cláusula Skip While para ignorar os resultados até
que o primeiro cliente dos Estados Unidos seja encontrado.
VB
' Return customers starting from the first U.S. customer encountered.
Order By cust.Country
Next
End Sub
Return True
End Function
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula Select
Cláusula From
Cláusula Skip
Cláusula Take While
Cláusula Where
Cláusula Take (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Take count
Partes
count
Comentários
A cláusula Take faz com que uma consulta inclua um número especificado de
elementos contíguos desde o início de uma lista de resultados. O número de elementos
a serem incluídos é especificado pelo parâmetro count .
Você pode usar a cláusula Take com a cláusula Skip para retornar um intervalo de
dados de qualquer segmento de uma consulta. Para fazer isso, passe o índice do
primeiro elemento do intervalo para a cláusula Skip e o tamanho do intervalo para a
cláusula Take . Nesse caso, a cláusula Take deve ser especificada após a cláusula Skip .
Ao usar a cláusula Take em uma consulta, talvez você também precise garantir que os
resultados sejam retornados em uma ordem que permitirá que a cláusula Take inclua os
resultados pretendidos. Para obter mais informações sobre como ordenar resultados da
consulta, confira Cláusula Order By.
Você pode usar a cláusula TakeWhile para especificar que apenas determinados
elementos sejam retornados, dependendo de uma condição fornecida.
Exemplo
O exemplo de código a seguir usa a cláusula Take junto com a cláusula Skip para
retornar dados de uma consulta em páginas. A função GetCustomers usa a cláusula
Skip para ignorar os clientes na lista até o valor de índice inicial fornecido e usa a
cláusula Take para retornar uma página de clientes começando desse valor de índice.
VB
Next
Console.WriteLine(vbCrLf)
pageNumber += 1
Loop
End Sub
Return returnCustomers
End Function
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula Select
Cláusula From
Cláusula Order By
Cláusula Take While
Cláusula Skip
Cláusula Take While (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Inclui elementos em uma coleção, contanto que a condição especificada seja true , e
ignora os elementos restantes.
Sintaxe
VB
Partes
Termo Definição
expression Obrigatórios. Uma expressão que representa uma condição para a qual testar
elementos. A expressão deve retornar um valor Boolean ou um equivalente
funcional, como um Integer para ser avaliado como um Boolean .
Comentários
A cláusula Take While inclui elementos do início de um resultado de consulta até que o
expression fornecido retorne false . Após expression retornar false , a consulta
A cláusula Take While difere da Where porque a Where pode ser usada para incluir
todos os elementos de uma consulta que atendam a uma condição específica. A
cláusula Take While inclui elementos somente até a primeira vez em que a condição
não é atendida. A cláusula Take While é mais útil quando você está trabalhando com
um resultado de consulta ordenado.
Exemplo
O exemplo de código a seguir usa a cláusula Take While para recuperar resultados até
que o primeiro cliente sem nenhum pedido seja encontrado.
VB
' Return customers until the first customer with no orders is found.
Next
End Sub
Return False
End Function
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula Select
Cláusula From
Cláusula Take
Cláusula Skip While
Cláusula Where
Cláusula Where (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Where condition
Partes
condition
Comentários
A cláusula Where permite filtrar dados de consulta selecionando apenas elementos que
atendam a determinados critérios. Os elementos cujos valores fazem com que a cláusula
Where seja avaliada como True são incluídos no resultado da consulta; outros
elementos são excluídos. A expressão usada em uma cláusula Where deve ser avaliada
como Boolean ou o equivalente a Boolean , como um Integer que é avaliado como
False quando o valor é zero. Você pode combinar várias expressões em uma cláusula
Por padrão, as expressões de consulta não são avaliadas até serem acessadas, por
exemplo, quando são vinculadas a dados ou iteradas em um loop For . Como resultado,
a cláusula Where não é avaliada até que a consulta seja acessada. Se você tiver valores
externos à consulta usados na cláusula Where , certifique-se de que o valor apropriado
seja usado na cláusula Where no momento em que a consulta for executada. Para obter
mais informações sobre a execução da consulta, consulte Como gravar sua primeira
consulta LINQ.
Você pode chamar funções dentro de uma cláusula Where para realizar um cálculo ou
operação em um valor do elemento atual na coleção. Chamar uma função em uma
cláusula Where pode fazer com que a consulta seja executada imediatamente quando
for definida, e não quando for acessada. Para obter mais informações sobre a execução
da consulta, consulte Como gravar sua primeira consulta LINQ.
Exemplo 1
A expressão de consulta a seguir usa uma cláusula From para declarar uma variável de
intervalo cust para cada objeto Customer na coleção customers . A cláusula Where usa a
variável de intervalo para restringir a saída aos clientes da região especificada. O loop
For Each exibe o nome da empresa para cada cliente no resultado da consulta.
VB
Console.WriteLine(cust.CompanyName)
Next
End Sub
Exemplo 2
O exemplo a seguir usa os operadores lógicos And e Or na cláusula Where .
VB
' Get a list of elements that have an atomic number from 12 to 14,
Or theElement.Name.EndsWith("r")
Order By theElement.Name
Next
' Output:
' Aluminum 13
' Magnesium 12
' Silicon 14
' Sulfur 16
End Sub
End Function
End Class
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula From
Cláusula Select
Instrução For Each...Next
Instruções (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Nesta seção
Instruções A-E
Instruções F-P
Instruções Q-Z
Cláusulas
Lista de Atributos
Lista de parâmetros
Lista de Tipos
Seções relacionadas
Referência da linguagem Visual Basic
Instruções A-E
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
AddHandler
Chamar
Classe
Const
Continuar
Declare
Delegar
Dim
Loop Do…
Else
End
Enumeração
Erase
Erro
Evento
Sair
Confira também
Instruções F-P
Instruções Q-Z
Referência da linguagem Visual Basic
Instrução AddHandler
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
Parte Descrição
Comentários
As instruções AddHandler e RemoveHandler permitem que você inicie e pare a
manipulação a qualquer momento durante a execução do programa.
Um manipulador adicionado com um lambda explícito NÃO PODE ser removido mais
tarde (usando RemoveHandler ). De fato, se a lambda não receber um nome, não será
possível referenciá-la mais tarde. Mas atribuir o lambda a uma variável e adicionar o
manipulador por meio dessa variável permite remover o manipulador usando essa
variável.
7 Observação
Instrução de evento.
Exemplo
VB
Sub TestEvents()
Obj.CauseSomeEvent()
Obj.CauseSomeEvent()
End Sub
Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
End Sub
Sub CauseSomeEvent()
RaiseEvent Ev_Event()
End Sub
End Class
Confira também
Instrução RemoveHandler
Alças
Instrução Event
Eventos
Instrução Call (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
Parte Descrição
argumentList Opcional. Lista de variáveis ou expressões que representam argumentos que são
passados para o procedimento quando ele é chamado. Vários argumentos são
separados por vírgulas. Se você incluir argumentList , deverá colocá-lo entre
parênteses.
Comentários
Você pode usar a palavra-chave Call ao chamar um procedimento. Para a maioria das
chamadas de procedimento, você não precisa usar essa palavra-chave.
Exemplo
O código a seguir mostra dois exemplos em que a palavra-chave Call é necessária para
chamar um procedimento. Em ambos os exemplos, a expressão chamada não começa
com um identificador.
VB
Sub TestCall()
End Sub
Class TheClass
Console.Write(" World")
End Sub
End Class
Confira também
Instrução Function
Instrução Sub
Instrução Declare
Expressões Lambda
Instrução Class (Visual Basic)
Artigo • 28/11/2022 • 4 minutos para o fim da leitura
Sintaxe
VB
[ Inherits classname ]
[ Implements interfacenames ]
[ statements ]
End Class
Partes
Termo Definição
- Público
- Protegido
- Amigo
- Particular
- Amigo Protegido
typelist Obrigatório se você usar a palavra-chave Of. Lista de parâmetros de tipo para
essa classe. Confira Lista de tipos.
Inherits Opcional. Indica que essa classe herda os membros de outra classe. Confira
Instrução Inherits.
classname Obrigatório se você usar a instrução Inherits . O nome da classe da qual essa
classe deriva.
Implements Opcional. Indica que essa classe implementa os membros de uma ou mais
interfaces. Confira Instrução Implements.
interfacenames Obrigatório se você usar a instrução Implements . Os nomes das interfaces que
essa classe implementa.
Comentários
Uma instrução Class define um novo tipo de dados. Uma classe é um bloco de
construção fundamental da OOP (programação orientada a objeto). Para obter mais
informações, confira Objetos e classes.
Você só pode usar Class no namespace ou no nível do módulo. Isso significa que o
contexto de declaração de uma classe precisa ser um arquivo de origem, namespace,
classe, estrutura, módulo ou interface, e não pode ser um procedimento ou bloco. Para
obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.
Cada instância de uma classe tem um tempo de vida independente de todas as outras
instâncias. Esse tempo de vida começa quando ele é criado por uma cláusula New
Operator ou por uma função como CreateObject. Ele termina quando todas as variáveis
que apontam para a instância foram definidas como Nothing ou para instâncias de
outras classes.
As classes assumem o padrão de acesso Amigo. Você pode ajustar os níveis de acesso
com os modificadores de acesso. Para obter mais informações, consulte Níveis de
acesso no Visual Basic.
Regras
Aninhamento. Você pode definir uma classe dentro de outra. A classe externa é
chamada de classe independente e a classe interna é chamada de classe aninhada.
Herança. Se a classe usar a Instrução Inherits, você poderá especificar apenas uma
classe base ou interface. Uma classe não pode herdar de mais de um elemento.
Uma classe não pode herdar de outra classe com um nível de acesso mais
restritivo. Por exemplo, uma classe Public não pode herdar de uma classe Friend .
Uma classe não pode herdar de uma classe que está aninhada dentro dela.
Comportamento
Nível de acesso. Em uma classe, você pode declarar cada membro com o próprio
nível de acesso. Os membros da classe assumem o padrão de acesso Público,
exceto variáveis e constantes, que assumem o padrão de acesso Privado. Quando
uma classe tem acesso mais restrito do que um dos membros dele, o nível de
acesso da classe tem precedência.
Tempo de vida. Visual Basic não oferece suporte a classes estáticas. O equivalente
funcional de uma classe estática é fornecido por um módulo. Para obter mais
informações, confira Instrução Module.
Classes e módulos
Estes elementos têm muitas semelhanças, mas também há algumas diferenças
importantes.
Orientação a objeto. As classes são orientadas a objetos, mas os módulos não são.
Você pode criar uma ou mais instâncias de uma classe. Para obter mais
informações, confira Objetos e classes.
Exemplo
O exemplo a seguir usa uma instrução Class para definir uma classe e vários membros.
VB
Class BankAccount
Get
Return accountBalance
End Get
End Property
End Sub
End Sub
End Sub
End Class
Confira também
Objetos e Classes
Estruturas e classes
Instrução Interface
Instrução Module
Instrução Property
Tempo de vida do objeto: como os objetos são criados e destruídos
Tipos genéricos no Visual Basic
Como: Usar uma classe genérica
Instrução Const (Visual Basic)
Artigo • 07/04/2023 • 4 minutos para o fim da leitura
Sintaxe
VB
Const constantlist
Partes
attributelist
accessmodifier
Opcional. Use isso para especificar qual código pode acessar essas constantes. Pode ser
Público, Protegido, Amigo, Amigo protegido, Particular ou Protegido de forma
particular.
Shadows
constantlist
Parte Descrição
Comentários
Se você tiver um valor que nunca é alterado em seu aplicativo, poderá definir uma
constante nomeada e usá-la no lugar de um valor literal. Um nome é mais fácil de
lembrar do que um valor. Você pode definir a constante apenas uma vez e usá-la em
muitos lugares em seu código. Se em uma versão posterior você precisar redefinir o
valor, a instrução Const será o único local em que você precisa fazer uma alteração.
Você só pode usar Const no nível do módulo ou procedimento. Isso significa que o
contexto de declaração de uma variável precisa ser uma classe, uma estrutura, um
módulo, um procedimento ou um bloco e não pode ser um arquivo de origem, um
namespace ou uma interface. Para obter mais informações, consulte Contextos de
declaração e níveis de acesso padrão.
Regras
Contextos da declaração. Uma constante declarada no nível do módulo, fora de
qualquer procedimento, é uma constante de membro; é um membro da classe, da
estrutura ou do módulo que a declara.
Tipo padrão. Se você não especificar datatype , a constante usará o tipo de dados
de initializer . Se você especificar datatype e initializer , o tipo de dados de
initializer deverá ser conversível para datatype . Se nem datatype nem
initializer estiver presente, o tipo de dados será padrão para Object .
Tipos diferentes. Você pode especificar tipos de dados diferentes para constantes
diferentes usando uma cláusula As separada para cada variável que você declarar.
No entanto, você não pode declarar diversas constantes como sendo do mesmo
tipo usando uma cláusula As comum.
Você não pode usar variáveis ou funções em initializer . No entanto, você pode
usar palavras-chave de conversão, como CByte e CShort . Você também pode usar
AscW se chamá-lo com uma constante String ou um argumento Char , já que isso
pode ser avaliado em tempo de compilação.
Comportamento
Escopo. As constantes locais são acessíveis somente de dentro do procedimento
ou bloco. As constantes de membro são acessíveis de qualquer lugar dentro da
classe, da estrutura ou do módulo.
Exemplo 1
O exemplo a seguir usa a instrução Const para declarar constantes para uso no lugar de
valores literais.
VB
Exemplo 2
Se você definir uma constante com o tipo de dados Object , o compilador do Visual
Basic fornecerá o tipo de initializer , em vez de Object . No exemplo a seguir, a
constante naturalLogBase tem o tipo de tempo de execução Decimal .
VB
naturalLogBase.GetType.ToString())
O exemplo anterior usa o método ToString no objeto Type retornado pelo Operador
GetType, porque Type não pode ser convertido em String usando CStr .
Confira também
Asc
AscW
Instrução Enum
Diretiva #Const
Instrução Dim
Instrução ReDim
Conversões implícitas e explícitas
Constantes e Enumerações
Constantes e Enumerações
Funções de conversão do tipo
Instrução Continue (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Comentários
Você pode transferir de dentro de um loop Do , For ou While para a próxima iteração
desse loop. O controle passa imediatamente para o teste de condição de loop, que é
equivalente à transferência para a instrução For ou While , ou para a instrução Do ou
Loop que contém a cláusula Until ou While .
Você pode usar Continue em qualquer local no loop que permita transferências. As
regras que permitem a transferência de controle são iguais às da Instrução GoTo.
outro lado, a estrutura Try ... End Try estiver contida no loop, você não poderá usar
Continue para transferir o controle para fora do bloco Finally e poderá usá-lo para
transferir para fora um bloco Try ou Catch somente se você transferir completamente
para fora da estrutura Try ... End Try .
Se você tiver loops aninhados do mesmo tipo, por exemplo, um loop Do dentro de Do ,
uma instrução Continue Do pulará para a próxima iteração do loop Do mais interno que
o contém. Você não pode usar Continue para pular para a próxima iteração de um loop
contendo do mesmo tipo.
Se você tiver loops aninhados de tipos diferentes, por exemplo, um loop Do dentro de
For , poderá pular para a próxima iteração de qualquer loop usando Continue Do ou
Continue For .
Exemplo
O exemplo de código a seguir usa a instrução Continue While para pular para a próxima
coluna de uma matriz se um divisor for zero. O Continue While está dentro de um loop
For . Ele é transferido para a instrução While col < lastcol , que é a próxima iteração
VB
row = -1
row += 1
col = -1
col += 1
a(row, col) = 0
Continue While
Else
End If
Next i
End While
End While
Confira também
Instrução Do...Loop
Instrução For...Next
Instrução While...End While
Instrução Try...Catch...Finally
Instrução Declare
Artigo • 28/11/2022 • 8 minutos para o fim da leitura
Sintaxe
VB
' -or-
Partes
Termo Definição
- Público
- Protegido
- Amigo
- Particular
- Amigo Protegido
- Ansi (padrão)
- Unicode
- Auto
Sub Opcional, mas Sub ou Function deve aparecer. Indica que o procedimento
externo não retorna um valor.
Termo Definição
Function Opcional, mas Sub ou Function deve aparecer. Indica que o procedimento
externo retorna um valor.
name Obrigatórios. Nome dessa referência externa. Para obter mais informações,
consulte Nomes do Elemento Declarado.
Lib Obrigatórios. Apresenta uma cláusula Lib que identifica o arquivo externo
(DLL ou recurso de código) contendo um procedimento externo.
Alias Opcional. Indica que o procedimento que está sendo declarado não pode ser
identificado no arquivo pelo nome especificado em name . Especifique a
identificação em aliasname .
-ou-
Comentários
Às vezes, você precisa chamar um procedimento definido em um arquivo (como uma
DLL ou um recurso de código) fora do projeto. Quando você faz isso, o compilador do
Visual Basic não tem acesso às informações necessárias para chamar o procedimento
corretamente, como onde o procedimento está localizado, como ele é identificado, sua
sequência de chamada e tipo de retorno e o conjunto de caracteres de cadeia de
caracteres usado. A instrução Declare cria uma referência a um procedimento externo e
fornece essas informações necessárias.
Você só pode usar Declare no nível do módulo. Isso significa que o contexto de
declaração de uma referência externa precisa ser uma classe, estrutura, módulo ou
procedimento, e não pode ser um arquivo de origem, namespace, interface,
procedimento ou bloco. Para obter mais informações, consulte Contextos de declaração
e níveis de acesso padrão.
Referências externas padrão para acesso Público. Você pode ajustar os níveis de acesso
com os modificadores de acesso.
Regras
Atributos. É possível aplicar atributos a uma referência externa. Qualquer atributo
aplicado só tem efeito em seu projeto, não no arquivo externo.
Nome do procedimento externo. Você não precisa dar a essa referência externa o
mesmo nome (em name ) que o nome do ponto de entrada do procedimento em
seu arquivo externo ( aliasname ). Você pode usar uma cláusula Alias para
especificar o nome do ponto de entrada. Isso poderá ser útil se o procedimento
externo tiver o mesmo nome que um modificador reservado do Visual Basic ou
uma variável, procedimento ou outro elemento de programação no mesmo
escopo.
7 Observação
7 Observação
7 Observação
Tipos de dados padrão. Se Option Strict for Off e você não especificar o tipo de
dados de um parâmetro em parameterlist , o compilador do Visual Basic
converterá o argumento correspondente no Tipo de Dados do Objeto. Da mesma
forma, se você não especificar returntype , o compilador usará o tipo de dados de
retorno como Object .
7 Observação
Como você está lidando com um procedimento externo que pode ter sido
gravado em uma plataforma diferente, é perigoso fazer qualquer suposição
sobre tipos de dados ou permitir que eles sejam padrão. É mais seguro
especificar o tipo de dados de cada parâmetro e do valor retornado, se
houver. Isso também melhora a legibilidade do código.
Comportamento
Escopo. Uma referência externa está no escopo em toda a classe, estrutura ou
módulo.
Tempo de vida. Uma referência externa tem o mesmo tempo de vida que a classe,
a estrutura ou o módulo em que ela é declarada.
) Importante
Exemplo 1
O exemplo a seguir declara uma referência externa a um procedimento Function que
retorna o nome de usuário atual. Em seguida, ele chama o procedimento externo
GetUserNameA como parte do procedimento getUser .
VB
Sub GetUser()
MsgBox(userName)
End Sub
Exemplo 2
DllImportAttribute fornece uma maneira alternativa de usar funções no código não
gerenciado. O exemplo a seguir declara uma função importada sem usar uma instrução
Declare .
VB
Imports System.Runtime.InteropServices
VB
<DllImportAttribute("kernel32.dll", EntryPoint:="MoveFileW",
SetLastError:=True, CharSet:=CharSet.Unicode,
ExactSpelling:=True,
CallingConvention:=CallingConvention.StdCall)>
' This function copies a file from the path src to the path dst.
' Leave this function empty. The DLLImport attribute forces calls
End Function
Confira também
LastDllError
Instrução Imports (tipo e namespace .NET)
Operador AddressOf
Instrução Function
Instrução Sub
Lista de parâmetros
Instrução Call
Passo a passo: Fazer chamadas de APIs do Windows
Instrução Delegate
Artigo • 12/12/2022 • 4 minutos para o fim da leitura
Sintaxe
VB
[ <attrlist> ] [ accessmodifier ] _
Partes
Termo Definição
attrlist Opcional. Lista de atributos que se aplicam a esse delegado. Vários atributos
são separados por vírgulas. Você precisa colocar a Lista de atributos entre
colchetes angulares (" < " e " > ").
accessmodifier Opcional. Especifica qual código pode acessar o delegado. Um dos seguintes
pode ser feito:
Shadows Opcional. Indica que esse delegado redeclara novamente e oculta um elemento
de programação nomeado de maneira idêntica, ou conjunto de elementos
sobrecarregados, em uma classe base. Você pode sombrear qualquer tipo de
elemento declarado com qualquer outro tipo.
Sub Opcional, mas Sub ou Function deve aparecer. Declara esse procedimento
como um procedimento Sub delegado que não retorna um valor.
Function Opcional, mas Sub ou Function deve aparecer. Declara esse procedimento
como um procedimento Function delegado que retorna um valor.
typeparamlist Opcional. Lista de parâmetros de tipo para esse delegado. Vários parâmetros de
tipo são separados por vírgulas. Como opção, cada parâmetro de tipo pode ser
declarado variante usando os modificadores In e Out genéricos. Você deve
colocar a Lista de Tipos entre parênteses e apresentá-la com a palavra-chave
Of .
Comentários
A instrução Delegate define o parâmetro e os tipos de retorno de uma classe delegada.
Qualquer procedimento com parâmetros e tipos de retorno correspondentes pode ser
usado para criar uma instância dessa classe delegada. Em seguida, o procedimento
pode ser invocado posteriormente por meio da instância delegada, chamando o
método Invoke do delegado.
O tipo de tempo de compilação do expression deve ser o nome de uma classe ou uma
interface que contém um método do nome especificado cuja assinatura coincide com a
assinatura da classe delegada. O methodname pode ser um método compartilhado ou um
método de instância. O methodname não é opcional, mesmo se você criar um delegado
para o método padrão da classe.
Exemplo
O exemplo a seguir usa a instrução Delegate para declarar um delegado para operar em
dois números e retornar um número. O método DelegateTest usa uma instância de um
delegado desse tipo e o usa para operar em pares de números.
VB
ByVal x As Double,
ByVal y As Double
) As Double
Function AddNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x + y
End Function
Function SubtractNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x - y
End Function
Sub DelegateTest(
ByVal x As Double,
ByVal op As MathOperator,
ByVal y As Double
MsgBox(ret)
End Sub
End Sub
Confira também
Operador AddressOf
Of
Representantes
Como: Usar uma classe genérica
Tipos genéricos no Visual Basic
Covariância e Contravariância
In
Saída
Instrução Dim (Visual Basic)
Artigo • 28/11/2022 • 13 minutos para o fim da leitura
Sintaxe
VB
Partes
attributelist
accessmodifier
Público
Protegido
Friend
Privado
Amigo Protegido
Particular Protegido
Shared
Shadows
ReadOnly
WithEvents
Opcional. Especifica que essas são variáveis de objeto que se referem a instâncias
de uma classe que podem gerar eventos. Confira WithEvents.
variablelist
Parte Descrição
New Opcional. Cria uma nova instância da classe quando a instrução Dim é
executada.
Comentários
O compilador do Visual Basic usa a instrução Dim para determinar o tipo de dados da
variável e outras informações, como qual código pode acessar a variável. O exemplo a
seguir declara uma variável para manter um valor Integer .
VB
VB
Para um tipo de referência, use a palavra-chave New para criar uma nova instância da
classe ou estrutura especificada pelo tipo de dados. Se você usar New , não usará uma
expressão do inicializador. Em vez disso, você fornecerá argumentos, se forem
necessários, para o construtor da classe da qual está criando a variável.
VB
Você pode declarar uma variável em um procedimento, um bloco, uma classe, uma
estrutura ou um módulo. Você não pode declarar uma variável em um arquivo de
origem, namespace ou interface. Para obter mais informações, consulte Contextos de
declaração e níveis de acesso padrão.
VB
VB
Dim num2 = 3
Para obter informações sobre o que acontece quando um tipo de dados ou inicializador
não é especificado, confira Tipos e Valores de Dados Padrão mais adiante neste tópico.
Você pode usar um inicializador de objeto para declarar instâncias de tipos nomeados e
anônimos. O código a seguir cria uma instância de uma classe Student e usa um
inicializador de objeto para inicializar propriedades.
VB
.Last = "Tucker"}
Para obter mais informações sobre inicializadores de objeto, confira Como declarar um
objeto usando um inicializador de objeto, Inicializadores de objeto: tipos nomeados e
anônimos e Tipos anônimos.
VB
Se você declarar mais de uma variável com uma cláusula As , não poderá fornecer um
inicializador para esse grupo de variáveis.
Você pode especificar tipos de dados diferentes para constantes variáveis usando uma
cláusula As separada para cada variável que você declarar. Cada variável usa o tipo de
dados especificado na primeira cláusula As encontrada após sua parte variablename .
VB
Matrizes
Você pode declarar uma variável para manter uma matriz, que pode conter vários
valores. Para especificar que uma variável contém uma matriz, variablename deve estar
imediatamente entre parênteses. Para obter mais informações sobre matrizes, confira
Matrizes.
Você pode especificar o limite inferior e superior de cada dimensão de uma matriz. Para
fazer isso, inclua um parêntese boundslist . Para cada dimensão, boundslist especifica
o limite superior e, opcionalmente, o limite inferior. O limite inferior é sempre zero, quer
você o especifique ou não. Cada índice pode variar de zero até seu valor associado
superior.
As duas instruções a seguir são equivalentes. Cada instrução declara uma matriz de 21
elementos Integer . Quando você acessa a matriz, o índice pode variar de 0 a 20.
VB
A instrução a seguir declara uma matriz bidimensional do tipo Double . A matriz tem 4
linhas (3 + 1) de 6 colunas (5 + 1) cada. Observe que um limite superior representa o
valor mais alto possível para o índice, não o comprimento da dimensão. O comprimento
da dimensão é o limite superior mais um.
VB
Você pode deixar todos os limites em branco em uma declaração de matriz. Se você
fizer isso, a matriz terá o número de dimensões especificadas, mas ela não será
inicializada. Ele tem um valor de Nothing até que você inicialize pelo menos alguns de
seus elementos. A instrução Dim deve especificar limites para todas as dimensões ou
para nenhuma dimensão.
VB
ReDim messages(4)
Se a matriz tiver mais de uma dimensão, você deverá incluir vírgulas entre os parênteses
para indicar o número de dimensões.
VB
Você pode declarar uma matriz de comprimento zero declarando uma das dimensões da
matriz como -1. Uma variável que contém uma matriz de tamanho igual a zero não tem
o valor Nothing . Matrizes de comprimento zero são exigidas por determinadas funções
comuns de runtime de linguagem. Se você tentar acessar essa matriz, ocorrerá uma
exceção de runtime. Saiba mais em Matrizes.
Você pode inicializar os valores de uma matriz usando um literal de matriz. Para fazer
isso, cerque os valores de inicialização com chaves ( {} ).
VB
VB
Sim Não Dim qty A variável é inicializada para o valor padrão para o
As tipo de dados. Consulte a tabela posteriormente
Integer nesta seção.
Char Binário 0
Boolean False
Cada elemento de uma estrutura é inicializado como se fosse uma variável separada. Se
você declarar o comprimento de uma matriz, mas não inicializar os respectivos
elementos, cada elemento será inicializado como se fosse uma variável separada.
Tempo de vida de variável local estático
Uma variável local Static tem um tempo de vida maior do que o do procedimento no
qual é declarada. Os limites do tempo de vida da variável dependem de onde o
procedimento é declarado e se é Shared .
Atributos e modificadores
Você pode aplicar atributos somente a variáveis membro, não a variáveis locais. Um
atributo contribui com informações para os metadados do assembly, o que não é
significativo para o armazenamento temporário, como variáveis locais.
No nível do módulo, você não pode usar o modificador Static para declarar variáveis
membro. No nível do procedimento, você não pode usar Shared , Shadows , ReadOnly ,
WithEvents nem modificadores de acesso para declarar variáveis locais.
Você pode especificar qual código pode acessar uma variável fornecendo um
accessmodifier . Variáveis de membro de classe e módulo (fora de qualquer
O código fora de uma classe, estrutura ou módulo deve qualificar o nome de uma
variável de membro com o nome dessa classe, estrutura ou módulo. O código fora
de um procedimento ou bloco não pode se referir a nenhuma variável local dentro
desse procedimento ou bloco.
Exemplo 1
O exemplo a seguir declara variáveis usando a instrução Dim com várias opções.
VB
Exemplo 2
O exemplo a seguir lista os números principais entre 1 e 30. O escopo das variáveis
locais é descrito em comentários de código.
VB
End If
Next
Debug.WriteLine(sb.ToString)
' Output: 2 3 5 7 11 13 17 19 23 29
End Sub
Return False
Else
Return False
End If
Next
Return True
End If
End Function
Exemplo 3
No exemplo a seguir, a variável speedValue é declarada no nível da classe. A palavra-
chave Private é usada para declarar a variável. A variável pode ser acessada por
qualquer procedimento na classe Car .
VB
theCar.Accelerate(30)
theCar.Accelerate(20)
theCar.Accelerate(-5)
Debug.WriteLine(theCar.Speed.ToString)
' Output: 45
VB
Get
Return speedValue
End Get
End Property
speedValue += speedIncrease
End Sub
End Class
Confira também
Instrução Const
Instrução ReDim
Instrução Option Explicit
Instrução Option Infer
Instrução Option Strict
Página de Compilação, Designer de Projeto (Visual Basic)
Declaração de Variável
matrizes
Inicializadores de objeto: tipos nomeados e anônimos
Tipos anônimos
Inicializadores de objeto: tipos nomeados e anônimos
Como declarar um objeto usando um inicializador de objeto
Inferência de Tipo de Variável Local
Instrução Do...Loop (Visual Basic)
Artigo • 07/04/2023 • 4 minutos para o fim da leitura
Repete um bloco de instruções enquanto uma condição Boolean é True ou até que a
condição se torne True .
Sintaxe
VB
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop
' -or-
Do
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Partes
Termo Definição
While Não é possível receber se Until for usado. Repita o loop condition até que seja
False .
Until Não é possível receber se While for usado. Repita o loop condition até que seja
True .
condition Opcional. Expressão Boolean . Se condition for Nothing , o Visual Basic o tratará
como False .
statements Opcional. Uma ou mais instruções que são repetidas enquanto, ou até que
condition seja True .
Termo Definição
Comentários
Use uma estrutura Do...Loop quando quiser repetir um conjunto de instruções um
número indefinido de vezes até que uma condição seja atendida. Se você quiser repetir
as instruções um número definido de vezes, a instrução For...Next geralmente é uma
opção melhor.
Você pode usar While ou Until para especificar condition , mas não ambos. Se você
não der nenhum dos dois, o loop continuará até que um Exit controle de transferência
saia do loop.
Você pode testar condition apenas uma vez, no início ou no final do loop. Se você
testar condition no início do loop (na instrução Do ), o loop poderá não ser executado
nem uma vez. Se você testar no final do loop (na instrução Loop ), o loop sempre será
executado pelo menos uma vez.
A condição geralmente resulta de uma comparação de dois valores, mas pode ser
qualquer expressão avaliada como um valor de Tipo de dados booliano ( True ou
False ). Isso inclui valores de outros tipos de dados, como tipos numéricos, que foram
convertidos em Boolean .
Você pode aninhar loops Do colocando um loop dentro de outro. Você também pode
aninhar diferentes tipos de estruturas de controle entre si. Para obter mais informações,
confira Estruturas de controle aninhadas.
7 Observação
Exit Do geralmente é usado após avaliação de alguma condição, por exemplo, em uma
estrutura If...Then...Else . Talvez você queira sair de um loop se detectar uma
condição que torna desnecessário ou impossível continuar iterando, como um valor
errôneo ou uma solicitação de encerramento. Um uso de Exit Do serve para testar uma
condição que pode causar um loop infinito, que é um loop que pode ser executada
várias vezes ou até mesmo infinitamente. Você pode usar Exit Do para ignorar o loop.
Quando usado em loops Do aninhados, Exit Do transfere o controle para fora do loop
mais interno e para dentro do próximo nível mais alto de aninhamento.
Exemplo 1
No exemplo a seguir, as instruções no loop continuam a ser executadas até que a
variável index seja maior que 10. A cláusula Until está no final do loop.
VB
Do
index += 1
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Exemplo 2
O exemplo a seguir usa uma cláusula While em vez de uma cláusula Until , e condition
é testado no início do loop em vez de no final.
VB
index += 1
Loop
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Exemplo 3
No exemplo a seguir, condition interrompe o loop quando a variável index é maior
que 100. No entanto, a instrução If no loop faz com que a instrução Exit Do
interrompa o loop quando a variável de índice for maior que 10.
VB
Exit Do
End If
index += 1
Loop
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Exemplo 4
O exemplo a seguir lê todas as linhas em um arquivo de texto. O método OpenText abre
o arquivo e retorna um StreamReader que lê os caracteres. Na condição Do...Loop , o
método Peek do StreamReader determina se há caracteres adicionais.
VB
Else
Dim sr As System.IO.StreamReader =
System.IO.File.OpenText(textFilePath)
Debug.WriteLine(sr.ReadLine())
Loop
sr.Close()
End If
End Sub
Confira também
Estruturas de Loop
Instrução For...Next
Tipo de dados booliano
Estruturas de Controle Aninhadas
Instrução Exit
Instrução While...End While
Instrução Else (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
A palavra-chave Else pode ser usada nestes dois contextos:
Instrução If...Then...Else
Instrução Select...Case
Diretiva #If...Then...#Else
Confira também
Palavras-chave
Instrução End
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
End
Comentários
Você pode colocar a instrução End em qualquer lugar em um procedimento para forçar
todo o aplicativo a parar de executar. End fecha todos os arquivos abertos com uma
instrução Open e limpa todas as variáveis do aplicativo. O aplicativo fecha assim que não
há outros programas que contêm referências a seus objetos e nenhum de seus códigos
está em execução.
7 Observação
A instrução Stop suspende a execução, mas, ao contrário de End , não fecha nenhum
arquivo ou limpa nenhuma variável, a menos que ela seja encontrada em um arquivo
executável compilado (.exe).
Como End encerra seu aplicativo sem atender a nenhum recurso que possa estar
aberto, você deve tentar fechar de maneira limpa antes de usá-lo. Por exemplo, se o
aplicativo tiver formulários abertos, você deverá fechá-los antes que o controle chegue
à instrução End .
Você deve usar End com moderação e somente quando precisar parar imediatamente.
As formas normais de encerrar um procedimento (Instrução Return e Instrução Exit) não
apenas fecham o procedimento de maneira limpa, mas também dão ao código de
chamada a oportunidade de fechar de maneira limpa. Um aplicativo de console, por
exemplo, pode simplesmente Return do procedimento Main .
) Importante
Quando seguida por uma palavra-chave adicional, a Instrução End <keyword> delineia
a definição do procedimento ou bloco apropriado. Por exemplo, End Function encerra a
definição de um procedimento Function .
Exemplo
O exemplo a seguir usa a instrução End para encerrar a execução do código se o
usuário a solicitar.
VB
Sub Form_Load()
MsgBox("Terminating program")
End
End If
End Sub
Confira também
Instrução Stop
Instrução End <keyword>
Instrução End <palavra-chave> (Visual
Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
End AddHandler
End Class
End Enum
End Event
End Function
End Get
End If
End Interface
End Module
End Namespace
End Operator
End Property
End RaiseEvent
End RemoveHandler
End Select
End Set
End Structure
End Sub
End SyncLock
End Try
End While
End With
Partes
Parte Descrição
AddHandler Obrigatório para terminar um acessador AddHandler iniciado por uma instrução
AddHandler correspondente em uma Instrução Event personalizada.
Parte Descrição
Class Obrigatório para terminar uma definição de classe iniciada por uma Instrução
Class correspondente.
Enum Obrigatório para terminar uma definição de enumeração iniciada por uma
Instrução Enum correspondente.
Event Obrigatório para terminar uma definição de evento Custom iniciada por uma
Instrução Event correspondente.
Function Obrigatório para terminar uma Function definição de procedimento iniciada por
uma Instrução Function correspondente. Se a execução encontrar uma instrução
End Function , o controle retornará ao código de chamada.
Get Obrigatório para terminar uma definição de procedimento Property iniciada por
uma Instrução Get correspondente. Se a execução encontrar uma instrução End
Get , o controle retornará à instrução que solicita o valor da propriedade.
If Obrigatório para terminar uma definição de bloco If ... Then ... Else iniciada por
uma instrução If correspondente. Consulte Instrução If...Then...Else.
Interface Obrigatório para terminar uma definição de interface iniciada por uma Instrução
Interface correspondente.
Module Obrigatório para terminar uma definição de módulo iniciada por uma Instrução
Module correspondente.
Namespace Obrigatório para terminar uma definição de namespace iniciada por uma
Instrução Namespace correspondente.
Operator Obrigatório para terminar uma definição de operador iniciada por uma instrução
Operator correspondente.
Property Obrigatório para terminar uma definição de propriedade iniciada por uma
Instrução Property correspondente.
RaiseEvent Obrigatório para terminar um acessador RaiseEvent iniciado por uma instrução
RaiseEvent correspondente em uma Instrução Event personalizada.
Select Obrigatório para terminar uma definição de bloco Select ... Case iniciada por
uma instrução Select correspondente. Consulte Instrução Select...Case.
Set Obrigatório para terminar uma definição de procedimento Property iniciada por
uma Instrução Set correspondente. Se a execução encontrar uma instrução End
Set , o controle retornará à instrução que solicita o valor da propriedade.
Parte Descrição
Structure Obrigatório para terminar uma definição de estrutura iniciada por uma Instrução
Structure correspondente.
Sub Obrigatório para terminar uma definição de procedimento Sub iniciada por uma
Instrução Sub correspondente. Se a execução encontrar uma instrução End Sub ,
o controle retornará ao código de chamada.
SyncLock Obrigatório para terminar uma definição de bloco SyncLock iniciada por uma
instrução SyncLock correspondente. Consulte Instrução SyncLock.
Try Obrigatório para terminar uma definição de bloco Try ... Catch ... Finally iniciada
por uma instrução Try correspondente. Consulte Instrução Try...Catch...Finally.
While Obrigatório para terminar uma definição de loop While iniciada por uma
instrução While correspondente. Consulte Instrução While...End While.
With Obrigatório para terminar uma definição de bloco With iniciada por uma
instrução With correspondente. Consulte Instrução With...End With.
Diretivas
Quando precedida por um sinal numérico ( # ), a palavra-chave End termina um bloco de
pré-processamento introduzido pela diretiva correspondente.
VB
#End ExternalSource
#End If
#End Region
Parte Descrição
ExternalSource Obrigatório para terminar um bloco de origem externo iniciado por uma
Diretiva #ExternalSource correspondente.
Region Obrigatório para terminar um bloco de região de origem iniciado por uma
Diretiva #Region correspondente.
Comentários
A Instrução End, sem uma palavra-chave adicional, termina a execução imediatamente.
Confira também
Instrução End
Instrução Enum (Visual Basic)
Artigo • 07/04/2023 • 8 minutos para o fim da leitura
Sintaxe
VB
memberlist
End Enum
Partes
attributelist
Opcional. Lista de atributos que se aplicam a essa enumeração. Você deve colocar
a lista de atributos entre colchetes angulares (" < " e " > ").
accessmodifier
Opcional. Especifica qual código pode acessar essa enumeração. Um dos seguintes
pode ser feito:
Público
Protegido
Friend
Privado
Amigo Protegido
Particular Protegido
Shadows
Opcional. Especifica que essa enumeração declara novamente e oculta um
elemento de programação nomeado de maneira idêntica, ou conjunto de
elementos sobrecarregados, em uma classe base. Você pode especificar Sombras
apenas na enumeração em si, não em nenhum dos membros.
enumerationname
datatype
memberlist
Cada member tem a seguinte sintaxe e partes: [<attribute list>] member name [ =
initializer ]
Parte Descrição
End Enum
Comentários
Se você tiver um conjunto de valores inalterados logicamente relacionados uns aos
outros, poderá defini-los juntos em uma enumeração. Isso fornece nomes significativos
para a enumeração e os membros, que são mais fáceis de lembrar do que os valores.
Em seguida, você pode usar os membros de enumeração em muitos locais em seu
código.
Torna o código mais fácil de ler, o que significa que é menos provável que os erros
sejam introduzidos.
Você pode aplicar atributos a uma enumeração como um todo, mas não aos membros
individualmente. Um atributo contribui com informações para os metadados do
assembly.
Tipo de Dados
A instrução Enum pode declarar o tipo de dados de uma enumeração. Cada membro usa
o tipo de dados da enumeração. Você pode especificar Byte , Integer , Long , SByte ,
Short , UInteger , ULong ou UShort .
Se você não especificar datatype para a enumeração, cada membro usará o tipo de
dados de initializer . Se você especificar datatype e initializer , o tipo de dados de
initializer deverá ser conversível para datatype . Se nem datatype nem initializer
Inicialização de membros
A instrução Enum pode inicializar o conteúdo dos membros selecionados em
memberlist . Você usa initializer para fornecer uma expressão a ser atribuída ao
membro.
Se você não especificar initializer para um membro, o Visual Basic o inicializará como
zero (se for o primeiro member em memberlist ) ou como um valor maior por um do que
o member imediatamente anterior.
Você não pode usar variáveis ou funções em initializer . No entanto, você pode usar
palavras-chave de conversão, como CByte e CShort . Você também pode usar AscW se
chamá-lo com uma constante String ou um argumento Char , já que isso pode ser
avaliado em tempo de compilação.
Modificadores
As enumerações de membro de classe, estrutura, módulo e interface assumem o padrão
de acesso público. Você pode ajustar os níveis de acesso com os modificadores de
acesso. Enumerações de membro de namespace assumem o padrão de acesso de
amigos. Você pode ajustar os níveis de acesso para público, mas não para particular
nem protegido. Para obter mais informações, confira Níveis de acesso no Visual Basic.
Todos os membros de enumeração têm acesso público, e você não pode usar
modificadores de acesso neles. No entanto, se a enumeração em si tiver um nível de
acesso mais restrito, o nível de acesso especificado da enumeração terá precedência.
Por padrão, todas as enumerações são tipos e os campos são constantes. Portanto, as
palavras-chave Shared , Static e ReadOnly não podem ser usadas ao declarar uma
enumeração ou os membros.
Exemplo 1
O exemplo a seguir mostra como usar a instrução Enum . Observe que o membro é
conhecido como EggSizeEnum.Medium , e não como Medium .
VB
Enum EggSizeEnum
Jumbo
ExtraLarge
Large
Medium
Small
End Enum
size = EggSizeEnum.Medium
' Continue processing...
End Sub
End Class
Exemplo 2
O método no exemplo a seguir está fora da Egg classe. Portanto, EggSizeEnum é
totalmente qualificado como Egg.EggSizeEnum .
VB
Case Egg.EggSizeEnum.Jumbo
' Process.
Case Egg.EggSizeEnum.ExtraLarge
' Process.
Case Egg.EggSizeEnum.Large
' Process.
Case Else
End Select
End Sub
Exemplo 3
O exemplo a seguir usa a instrução Enum para definir um conjunto relacionado de
valores de constante nomeados. Nesse caso, os valores são cores que você pode optar
por criar formulários de entrada de dados para um banco de dados.
VB
MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&
Firebrick = &H2222B2&
End Enum
Exemplo 4
O exemplo a seguir mostra valores que incluem números positivos e negativos.
VB
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
Exemplo 5
No exemplo a seguir, uma cláusula As é usada para especificar o datatype de uma
enumeração.
VB
Zero
One
Two
End Enum
Exemplo 6
O exemplo a seguir mostra como usar uma enumeração bit a bit. Vários valores podem
ser atribuídos a uma instância de uma enumeração bit a bit. A declaração Enum inclui o
atributo FlagsAttribute, que indica que a enumeração pode ser tratada como um
conjunto de sinalizadores.
VB
None = 0
Create = 1
Read = 2
Update = 4
Delete = 8
End Enum
Console.WriteLine(perm.ToString)
Console.WriteLine(CInt(perm))
' Output: 6
Console.WriteLine(perm.HasFlag(FilePermissions.Update))
End Sub
Exemplo 7
O exemplo a seguir itera por meio de uma enumeração. Ele usa o método GetNames
para recuperar uma matriz de nomes de membro da enumeração e GetValues recuperar
uma matriz de valores de membro.
VB
Enum EggSizeEnum
Jumbo
ExtraLarge
Large
Medium
Small
End Enum
Next
Console.WriteLine()
Next
Console.WriteLine()
' Output: 0 1 2 3 4
End Sub
Confira também
Enum
AscW
Instrução Const
Instrução Dim
Conversões implícitas e explícitas
Funções de conversão do tipo
Constantes e Enumerações
Instrução Erase (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Usada para liberar variáveis de matriz e desalocar a memória usada para seus
elementos.
Sintaxe
VB
Erase arraylist
Partes
arraylist
Comentários
A instrução Erase só pode aparecer no nível de procedimento. Isso significa que você
pode liberar matrizes em um procedimento, mas não no nível de classe ou módulo.
Exemplo
O exemplo a seguir usa a instrução Erase para limpar duas matrizes e liberar memória
(mil e 100 elementos de armazenamento, respectivamente). Em seguida, a instrução
ReDim atribui uma nova instância de matriz à matriz tridimensional.
VB
ReDim threeDimArray(4, 4, 9)
Confira também
Nothing
Instrução ReDim
Instrução Error
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Error errornumber
Partes
errornumber
Comentários
A instrução Error possui suporte para compatibilidade com versões anteriores. No
novo código, principalmente ao criar objetos, use o método Raise do objeto Err para
gerar erros em tempo de execução.
Propriedade Valor
Number Valor especificado como argumento para instrução Error . Pode ser qualquer
número de erro inválido.
LastDLLError Zero.
7 Observação
Alguns aplicativos host do Visual Basic não podem criar objetos. Consulte a
documentação do aplicativo host para determinar se ele pode criar classes e
objetos.
Exemplo
Este exemplo usa a instrução Error para gerar o erro número 11.
VB
Requisitos
Namespace:Microsoft.VisualBasic
Confira também
Clear
Err
Raise
Instrução On Error
Instrução Resume
Mensagens de Erro
Instrução Event
Artigo • 12/12/2022 • 7 minutos para o fim da leitura
Sintaxe
VB
[ <attrlist> ] [ accessmodifier ] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Implements implementslist ]
[ statements ]
End AddHandler
[ statements ]
End RemoveHandler
[ <attrlist> ] RaiseEvent(delegatesignature)
[ statements ]
End RaiseEvent
End Event
Partes
Parte Descrição
attrlist Opcional. Lista de atributos que se aplicam a esse evento. Vários atributos
são separados por vírgulas. Você deve colocar a Lista de atributos entre
colchetes angulares (" < " e " > ").
Parte Descrição
accessmodifier Opcional. Especifica qual código pode acessar o evento. Um dos seguintes
pode ser feito:
Shared Opcional. Especifica que esse evento não está associado a uma instância
específica de uma classe ou estrutura.
Implements Opcional. Indica que esse evento implementa um evento de uma interface.
Parte Descrição
interface . definedname
Comentários
Depois que o evento for declarado, use a instrução RaiseEvent para acionar o evento.
Um evento típico pode ser declarado e gerado conforme mostrado nos fragmentos a
seguir:
VB
Sub CauseEvent()
RaiseEvent LogonCompleted("AustinSteele")
End Sub
End Class
7 Observação
Para manipular um evento, você deve associá-lo com uma sub-rotina manipuladora de
eventos usando a instrução Handles ou AddHandler . As assinaturas da sub-rotina e do
evento devem corresponder. Para lidar com um evento compartilhado, você deve usar a
instrução AddHandler .
Você só pode usar Event no nível do módulo. Isso significa que o contexto de declaração
para um evento deve ser uma classe, estrutura, módulo ou interface e não pode ser um
arquivo de origem, namespace, procedimento ou bloco. Para obter mais informações,
consulte Contextos de declaração e níveis de acesso padrão.
Na maioria das circunstâncias, você pode usar a primeira sintaxe na seção Sintaxe deste
tópico para declarar eventos. No entanto, alguns cenários exigem que você tenha mais
controle sobre o comportamento detalhado do evento. A última sintaxe na seção
Sintaxe deste tópico, que usa a palavra-chave Custom , fornece esse controle, que lhe
permite definir eventos personalizados. Em um evento personalizado, você especifica
exatamente o que ocorre quando o código adiciona ou remove um manipulador de
eventos de ou para o evento ou quando o código gera o evento. Para obter exemplos,
consulte Como declarar eventos personalizados para conservar memória e Como
declarar eventos personalizados para evitar o bloqueio.
Exemplo
O exemplo a seguir usa eventos para contagem regressiva de segundos de 10 para 0. O
código ilustra vários métodos, propriedades e instruções relacionados a evento. Isso
inclui a instrução RaiseEvent .
O exemplo também usa um formulário ( Form1 ) com um botão ( Button1 ) e uma caixa de
texto ( TextBox1 ). Quando você clica no botão, a primeira caixa de texto exibe uma
contagem regressiva de 10 para 0 segundos. Quando o tempo integral (10 segundos)
tiver decorrido, a primeira caixa de texto exibirá "Concluído".
Para usar este exemplo, abra um novo projeto do Windows Forms. Em seguida, adicione
um botão chamado Button1 e uma caixa de texto chamada TextBox1 para o formulário
principal, chamado Form1 . Em seguida, clique com o botão direito do mouse no
formulário e clique em Exibir Código para abrir o editor de código.
VB
VB
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
End Sub
mText.StartCountdown(10.0, 0.1)
End Sub
TextBox1.Text = "Done"
End Sub
) Handles mText.UpdateTime
My.Application.DoEvents()
End Sub
Class TimerState
SoFar += Increment
End If
Loop
RaiseEvent Finished()
End Sub
End Class
7 Observação
Sintaxe
VB
Instruções
Exit Do
Exit For
Sai imediatamente do loop For no qual ele aparece. A execução continua com a
instrução após Next . Exit For pode ser usado somente dentro de um loop For ... Next
ou For Each ... Next . Quando usado em loops For aninhados, Exit For sai do loop mais
interno e transfere o controle para o próximo nível superior de aninhamento.
Exit Function
Para especificar um valor retornado, você pode atribuir o valor ao nome da função em
uma linha antes da instrução Exit Function . Para atribuir o valor retornado e sair da
função em uma instrução, você pode usar a Instrução Return.
Exit Property
Exit Select
Sai imediatamente do bloco Select Case em que aparece. A execução continua com a
instrução após End Select . Exit Select pode ser usado somente dentro de uma
instrução Select Case .
Exit Sub
Sai imediatamente do procedimento Sub no qual ele aparece. A execução continua com
a instrução após a instrução que chamou o procedimento Sub . Exit Sub pode ser
usado somente dentro de um procedimento Sub .
Exit Try
Sai imediatamente do bloco Try ou Catch em que aparece. A execução continua com o
bloco Finally se houver um, ou com a instrução após a instrução End Try caso
contrário. Exit Try pode ser usado apenas dentro de um bloco Try ou Catch , e não
dentro de um bloco Finally .
Exit While
Sai imediatamente do loop While no qual ele aparece. A execução continua com a
instrução após End While . Exit While pode ser usado somente dentro de um loop
While . Quando usado em loops While aninhados, Exit While transfere o controle para
o loop que está um nível aninhado acima do loop em que Exit While ocorre.
Comentários
Não confunda instruções Exit com End . Exit não define o fim de uma instrução.
Exemplo 1
No exemplo a seguir, a condição de loop interrompe o loop quando a variável index é
maior que 100. No entanto, a instrução If no loop faz com que a instrução Exit Do
interrompa o loop quando a variável de índice for maior que 10.
VB
Exit Do
End If
index += 1
Loop
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Exemplo 2
O exemplo a seguir atribui o valor de retorno ao nome da função myFunction e, em
seguida, usa Exit Function para retornar da função:
VB
MyFunction = 3.87 * j
Exit Function
End Function
Exemplo 3
O seguinte exemplo usa a Instrução Return para atribuir o valor retornado e sair da
função:
VB
Return 3.87 * j
End Function
Confira também
Instrução Continue
Instrução Do...Loop
Instrução End
Instrução For Each...Next
Instrução For...Next
Instrução Function
Instrução return
Instrução Stop
Instrução Sub
Instrução Try...Catch...Finally
Instruções F-P
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
For Each...Next
For...Next
Função
Get
GoTo
If...Then...Else
Implementações
Inherits
Interface
Mid
Módulo
Namespace
Se Houver Erro
Operador
Opção <palavra-chave>
Opção Comparar
Opção Explícita
Opção Inferir
Opção Estrita
Propriedade
Confira também
Instruções A-E
Instruções Q-Z
Referência da linguagem Visual Basic
Instrução For Each...Next (Visual Basic)
Artigo • 07/04/2023 • 13 minutos para o fim da leitura
Sintaxe
VB
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
Partes
Termo Definição
element Obrigatório na instrução For Each . Opcional na instrução Next . Variável. Usada para
iterar por meio dos elementos da coleção.
datatype Opcional se Option Infer estiver ativado (o padrão) ou element já estiver declarado;
obrigatório se Option Infer estiver desativado e element ainda não estiver
declarado. O tipo de dados de element .
group Obrigatórios. Uma variável com um tipo que é um tipo de coleção ou Objeto.
Refere-se à coleção sobre a qual as statements devem ser repetidas.
statements Opcional. Uma ou mais instruções entre For Each e Next que são executadas em
cada item em group .
Exit For Opcional. Transfere o controle para fora do loop For Each .
Exemplo simples
Use um loop For Each ... Next quando quiser repetir um conjunto de instruções para
cada elemento de uma coleção ou matriz.
Dica
A Instrução For...Next funciona bem quando você pode associar cada iteração de
um loop a uma variável de controle e determinar os valores iniciais e finais dessa
variável. No entanto, quando você está lidando com uma coleção, o conceito de
valores iniciais e finais não é significativo e você não sabe necessariamente quantos
elementos a coleção tem. Nesse tipo de caso, um loop For Each ... Next muitas
vezes é uma escolha melhor.
No exemplo a seguir, a instrução For Each … Next itera por meio de todos os elementos
de uma coleção List.
VB
Next
Debug.WriteLine("")
Nested Loops
Você pode aninhar loops For Each colocando um loop dentro de outro.
VB
Next
Next
Debug.WriteLine("")
'Output: 1a 1b 1c 4a 4b 4c 7a 7b 7c
Quando você aninha loops, cada loop deve ter uma variável element exclusiva.
Você também pode aninhar diferentes tipos de estruturas de controle entre si. Para
obter mais informações, confira Estruturas de controle aninhadas.
O exemplo a seguir mostra como usar as instruções Continue For e Exit For .
VB
Continue For
End If
If number = 10 Then
Exit For
End If
Next
Debug.WriteLine("")
' Output: 1 2 3 4 9 10
Você pode colocar qualquer número de instruções Exit For em um loop For Each .
Quando usado em loops For Each aninhados, Exit For faz com que a execução saia do
loop mais interno e transfere o controle para o próximo nível mais alto de aninhamento.
Exit For geralmente é usado após uma avaliação de alguma condição, por exemplo,
em uma estrutura If ... Then ... Else . Talvez você queira usar Exit For para as seguintes
condições:
Uma exceção é capturada em um Try ... Catch ... Finally . Você pode usar Exit For
no final do bloco Finally .
Há um loop infinito, que é um loop que pode se executado várias vezes ou até
infinitamente. Se você detectar essa condição, poderá usar Exit For para pular o
loop. Para obter mais informações, confira Instrução Do...Loop.
Iterators
Use um iterador para realizar uma iteração personalizada em uma coleção. Um iterador
pode ser uma função ou um acessador Get . Ele usa uma instrução Yield para retornar
um elemento da coleção por vez.
Chame um iterador usando uma instrução For Each...Next . Cada iteração do loop For
Each chama o iterador. Quando uma instrução Yield é alcançada no iterador, a
O exemplo a seguir usa uma função iteradora. A função iteradora tem uma instrução
Yield que está em um loop For…Next. No método ListEvenNumbers , cada iteração do
corpo da instrução For Each cria uma chamada à função iteradora, que avança para a
próxima instrução Yield .
VB
Next
Debug.WriteLine("")
' Output: 6 8 10 12 14 16 18
End Sub
As System.Collections.Generic.IEnumerable(Of Integer)
Yield number
End If
Next
End Function
Implementação Técnica
Quando uma instrução For Each … Next é executada, o Visual Basic avalia a coleção
apenas uma vez, antes do loop ser iniciado. Se o bloco de instruções alterar element ou
group , essas alterações não afetarão a iteração do loop.
Como opção, você pode especificar element na instrução Next . Isso melhora a
legibilidade do programa, especialmente se você tiver loops For Each aninhados. Você
precisa especificar a mesma variável que a exibida na instrução For Each
correspondente.
Talvez você queira evitar alterar o valor de element dentro de um loop. Fazer isso pode
dificultar a leitura e a depuração do código. Alterar o valor de group não afeta a coleção
nem os elementos dela, que foram determinados quando o loop foi inserido pela
primeira vez.
Quando você está aninhando loops, se uma instrução Next de um nível de aninhamento
externo for encontrada antes do Next de nível interno, o compilador sinalizará um erro.
No entanto, o compilador só poderá detectar esse erro sobreposto se você especificar
element em cada instrução Next .
Se o código depender de percorrer uma coleção em uma determinada ordem, um loop
For Each ... Next não será a melhor opção, a menos que você saiba as características do
objeto enumerador que a coleção expõe. A ordem de passagem não é determinada
pelo Visual Basic, mas pelo método MoveNext do objeto enumerador. Portanto, talvez
não seja possível prever qual elemento da coleção é o primeiro a ser retornado em
element ou qual é o próximo a ser retornado após determinado elemento. Você pode
obter resultados mais confiáveis usando uma estrutura de loop diferente, como
For ... Next ou Do ... Loop .
O tipo de dados de group deve ser um tipo de referência que se refere a uma coleção
ou a uma matriz enumerável. Mais comumente isso significa que group se refere a um
objeto que implementa a interface IEnumerable do namespace System.Collections ou a
interface IEnumerable<T> do namespace System.Collections.Generic .
System.Collections.IEnumerable define o método GetEnumerator, que retorna um
Conversões de redução
Quando Option Strict é definido como On , as conversões de restrição normalmente
causam erros do compilador. No entanto, em uma instrução For Each , as conversões
dos elementos em group em element são avaliadas e executadas em tempo de
execução, e os erros do compilador causados pelas conversões de restrição são
suprimidos.
Option Strict On
Imports System
Module Program
'Dim n As Integer = m
' The For Each loop requires the same conversion but
Next
Console.WriteLine()
'Next
End Sub
End Module
Chamadas IEnumerator
Quando a execução de um loop For Each ... Next é iniciada, o Visual Basic verifica se
group se refere a um objeto de coleção válido. Se não for, ele vai gerar uma exceção.
Caso contrário, ele chama o método MoveNext e a propriedade Current do objeto
enumerador para retornar o primeiro elemento. Se MoveNext indicar que não há
nenhum próximo elemento, ou seja, se a coleção estiver vazia, o loop For Each será
interrompido e o controle passará para a instrução após a instrução Next . Caso
contrário, o Visual Basic define element como o primeiro elemento e executa o bloco de
instruções.
Sempre que o Visual Basic encontra a instrução Next , ela retorna à instrução For Each .
Novamente, ele chama MoveNext e Current para retornar o próximo elemento e,
novamente, executa o bloco ou interrompe o loop dependendo do resultado. Esse
processo continua até MoveNext indicar que não há nenhum próximo elemento ou uma
instrução Exit For encontrada.
Modificando a coleção. O objeto enumerador retornado por GetEnumerator
normalmente não permite alterar a coleção adicionando, excluindo, substituindo ou
reordenando elementos. Se você alterar a coleção depois de iniciar um loop For
Each ... Next , o objeto enumerador se tornará inválido e a próxima tentativa de acessar
um elemento causará uma exceção InvalidOperationException.
No entanto, esse bloqueio de modificação não é determinado pelo Visual Basic, mas sim
pela implementação da interface IEnumerable. É possível implementar IEnumerable de
uma forma que permita a modificação durante a iteração. Se você estiver considerando
fazer essa modificação dinâmica, certifique-se de entender as características da
implementação IEnumerable na coleção que você está usando.
VB
thisControl.BackColor = System.Drawing.Color.LightBlue
Next thisControl
End Sub
Exemplo 1
O exemplo a seguir lista todas as pastas no C:\ diretório usando a classe DirectoryInfo.
VB
Dim dInfo As New System.IO.DirectoryInfo("c:\")
Debug.WriteLine(dir.Name)
Next
Exemplo 2
O exemplo a seguir ilustra um procedimento para a classificação de uma coleção. O
exemplo classifica instâncias de uma classe Car que estão armazenados em uma
List<T>. A classe Car implementa a interface IComparable<T>, que requer que o
método CompareTo seja implementado.
Cada chamada ao método CompareTo faz uma comparação única que é usada para
classificação. Os códigos escritos pelo usuário no método CompareTo retornam um valor
para cada comparação do objeto atual com outro objeto. O valor retornado será menor
que zero se o objeto atual for menor que o outro objeto, maior que zero se o objeto
atual for maior que o outro objeto e zero, se eles forem iguais. Isso permite que você
defina no código os critérios para maior que, menor que e igual.
VB
cars.Sort()
Debug.Write(thisCar.Name)
Debug.WriteLine("")
Next
' Output:
End Sub
If compare = 0 Then
compare = Me.Speed.CompareTo(other.Speed)
compare = -compare
End If
Return compare
End Function
End Class
Confira também
Coleções
Instrução For...Next
Estruturas de Loop
Instrução While...End While
Instrução Do...Loop
Conversões de Widening e Narrowing
Inicializadores de objeto: tipos nomeados e anônimos
Inicializadores de Coleção
matrizes
Instrução For...Next (Visual Basic)
Artigo • 07/04/2023 • 9 minutos para o fim da leitura
Sintaxe
VB
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
Partes
Parte Descrição
counter Obrigatório na instrução For . Variável numérica. A variável de controle para o loop.
Para obter mais informações, consulte Contra-argumento posteriormente neste
tópico.
datatype Opcional. Tipo de dados de counter . Para obter mais informações, consulte Contra-
argumento posteriormente neste tópico.
step Opcional. Expressão numérica. O valor pelo qual counter é incrementado cada vez
por meio do loop.
statements Opcional. Uma ou mais instruções entre For e Next que executam o número
especificado de vezes.
Exemplos simples
A estrutura For ... Next é usada para repetir um conjunto de instruções por um número
definido de vezes.
VB
Next
Debug.WriteLine("")
' Output: 1 2 3 4 5
VB
Next
Debug.WriteLine("")
Dica
Uma Instrução While...End While ou Do...Loop funciona bem quando você não
sabe com antecedência quantas vezes as instruções devem ser executadas no loop.
No entanto, quando você espera executar o loop um número específico de vezes,
um loop For ... Next é uma opção melhor. Você determina o número de iterações
ao inserir o loop pela primeira vez.
Loops de aninhamento
Você pode aninhar loops For colocando um loop dentro de outro. O exemplo a seguir
demonstra estruturas aninhadas For ... Next que têm valores de etapa diferentes. O loop
externo cria uma cadeia de caracteres para cada iteração do loop. O loop interno
decrementa uma variável de contador de loop para cada iteração do loop.
VB
For indexA = 1 To 3
sb.Append(indexB.ToString)
sb.Append(" ")
Next indexB
Debug.WriteLine(sb.ToString)
Next indexA
' Output:
' 20 17 14 11 8 5 2
' 20 17 14 11 8 5 2
' 20 17 14 11 8 5 2
Ao aninhar loops, cada loop deve ter uma variável counter exclusiva.
Você também pode aninhar diferentes tipos de estruturas de controle entre si. Para
obter mais informações, confira Estruturas de controle aninhadas.
O exemplo a seguir ilustra o uso das instruções Continue For e Exit For .
VB
Continue For
End If
If index = 10 Then
Exit For
End If
Next
Debug.WriteLine("")
' Output: 1 2 3 4 9 10
Você pode colocar qualquer número de instruções Exit For em um For … Next loop.
Quando usado no For … aninhado Next loops, Exit For sai do loop mais interno e
transfere o controle para o próximo nível mais alto de aninhamento.
Exit For geralmente é usado após avaliação de alguma condição (por exemplo, em
uma estrutura If ... Then ... Else ). Talvez você queira usar Exit For para as seguintes
condições:
Uma instrução Try ... Catch ... Finally captura uma exceção. Você pode usar Exit
For no final do bloco Finally .
Você tem um loop infinito, que é um loop que pode se executado várias vezes ou
até infinitamente. Se você detectar essa condição, poderá usar Exit For para pular
o loop. Para obter mais informações, confira Instrução Do...Loop.
Implementação Técnica
Quando um loop For ... Next é iniciado, o Visual Basic avalia start , end e step . O Visual
Basic avalia esses valores apenas neste momento e, em seguida, atribui start a
counter . Antes que o bloco de instruções seja executado, o Visual Basic compara
counter a end . Se counter já for maior que o valor end (ou menor se step for
negativo), o loop For terminará e o controle passará para a instrução que segue a
instrução Next . Caso contrário, o bloco de instruções será executado.
Sempre que o Visual Basic encontra a instrução Next , counter é incrementado em step
e retorna à instrução For . Novamente, ele compara counter a end e executa o bloco ou
sai do loop, dependendo do resultado. Esse processo continua até que counter passe
end ou uma instrução Exit For seja encontrada.
O loop não para até que counter tenha passado end . Se counter for igual a end , o loop
continuará. A comparação determina se a execução do bloco deve ser counter <= end
se step for positivo e counter >= end se step for negativo.
Se o valor de counter for alterado enquanto estiver dentro de um loop, poderá ser mais
difícil gravar e depurar o código. A alteração do valor de start , end ou step não afeta
os valores de iteração que foram determinados quando o loop foi inserido pela primeira
vez.
Argumento de etapa
O valor de step pode ser positivo ou negativo. Esse parâmetro determina o
processamento de loop de acordo com a tabela a seguir:
Contra-argumento
A tabela a seguir indica se counter define uma nova variável local com escopo para
todo o loop For…Next . Essa determinação depende se datatype está presente e se
counter já foi definido.
datatype counter Resultado (se counter define uma nova variável local com escopo
está está para todo o loop For...Next )
presente? definido?
No Sim Não, porque counter já está definido. Se o escopo de counter não for
local para o procedimento, ocorrerá um aviso de tempo de compilação.
No Não Sim. O tipo de dados é inferido das expressões e start , end e step .
Para obter informações sobre inferência de tipos, consulte Instrução
Option Infer
e Inferência de Tipo de Variável Local.
Sim Sim Sim, mas somente se a variável counter existente for definida fora do
procedimento. Essa variável permanece separada. Se o escopo da
variável counter existente for local para o procedimento, ocorrerá um
erro em tempo de compilação.
O tipo de dados de counter determina o tipo de iteração, que deve ser um dos
seguintes:
A Byte , SByte , UShort , Short , UInteger , Integer , ULong , Long , Decimal , Single
ou Double .
Um Object .
Um tipo T que tem os operadores a seguir, onde B é um tipo que pode ser usado
em uma expressão Boolean .
As expressões start , end e step podem ser avaliadas para qualquer tipo de dados
expandido para o tipo de counter . Se você usar um tipo definido pelo usuário para
counter , talvez seja necessário definir o operador de conversão CType para converter os
Exemplo 1
O exemplo a seguir remove todos os elementos de uma lista genérica. Em vez de uma
Instrução For Each...Next, o exemplo mostra uma instrução For ... Next que itera em
ordem decrescente. O exemplo usa essa técnica porque o método removeAt faz com
que os elementos após o elemento removido tenham um valor de índice menor.
VB
Dim lst As New List(Of Integer) From {10, 20, 30, 40}
lst.RemoveAt(index)
Next
Debug.WriteLine(lst.Count.ToString)
' Output: 0
Exemplo 2
O exemplo a seguir itera por uma enumeração declarada usando uma Instrução Enum.
VB
Buffalo
Gazelle
Mongoose
Rhinoceros
Whale
End Enum
Next
Debug.WriteLine("")
End Sub
Exemplo 3
No exemplo a seguir, os parâmetros de instrução usam uma classe com sobrecargas de
operador para operadores + , - , >= e <= .
VB
Me.Number = number
End Sub
End Operator
End Operator
End Operator
End Operator
End Class
Next
Debug.WriteLine("")
' Output: 10 14 18 22
End Sub
Confira também
List<T>
Estruturas de Loop
Instrução While...End While
Instrução Do...Loop
Estruturas de Controle Aninhadas
Instrução Exit
Coleções
Instrução Function (Visual Basic)
Artigo • 07/04/2023 • 8 minutos para o fim da leitura
Sintaxe
VB
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Partes
attributelist
accessmodifier
Público
Protegido
Friend
Privado
Amigo Protegido
Particular Protegido
proceduremodifiers
Opcional. Um dos seguintes pode ser feito:
Sobrecargas
Substituições
Substituível
NotOverridable
MustOverride
MustOverride Overrides
NotOverridable Overrides
Shared
Shadows
Async
Iterator
name
typeparamlist
parameterlist
returntype
Obrigatório se Option Strict for On . Tipo de dados do valor retornado por este
procedimento.
Implements
implementslist
interface.definedname
Parte Descrição
Handles
Opcional. Indica que esse procedimento pode lidar com um ou mais eventos
específicos. Consulte Identificadores.
eventlist
eventvariable.event
Parte Descrição
Parte Descrição
statements
End Function
Comentários
Todo código executável deve estar dentro de um procedimento. Cada procedimento,
por sua vez, é declarado dentro de uma classe, uma estrutura ou um módulo que é
chamado de classe, estrutura ou módulo que contém.
Os procedimentos Function têm como padrão o acesso público. Você pode ajustar os
níveis de acesso com os modificadores de acesso.
7 Observação
Você pode usar expressões lambda para definir expressões de função embutidas.
Para obter mais informações, consulte Expressão de Função e Expressões Lambda.
Para retornar um valor de uma função, você poderá atribuir o valor ao nome da função
ou incluí-lo em uma instrução Return .
VB
Return 3.87 * j
End Function
VB
MyFunction = 3.87 * j
Exit Function
End Function
Se você usar Exit Function sem atribuir um valor a name , o procedimento retornará o
valor padrão para o tipo de dados especificado em returntype . Se returntype não for
especificado, o procedimento retornará Nothing , que é o valor padrão para Object .
Você chama um procedimento Function da mesma forma que chama qualquer função
de biblioteca, como Sqrt , Cos ou ChrW .
Você também pode chamar uma função usando a palavra-chave Call . Nesse caso, o
valor retornado é ignorado. O uso da palavra-chave Call não é recomendado na
maioria dos casos. Para obter mais informações, consulte Instrução Call.
Funções assíncronas
Usando o recurso Async, você pode invocar funções assíncronas sem usar retornos de
chamada explícitos ou dividir manualmente seu código entre várias funções ou
expressões lambda.
Se marcar uma função com o modificador Async, você poderá usar o operador Await na
função. Quando o controle atinge uma expressão Await na função Async , ele retorna
para o chamador e o progresso na função é suspenso até a tarefa aguardada ser
concluída. Quando a tarefa for concluída, a execução poderá ser retomada na função.
7 Observação
Uma função Async pode ter um tipo de retorno Task<TResult> ou Task. Um exemplo de
uma função Async que tem um tipo de retorno Task<TResult> é fornecido abaixo.
Uma função Async não pode declarar parâmetros ByRef.
Uma Instrução Sub também pode ser marcada com o modificador Async . Isso é usado
principalmente para manipuladores de eventos, em que um valor não pode ser
retornado. Um procedimento Async Sub não pode ser aguardado e o chamador de um
procedimento Async Sub não pode capturar exceções geradas pelo procedimento Sub .
Para obter mais informações sobre as funções Async , consulte Programação assíncrona
com Async e Await, Fluxo de controle em programas assíncronos e Tipos de retorno
assíncronos.
Funções Iterator
Uma função iterator realiza uma iteração personalizada em uma coleção, como uma lista
ou uma matriz. Um método iterator usa a instrução Yield para retornar um elemento de
cada vez. Quando uma instrução Yield for atingida, o local atual no código será
lembrado. A execução será reiniciada desse local na próxima vez que a função iteradora
for chamada.
Você chama um iterador de um código de cliente usando uma instrução For Each…Next.
Exemplo 1
O exemplo a seguir usa a instrução Function para declarar o nome, os parâmetros e o
código que formam o corpo de um procedimento Function . O modificador ParamArray
permite que a função aceite um número variável de argumentos.
VB
CalcSum = 0
CalcSum += args(i)
Next i
End Function
Exemplo 2
O exemplo a seguir invoca a função declarada no exemplo anterior.
VB
Module Module1
Sub Main()
returnedValue = CalcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
CalcSum = 0
CalcSum += args(i)
Next i
End Function
End Module
Exemplo 3
No exemplo a seguir, DelayAsync é um Function Task<TResult> que tem um tipo de
retorno Async . DelayAsync tem uma instrução Return que retorna um número inteiro.
Portanto, a declaração da função Task(Of Integer) deve ter um tipo de retorno
DelayAsync . Como o tipo de retorno é Task(Of Integer) , a avaliação da expressão
VB
' Imports System.Diagnostics
Await DoSomethingAsync()
End Sub
End Function
Await Task.Delay(100)
Return 5
End Function
' Output:
' Result: 5
Confira também
Instrução Sub
Procedimentos de função
Lista de parâmetros
Instrução Dim
Instrução Call
Of
Matrizes de Parâmetros
Como: Usar uma classe genérica
Solucionando problemas de procedimentos
Expressões Lambda
Expressão de Função
Instrução Get
Artigo • 12/12/2022 • 3 minutos para o fim da leitura
Sintaxe
VB
[ statements ]
End Get
Partes
Termo Definição
accessmodifier Opcional em no máximo uma das instruções Get e Set nesta propriedade. Um
dos seguintes pode ser feito:
- Protegido
- Amigo
- Particular
- Protected Friend
statements Opcional. Uma ou mais instruções que são executadas quando o procedimento
de propriedade Get é chamado.
Comentários
Cada propriedade deve ter um procedimento de propriedade Get , a menos que a
propriedade seja marcada WriteOnly . O procedimento Get é usado para retornar o
valor atual da propriedade.
O Visual Basic chama automaticamente o procedimento Get de uma propriedade
quando uma expressão solicita o valor da propriedade.
Regras
Níveis de acesso mistos. Se você estiver definindo uma propriedade de
leitura/gravação, opcionalmente poderá especificar um nível de acesso diferente
para o procedimento Get ou o procedimento Set , mas não ambos. Se você fizer
isso, o nível de acesso ao procedimento deverá ser mais restritivo do que o nível
de acesso da propriedade. Por exemplo, se a propriedade for declarada Friend ,
você poderá declarar o procedimento Get Private , mas não Public .
Comportamento
Retorno de um procedimento. Quando o procedimento Get retorna ao código de
chamada, a execução continua dentro da instrução que solicitou o valor da
propriedade.
VB
VB
Get
QuoteForTheDay = quoteValue
Exit Property
End Get
End Property
VB
Get
Return quoteValue
End Get
End Property
Exemplo
O exemplo a seguir usa a instrução Get para retornar o valor de uma propriedade.
VB
Class propClass
Get
currentTime = CStr(Now)
Return currentTime
End Get
End Property
End Class
Confira também
Instrução Set
Instrução Property
Instrução Exit
Objetos e Classes
Instruções passo a passo: definindo classes
Instrução GoTo
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Sintaxe
VB
GoTo line
Parte
line
Comentários
A instrução GoTo só pode ramificar para linhas no procedimento no qual ela aparece. A
linha deve ter um rótulo de linha ao qual GoTo possa se referir. Para obter mais
informações, consulte Como rotular instruções.
7 Observação
Você não pode usar uma instrução GoTo para ramificar de fora de uma construção
For ... Next , For Each ... Next , SyncLock ... End SyncLock , Try ... Catch ... Finally , With ... End
With , ou Using ... End Using para um rótulo interno.
1
Se uma construção Try ... Catch ... Finally estiver aninhada dentro de outra, um bloco
Catch pode ramificar-se no bloco Try em seu próprio nível de aninhamento, mas não
em nenhum outro bloco Try . Uma construção aninhada Try ... Catch ... Finally deve
estar completamente contida em um bloco Try ou Catch da construção dentro da qual
está aninhada.
A ilustração a seguir mostra uma construção Try aninhada dentro de outra. Várias
ramificações entre os blocos das duas construções são indicadas como válidas ou
inválidas.
Exemplo
O exemplo a seguir usa a instrução GoTo para ramificar para rótulos de linha em um
procedimento.
VB
Sub GoToStatementDemo()
Line1:
GoTo LastLine
Line2:
LastLine:
Debug.WriteLine(sampleString)
End Sub
Confira também
Instrução Do...Loop
Instrução For...Next
Instrução For Each...Next
Instrução If...Then...Else
Instrução Select...Case
Instrução Try...Catch...Finally
Instrução While...End While
Instrução With...End With
Instrução If...Then... (Visual Basic)
Artigo • 28/11/2022 • 5 minutos para o fim da leitura
Sintaxe
VB
If condition [ Then ]
[ statements ]
[ elseifstatements ] ]
[ Else
[ elsestatements ] ]
End If
Partes
condition
Obrigatórios. Expressão. Deve avaliar para True ou False , ou para um tipo de dados
implicitamente conversível para Boolean .
Se a expressão for uma variável anulável Boolean que seja avaliada como Nothing, a
condição será tratada como se a expressão fosse False , e os blocos ElseIf serão
avaliados se existirem ou se o bloco Else for executado se existir.
Then
statements
Opcional. Uma ou mais instruções If ... Then a seguir que são executadas se condition
for avaliado como True .
elseifcondition
Obrigatório se ElseIf estiver presente. Expressão. Deve avaliar para True ou False , ou
para um tipo de dados implicitamente conversível para Boolean .
elseifstatements
Opcional. Uma ou mais instruções ElseIf ... Then a seguir que são executadas se
elseifcondition for avaliado como True .
elsestatements
End If
Comentários
Sintaxe multilinha
Quando uma instrução If ... Then ... Else é encontrada, condition é testada. Se
condition for True , as instruções Then a seguir serão executadas. Se condition for
False , cada instrução ElseIf (se houver alguma) será avaliada em ordem. Quando um
As cláusulas ElseIf e Else são opcionais. Você pode ter quantas cláusulas ElseIf
quiser em uma instrução If ... Then ... Else , mas nenhuma cláusula ElseIf pode aparecer
após uma cláusula Else . As instruções If ... Then ... Else podem ser aninhadas entre si.
Na sintaxe multilinha, a instrução If deve ser a única instrução na primeira linha. As
instruções ElseIf , Else e End If podem ser precedidas apenas por um rótulo de linha.
O bloco If ... Then ... Else deve terminar com uma instrução End If .
Dica
A instrução Select...Case pode ser mais útil quando você avalia uma única
expressão que tem vários valores possíveis.
Na sintaxe de linha única, você pode ter várias instruções executadas como resultado de
uma decisão If ... Then . Todas as instruções precisam estar na mesma linha e ser
separadas por dois-pontos.
VB
Module Multiline
If count = 0 Then
Else
End If
Console.WriteLine(message)
End Sub
End Module
VB
Module Nested
End Sub
Return True
Else
Return False
End If
If hour = 12 Then
Return True
Else
Return False
End If
Else
Return False
End If
End Function
End Module
VB
Module SingleLine
If A > 10 Then A = A + 1 : B = B + A : C = C + B
End Sub
End Module
Confira também
Choose
Switch
Diretivas #If...Then...#Else
Instrução Select...Case
Estruturas de Controle Aninhadas
Estruturas de Decisão
Operadores lógicos e bit a bit no Visual Basic
Operador If
Instrução Implements
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
' -or-
Partes
interfacename
interfacemember
Comentários
Uma interface é uma coleção de protótipos que representam os membros
(propriedades, procedimentos e eventos) que a interface encapsula. As interfaces
contêm apenas as declarações para membros; classes e estruturas implementam esses
membros. Para obter mais informações, consulte Interfaces.
Exemplo 1
O exemplo a seguir mostra como usar a instrução Implements para implementar
membros de uma interface. Ele define uma interface nomeada ICustomerInfo com um
evento, uma propriedade e um procedimento. A classe customerInfo implementa todos
os membros definidos na interface.
VB
Event UpdateComplete()
Sub UpdateCustomerStatus()
End Interface
Implements ICustomerInfo
Implements ICustomerInfo.CustomerName
Get
Return customerNameValue
End Get
customerNameValue = value
End Set
End Property
Implements ICustomerInfo.UpdateCustomerStatus
RaiseEvent UpdateComplete()
End Sub
End Class
Observe que a classe customerInfo usa a instrução Implements em uma linha de código-
fonte separada para indicar que a classe implementa todos os membros da interface
ICustomerInfo . Em seguida, cada membro da classe usa a palavra-chave
Implements como parte de sua declaração de membro para indicar que ele implementa
esse membro de interface.
Exemplo 2
Os dois procedimentos a seguir mostram como você pode usar a interface
implementada no exemplo anterior. Para testar a implementação, adicione esses
procedimentos ao projeto e chame o procedimento testImplements .
VB
cust.CustomerName = "Fred"
cust.UpdateCustomerStatus()
End Sub
Sub HandleUpdateComplete()
MsgBox("Update is complete.")
End Sub
Confira também
Implementações
Instrução Interface
Interfaces
Instrução Imports (tipo e namespace
.NET)
Artigo • 22/02/2023 • 4 minutos para o fim da leitura
Sintaxe
VB
' -or-
Partes
Termo Definição
aliasname Opcional. Um alias ou nome de importação pelo qual o código pode se referir a
namespace em vez da cadeia de caracteres de qualificação completa. Confira Nomes
de elementos declarados.
Comentários
A instrução Imports permite que os tipos contidos em um determinado namespace
sejam referenciados diretamente.
VB
Imports System.Collections.Generic
Cada arquivo de origem pode conter qualquer número de instruções Imports . Elas
devem seguir alguma declaraçâo de opção, como a instrução Option Strict , e devem
preceder declarações de elemento de programação, como as instruções Module ou
Class .
Você só pode usar Imports no nível do arquivo. Isso significa que o contexto de
declaração para importação precisa ser um arquivo de origem, e não pode ser um
namespace, uma classe, uma estrutura, um módulo, uma interface, um procedimento
nem um bloco.
7 Observação
Aliases de importação
Um alias de importação define o alias para um namespace ou tipo. Os aliases de
importação são úteis quando você precisa usar itens com o mesmo nome declarado em
um ou mais namespaces. Para obter mais informações e um exemplo, consulte
"Qualificar um nome de elemento" em Referências a elementos declarados.
Você não deve declarar um membro no nível do módulo com o mesmo nome de
aliasname . Se você fizer isso, o compilador do Visual Basic usará aliasname apenas para
o membro declarado e não o reconhecerá mais como um alias de importação.
Embora a sintaxe usada para declarar um alias de importação seja semelhante à usada
para importar um prefixo do namespace de XML, os resultados são diferentes. Um alias
de importação pode ser usado como uma expressão no seu código, enquanto um
prefixo de namespace de XML pode ser usado apenas em literais XML ou propriedades
do eixo XML como o prefixo para um nome qualificado de elemento ou atributo.
Nomes de elementos
Se você fornecer element , ele deve representar um elemento de contêiner, ou seja, um
elemento de programação que pode conter outros elementos. Os elementos de
contêiner incluem classes, estruturas, módulos, interfaces e enumerações.
O escopo dos elementos disponibilizados por uma instrução Imports depende se você
especificar element . Se você especificar apenas namespace , todos os membros
nomeados exclusivamente desse namespace e membros de elementos de contêiner
dentro desse namespace estarão disponíveis sem qualificação. Se você especificar
namespace e element , somente os membros desse elemento estarão disponíveis sem
qualificação.
Exemplo 1
O exemplo a seguir lista todas as pastas no diretório C:\ usando a classe DirectoryInfo:
VB
sb.Append(dir.Name)
sb.Append(Microsoft.VisualBasic.ControlChars.CrLf)
Next
Return sb.ToString
End Function
Exemplo 2
O exemplo a seguir inclui instruções Imports para os namespaces referenciados.
Portanto, os tipos não precisam ser totalmente qualificados com os namespaces.
VB
' Place Imports statements at the top of your program.
Imports System.Text
Imports System.IO
Imports Microsoft.VisualBasic.ControlChars
VB
sb.Append(dir.Name)
sb.Append(CrLf)
Next
Return sb.ToString
End Function
Exemplo 3
O exemplo a seguir inclui instruções Imports que criam aliases para os namespaces
referenciados. Os tipos são qualificados com os aliases.
VB
Imports ch = Microsoft.VisualBasic.ControlChars
VB
sb.Append(dir.Name)
sb.Append(ch.CrLf)
Next
Return sb.ToString
End Function
Exemplo 4
O exemplo a seguir inclui instruções Imports que criam aliases para os tipos de
referência. Os aliases são usados para especificar os tipos.
VB
VB
sb.Append(dir.Name)
sb.Append(ControlChars.CrLf)
Next
Return sb.ToString
End Function
Confira também
Instrução Namespace
Namespaces no Visual Basic
Referências e a instrução Imports
Instrução Imports (namespace XML)
Referências a elementos declarados
Instrução Imports (namespace XML)
Artigo • 22/02/2023 • 4 minutos para o fim da leitura
Sintaxe
VB
Partes
xmlNamespacePrefix
Opcional. A cadeia de caracteres pela qual elementos XML e atributos podem se referir
a xmlNamespaceName . Se nenhum xmlNamespacePrefix for fornecido, o namespace de
XML importado será o namespace de XML padrão. Deve ser um identificador XML
válido. Para obter mais informações, confira Nomes de elementos e atributos XML
declarados.
xmlNamespaceName
Obrigatórios. A cadeia de caracteres que identifica o namespace de XML que está sendo
importado.
Comentários
Você pode usar a instrução Imports para definir namespaces de XML globais que
podem ser usados com literais do XML e propriedades do eixo XML ou como
parâmetros passados para o operador GetXmlNamespace . (Para obter informações sobre
como usar a instrução Imports para importar um alias que pode ser usado onde os
nomes de tipo são usados em seu código, confira Instrução Imports (tipo e namespace
.NET).) A sintaxe para declarar um namespace de XML usando a instrução Imports é
idêntica à sintaxe usada em XML. Portanto, você pode copiar uma declaração de
namespace de um arquivo XML e usá-la em uma instrução Imports .
Prefixos de namespace de XML são úteis quando você deseja criar repetidamente
elementos XML que são do mesmo namespace. O prefixo de namespace de XML
declarado com a instrução Imports é global no sentido de que ele está disponível para
todo o código no arquivo. Você pode usá-lo quando cria literais de elemento XML e
quando acessa as propriedades do eixo XML. Para obter mais informações, confira
Literal do elemento XML e Propriedades do eixo XML.
Cada arquivo de origem pode conter qualquer número de instruções Imports . Elas
devem seguir declarações de opção, como a instrução Option Strict , e devem preceder
declarações de elemento de programação, como instruções Module ou Class .
Exemplo 1
O exemplo a seguir importa um namespace de XML padrão e um namespace de XML
identificado com o prefixo ns . Em seguida, ele cria literais do XML que usam ambos os
namespaces.
VB
Imports <xmlns="http://DefaultNamespace">
Imports <xmlns:ns="http://NewNamespace">
Module Module1
Sub Main()
' Create element by using both the default global XML namespace
<ns:innerElement></ns:innerElement>
<siblingElement></siblingElement>
</ns:outer>
Console.WriteLine(outer)
End Sub
End Module
XML
<ns:outer xmlns="http://DefaultNamespace"
xmlns:ns="http://NewNamespace">
<ns:innerElement></ns:innerElement>
<siblingElement></siblingElement>
<innerElement />
</ns:outer>
Exemplo 2
O exemplo a seguir importa o prefixo ns de namespace de XML. Em seguida, ele cria
um literal do XML que usa o prefixo de namespace e exibe o formulário final do
elemento.
VB
Imports <xmlns:ns="http://SomeNamespace">
Class TestClass1
Dim test =
<ns:outer>
<ns:middle xmlns:ns="http://NewNamespace">
<ns:inner1/>
</ns:middle>
</ns:outer>
Console.WriteLine(test)
End Sub
End Class
XML
<ns:outer xmlns:ns="http://SomeNamespace">
<ns:middle xmlns:ns="http://NewNamespace">
<ns:inner1 />
</ns:middle>
</ns:outer>
Exemplo 3
O exemplo a seguir importa o prefixo ns de namespace de XML. Em seguida, ele usa o
prefixo do namespace para criar um literal do XML e acessar o primeiro nó filho com o
nome qualificado ns:name .
VB
Class TestClass4
<ns:name>Patrick Hines</ns:name>
</ns:contact>
Console.WriteLine(contact.<ns:name>.Value)
End Sub
End Class
Patrick Hines
Confira também
Literal do Elemento XML
Propriedades do eixo XML
Nomes de elementos e atributos XML declarados
Operador GetXmlNamespace
Instrução Inherits
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Faz com que a classe ou interface atual herde os atributos, variáveis, propriedades,
procedimentos e eventos de outra classe ou conjunto de interfaces.
Sintaxe
VB
Inherits basetypenames
Partes
Termo Definição
-ou-
Os nomes das interfaces das quais essa interface deriva. Use vírgulas para
separar vários nomes.
Comentários
Se usada, a instrução Inherits deve ser a primeira linha não em branco e sem
comentários em uma definição de classe ou interface. Ela deve seguir imediatamente a
instrução Class ou Interface .
Você só pode usar Inherits em uma classe ou interface. Isso significa que o contexto
de declaração de uma herança não pode ser um arquivo de origem, namespace,
estrutura, módulo, procedimento ou bloco.
Regras
Herança de classe. Se uma classe usar a instrução Inherits , você poderá
especificar apenas uma classe base.
Uma classe não pode herdar de uma classe que está aninhada dentro dela.
Herança de interface. Se uma interface usar a instrução Inherits , você poderá
especificar uma ou mais interfaces base. Você pode herdar de duas interfaces
mesmo que elas definam um membro com o mesmo nome. Se você fizer isso, o
código de implementação deverá usar a qualificação de nome para especificar
qual membro ele está implementando.
Uma interface não pode herdar de outra interface que tenha um nível de acesso
mais restritivo. Por exemplo, uma interface Public não pode herdar de uma
interface Friend .
Uma interface não pode herdar de uma interface que esteja aninhada dentro dela.
Exemplo 1
O exemplo a seguir usa a instrução Inherits para mostrar como uma classe chamada
thisClass pode herdar todos os membros de uma classe base chamada anotherClass .
VB
Inherits anotherClass
End Class
Exemplo 2
O exemplo a seguir mostra a herança de várias interfaces.
VB
End Interface
Confira também
MustInherit
NotInheritable
Objetos e Classes
Noções básicas de herança
Interfaces
Instrução Interface (Visual Basic)
Artigo • 28/11/2022 • 6 minutos para o fim da leitura
Sintaxe
VB
[ Inherits interfacenames ]
End Interface
Partes
Termo Definição
- Público
- Protegido
- Amigo
- Particular
- Amigo Protegido
typelist Obrigatório se você usar a palavra-chave De. Lista de parâmetros de tipo para
essa interface. Como opção, cada parâmetro de tipo pode ser declarado
variante usando os modificadores In e Out genéricos. Confira Lista de tipos.
Inherits Opcional. Indica que essa interface herda os atributos e os membros de outra
interface ou interfaces. Confira Instrução Inherits.
interfacenames Obrigatório se você usar a instrução Inherits . Os nomes das interfaces das
quais essa interface deriva.
Interface Opcional. Define uma interface aninhada dentro dessa interface. A definição de
interface aninhada deve ser encerrada com uma instrução End Interface .
Comentários
Uma interface define um conjunto de membros, como propriedades e procedimentos,
que as classes e estruturas podem implementar. A interface define apenas as assinaturas
dos membros e não seus trabalhos internos.
Uma classe ou estrutura implementa a interface fornecendo código para cada membro
definido pela interface. Por fim, quando o aplicativo cria uma instância dessa classe ou
estrutura, um objeto existe e é executado na memória. Para obter mais informações,
confira Objetos e classes e Interfaces.
Você só pode usar Interface no namespace ou no nível do módulo. Isso significa que o
contexto de declaração de uma interface precisa ser um arquivo de origem, namespace,
classe, estrutura, módulo, ou interface, e não pode ser um procedimento ou bloco. Para
obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.
Regras
Interfaces de aninhamento. Você pode definir uma interface dentro de outra. A
interface externa é chamada de interface independente, e a interface interna é
chamada de interface aninhada.
Por outro lado, quando você define uma enumeração ou estrutura, ou uma classe
ou interface aninhada, é necessário incluir os membros de dados.
Herança. Se uma interface usar a instrução Inherits, você poderá especificar uma
ou mais interfaces base. Você pode herdar de duas interfaces mesmo que elas
definam um membro com o mesmo nome. Se você fizer isso, o código de
implementação deverá usar a qualificação de nome para especificar qual membro
ele está implementando.
Uma interface não pode herdar de outra interface que tenha um nível de acesso
mais restritivo. Por exemplo, uma interface Public não pode herdar de uma
interface Friend .
Uma interface não pode herdar de uma interface que esteja aninhada dentro dela.
Quando uma classe está implementando um procedimento, ela não pode designar
o procedimento como Shared .
Observe que isso significa que uma interface só pode definir uma propriedade
padrão se ela herdar nenhuma.
Comportamento
Nível de acesso. Todos os membros da interface têm acesso público
implicitamente. Você não pode usar nenhum modificador de acesso ao definir um
membro. No entanto, uma classe que implementa a interface pode declarar um
nível de acesso para cada membro implementado.
Se você atribuir uma instância de classe a uma variável, o nível de acesso dos
membros poderá depender de se o tipo de dados da variável é a interface
subjacente ou a classe de implementação. O exemplo a seguir ilustra essa situação.
VB
Sub DoSomething()
End Interface
Implements IDemo
End Sub
End Class
Tempo de vida. Uma interface em si não tem um tempo de vida nem os membros
dela. Quando uma classe implementa uma interface e um objeto é criado como
uma instância dessa classe, o objeto tem um tempo de vida dentro do aplicativo
no qual está em execução. Para obter mais informações, confira "Tempo de vida"
na Instrução Class.
Exemplo
O exemplo a seguir usa a instrução Interface para definir uma interface chamada
thisInterface , que deve ser implementada com uma instrução Property e uma
instrução Function .
VB
End Interface
Observe que as instruções Property e Function não introduzem blocos que terminam
com End Property e End Function dentro da interface. A interface define somente a
assinatura dos membros. Os blocos Property e Function completos aparecem em uma
classe que implementa thisInterface .
Confira também
Interfaces
Instrução Class
Instrução Module
Instrução Structure
Instrução Property
Instrução Function
Instrução Sub
Tipos genéricos no Visual Basic
Visão geral do sombreamento
Variação em interfaces genéricas
In
Saída
Instrução Mid
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Mid( _
) = StringExpression
Partes
Target
Start
Length
StringExpression
Exceções
Tipo de exceção Condição
Comentários
O número de caracteres substituídos é sempre menor ou igual ao número de caracteres
em Target .
O Visual Basic tem uma função Mid e uma instrução Mid . Esses elementos operam em
um número especificado de caracteres em uma cadeia de caracteres, mas a função Mid
retorna os caracteres enquanto a instrução Mid substitui os caracteres. Para obter mais
informações, consulte Mid.
7 Observação
Exemplo
Este exemplo usa a instrução Mid para substituir um número especificado de caracteres
em uma variável de cadeia de caracteres por caracteres de outra cadeia de caracteres.
VB
Mid(testString, 5, 3) = "fox"
Mid(testString, 5) = "cow"
Mid(testString, 5, 3) = "duck"
Requisitos
Namespace:Microsoft.VisualBasic
Módulo: Strings
Assembly: Biblioteca de Tempo de Execução do Visual Basic (em
Microsoft.VisualBasic.dll)
Confira também
Mid
Cadeias de caracteres
Introdução a cadeias de caracteres no Visual Basic
Instrução Module
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
[ statements ]
End Module
Partes
attributelist
accessmodifier
Público
Friend
name
statements
End Module
Comentários
Uma instrução Module define um tipo de referência disponível em todo o namespace.
Um módulo (às vezes chamado de módulo padrão) é semelhante a uma classe, mas com
algumas distinções importantes. Cada módulo tem exatamente uma instância e não
precisa ser criado nem atribuído a uma variável. Os módulos não dão suporte à herança
nem implementam interfaces. Observe que um módulo não é um tipo no sentido de
que uma classe ou estrutura é – você não pode declarar um elemento de programação
para ter o tipo de dados de um módulo.
Você só pode usar Module no nível do namespace. Isso significa que o contexto de
declaração de um módulo precisa ser um arquivo de origem ou namespace, e não pode
ser uma classe, uma estrutura, um módulo, uma interface, um procedimento nem um
bloco. Você não pode aninhar um módulo em outro módulo nem dentro de algum tipo.
Para obter mais informações, consulte Contextos de declaração e níveis de acesso
padrão.
Um módulo tem o mesmo tempo de vida que o programa. Como os membros são
todos Shared , eles também têm tempo de vida igual ao do programa.
Os módulos assumem o padrão de acesso Amigo. Você pode ajustar os níveis de acesso
com os modificadores de acesso. Para obter mais informações, confira Níveis de acesso
no Visual Basic.
Classes e módulos
Estes elementos têm muitas semelhanças, mas também há algumas diferenças
importantes.
Orientação a objeto. As classes são orientadas a objetos, mas os módulos não são.
Portanto, somente classes podem ser instanciadas como objetos. Para obter mais
informações, confira Objetos e classes.
Regras
Modificadores. Todos os membros do módulo são implicitamente
Compartilhados. Você não pode usar a palavra-chave Shared ao declarar um
membro e não pode alterar o status compartilhado de nenhum membro.
Você não pode usar a Instrução Inherits em uma definição de módulo, mesmo
para especificar Object.
Comportamento
Nível de acesso. Em um módulo, você pode declarar cada membro com o próprio
nível de acesso. Os membros do módulo assumem o padrão de acesso Público,
exceto variáveis e constantes, que assumem o padrão de acesso Privado. Quando
um módulo tem acesso mais restrito do que um dos membros dele, o nível de
acesso do módulo especificado tem precedência.
Exemplo
VB
Sub Main()
End Sub
End Module
Confira também
Instrução Class
Instrução Namespace
Instrução Structure
Instrução Interface
Instrução Property
Tipo de promoção
Instrução Namespace
Artigo • 22/02/2023 • 4 minutos para o fim da leitura
Sintaxe
VB
[ componenttypes ]
End Namespace
Partes
Opcional Global. Permite definir um namespace fora do namespace raiz do projeto.
Confira Namespaces no Visual Basic.
identificador válido do Visual Basic. Para obter mais informações, consulte Nomes do
Elemento Declarado.
Comentários
Namespaces são usados como um sistema organizacional. Eles fornecem uma forma de
classificar e apresentar elementos de programação expostos a outros programas e
aplicativos. Observe que um namespace não é um tipo no sentido de que uma classe ou
estrutura é — você não pode declarar que um elemento de programação tenha o tipo
de dados de um namespace.
Você pode declarar um namespace dentro de outro. Não há um limite estrito para os
níveis de aninhamento que você pode declarar, mas lembre-se de que quando outro
código acessa os elementos declarados no namespace mais interno, ele deve usar uma
cadeia de caracteres de qualificação que contenha todos os nomes de namespace na
hierarquia de aninhamento.
Nível de acesso
Os namespaces são tratados como se tivessem um nível de acesso Public . Um
namespace pode ser acessado do código em qualquer lugar do mesmo projeto, de
outros projetos que fazem referência a ele e de qualquer assembly criado por meio do
projeto.
Namespace raiz
Todos os nomes de namespace no projeto são baseados em um namespace raiz. O
Visual Studio atribui o nome do projeto como o namespace raiz padrão para todos os
códigos no projeto. Por exemplo, se o projeto for nomeado Payroll , os elementos de
programação pertencem ao namespace Payroll . Se você declarar Namespace funding , o
nome completo desse namespace será Payroll.funding .
Como alternativa, você pode usar a palavra-chave Global para se referir a elementos de
namespaces definidos fora do projeto. Isso permite manter o nome do projeto como o
namespace raiz. Isso reduz a chance de mesclar involuntariamente os elementos de
programação com os dos namespaces existentes. Para obter mais informações, confira a
seção "Palavra-chave global em nomes totalmente qualificados" em Namespaces no
Visual Basic.
A palavra-chave Global também pode ser usada em uma instrução Namespace. Isso
permite definir um namespace fora do namespace raiz do projeto. Para obter mais
informações, confira a seção "Palavra-chave nas declarações de Namespace global" em
Namespaces no Visual Basic.
Atributos e Modificadores
Você não pode aplicar atributos a um namespace. Um atributo contribui com
informações para os metadados do assembly, o que não é significativo para
classificadores de origem, como namespaces.
Exemplo 1
O exemplo a seguir declara dois namespaces, um aninhado no outro.
VB
Namespace n1
Namespace n2
Class a
End Class
End Namespace
End Namespace
Exemplo 2
O exemplo a seguir declara vários namespaces aninhados em uma linha única e é
equivalente ao exemplo anterior.
VB
Namespace n1.n2
Class a
End Class
End Namespace
Exemplo 3
O exemplo a seguir acessa a classe definida nos exemplos anteriores.
VB
Exemplo 4
O exemplo a seguir define o esqueleto de uma nova classe de lista genérica e o adiciona
ao namespace System.Collections.Generic.
VB
Namespace System.Collections.Generic
Class specialSortedList(Of T)
Inherits List(Of T)
End Class
End Namespace
Confira também
Instrução Imports (tipo e namespace .NET)
Nomes de elementos declarados
Namespaces no Visual Basic
Instrução On Error (Visual Basic)
Artigo • 22/02/2023 • 8 minutos para o fim da leitura
7 Observação
A palavra-chave Error também é usada na Instrução Error, que tem suporte para
compatibilidade com versões anteriores.
Sintaxe
VB
Partes
Termo Definição
GoTo line Habilita a rotina de tratamento de erros que começa na linha especificada no
argumento line necessário. O argumento line é qualquer rótulo de linha ou número de
linha. Se ocorrer um erro em tempo de execução, controle branches para a linha
especificada, tornando o manipulador de erros ativo. A linha especificada deve estar
no mesmo procedimento que a instrução On Error ; caso contrário, ocorrerá um erro
em tempo de compilação.
Resume Especifica que, quando ocorre um erro em tempo de execução, o controle vai para a
Next instrução imediatamente após a instrução em que o erro ocorreu e a execução
continua desse ponto. Use esse formulário em vez de On Error GoTo ao acessar
objetos.
Comentários
7 Observação
Cada vez que o manipulador de erros passa o controle de volta para um procedimento
de chamada, esse procedimento se torna o procedimento atual. Depois que um erro é
tratado por um manipulador de erros em qualquer procedimento, a execução é
retomada no procedimento atual no ponto designado pela instrução Resume .
7 Observação
Propriedade number
As rotinas de tratamento de erros dependem do valor na propriedade Number do objeto
Err para determinar a causa do erro. A rotina deve testar ou salvar valores de
propriedade relevantes no objeto Err antes que qualquer outro erro possa ocorrer ou
antes que um procedimento que possa causar um erro seja chamado. Os valores da
propriedade no objeto Err refletem apenas o erro mais recente. A mensagem de erro
associada a Err.Number está contida em Err.Description .
Instrução Throw
Um erro gerado com o método Err.Raise define a propriedade Exception como uma
instância recém-criada da classe Exception. Para dar suporte à criação de exceções de
tipos de exceção derivadas, há suporte para uma instrução Throw no idioma. Isso requer
um único parâmetro que é a instância de exceção a ser gerada. O seguinte exemplo
mostra como esses recursos podem ser usados com o suporte ao tratamento de
exceções existente:
VB
Handler:
End If
erro em tempo de execução. Você pode colocar a rotina de tratamento de erros onde o
erro ocorreria em vez de transferir o controle para outro local dentro do procedimento.
Uma instrução On Error Resume Next fica inativa quando outro procedimento é
chamado, portanto, você deverá executar uma instrução On Error Resume Next em cada
rotina chamada se desejar tratamento de erro embutido dentro dessa rotina.
7 Observação
On Error GoTo 0
On Error GoTo 0 desabilita o tratamento de erros no procedimento atual. Ele não
On Error GoTo -1
On Error GoTo -1 desabilita a exceção no procedimento atual. Ele não especifica a linha
-1 como o início do código de tratamento de erros, mesmo que o procedimento
contenha uma linha numerada -1. Sem uma instrução On Error GoTo -1 , uma exceção é
desabilitada automaticamente quando um procedimento é encerrado.
Para impedir que o código de tratamento de erros seja executado quando nenhum erro
tiver ocorrido, coloque uma instrução Exit Sub , Exit Function ou Exit Property
imediatamente antes da rotina de tratamento de erros, como no seguinte fragmento:
VB
Exit Sub
ErrorHandler:
Resume Next
End Sub
Aqui, o código de tratamento de erros segue a instrução Exit Sub e precede a instrução
End Sub para separá-la do fluxo de procedimento. Você pode colocar o código de
tratamento de erros em qualquer lugar em um procedimento.
Se você criar um objeto que acesse outros objetos, tente manipular os erros não
tratados que eles passarem de volta. Se não puder, mapeie os códigos de erro em
Err.Number para um dos próprios erros e passe-os de volta para o chamador do objeto.
VB
U Cuidado
Exemplo
Este exemplo primeiro usa a instrução On Error GoTo para especificar o local de uma
rotina de tratamento de erros dentro de um procedimento. No exemplo, uma tentativa
de dividir por zero gera o erro número 6. O erro é tratado na rotina de tratamento de
erros e o controle é retornado para a instrução que causou o erro. A instrução On Error
GoTo 0 desativa a captura de erro. Em seguida, a instrução On Error Resume Next é
usada para adiar a captura de erros para que o contexto do erro gerado pela próxima
instrução possa ser conhecido com certeza. Observe que Err.Clear é usado para limpar
as propriedades do objeto Err depois que o erro é tratado.
VB
Dim x As Integer = 32
Dim y As Integer = 0
Dim z As Integer
If Err.Number = 6 Then
' Tell user what happened. Then clear the Err object.
End If
Case Else
End Select
End Sub
Requisitos
Namespace:Microsoft.VisualBasic
Confira também
Err
Number
Description
LastDllError
Instrução End
Instrução Exit
Instrução Resume
Mensagens de Erro
Instrução Try...Catch...Finally
Instrução Operator
Artigo • 07/04/2023 • 5 minutos para o fim da leitura
Sintaxe
VB
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
Partes
attrlist
Public
Overloads
Shared
Shadows
Widening
operatorsymbol
operand1
operand2
Parte Descrição
operandname Obrigatórios. Nome da variável que representa esse operando. Confira Nomes de
elementos declarados.
operandtype Opcional a menos que Option Strict seja On . Tipo de dados desse operando.
type
Opcional a menos que Option Strict seja On . Tipo de dados do valor que o
procedimento do operador retorna.
statements
returnvalue
End Operator
Todos os operadores devem ser Public Shared . Você não pode especificar ByRef ,
Optional ou ParamArray para qualquer operando.
Tipo Operadores
Binário + , - , * , / , \ , & , ^ , >> , << , = , <> , > , >= , < , <= , And , Like , Mod , Or , Xor
Pares correspondentes
Você deve definir determinados operadores como pares correspondentes. Se você
definir um operador desse par, também deverá definir o outro. Os pares
correspondentes são os seguintes:
= e <>
> e <
>= e <=
IsTrue e IsFalse
Restrições de tipo de dados
Cada operador definido deve envolver a classe ou a estrutura na qual você a define. Isso
significa que a classe ou estrutura deve aparecer como o tipo de dados do seguinte:
Se você definir os operadores << e >> , ambos deverão retornar o tipo Integer
para o operandtype de operand2 .
O tipo de retorno não precisa corresponder ao tipo de nenhum dos operandos. Por
exemplo, um operador de comparação como = ou <> pode retornar Boolean mesmo
que nenhum operando seja Boolean .
Você não pode definir o operador AndAlso diretamente com uma instrução Operator .
No entanto, você poderá usar AndAlso se tiver cumprido as condições a seguir:
Você definiu And com os mesmos tipos de operando que deseja usar para
AndAlso .
Sua definição de And retorna o mesmo tipo que a classe ou estrutura na qual você
a definiu.
Você definiu o operador IsFalse na classe ou estrutura na qual você definiu And .
Da mesma forma, você pode usar OrElse se tiver definido Or nos mesmos operandos,
com o tipo de retorno da classe ou estrutura e tiver definido IsTrue na classe ou
estrutura.
Deve tratar qualquer erro retornado de todos os procedimentos que ele chama.
Exemplo
O exemplo de código a seguir usa a instrução Operator para definir o contorno de uma
estrutura que inclui procedimentos de operador para os operadores And , Or , IsFalse e
IsTrue . And e Or usam cada um dois operandos do tipo abc e tipo de retorno abc .
IsFalse e IsTrue usam cada um, um operando simples do tipo abc e tipo de retorno
Boolean . Essas definições permitem que o código de chamada use And , AndAlso , Or e
OrElse com operandos do tipo abc .
VB
Dim d As Date
Return r
End Operator
Return r
End Operator
Dim b As Boolean
Return b
End Operator
Dim b As Boolean
Return b
End Operator
End Structure
Confira também
Operador IsFalse
Operador IsTrue
Widening
Narrowing
Conversões de Widening e Narrowing
Procedimentos do operador
Como definir um operador
Como definir um operador de conversão
Como chamar um procedimento de operador
Como usar uma classe que define operadores
Instrução Option <keyword>
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Apresenta uma declaração que especifica uma opção de compilador que se aplica a
todo o arquivo de origem.
Comentários
As opções do compilador podem controlar se todas as variáveis devem ser declaradas
explicitamente, se as conversões de tipo de estreitamento devem ser explícitas ou se as
cadeias de caracteres devem ser comparadas como texto ou como quantidades binárias.
Confira também
Palavras-chave
Instrução Option Compare
Artigo • 28/11/2022 • 3 minutos para o fim da leitura
Sintaxe
VB
Partes
Termo Definição
Binary Opcional. Resulta em comparações de cadeias de caracteres com base em uma ordem
de classificação derivada das representações binárias internas dos caracteres.
Text Opcional. Resulta em comparações de cadeias de caracteres com base em uma ordem
de classificação de texto com diferenciação de maiúsculas de minúsculas determinada
pela localidade do sistema.
Esse tipo de comparação é útil se suas cadeias de caracteres tiverem todos os caracteres
de texto e você desejar compará-las levando em conta equivalências alfabéticas como
maiúsculas e minúsculas e letras relacionadas. Por exemplo, você pode desejar
considerar que A e a sejam iguais, e que Ä e ä venham antes de B e b .
Comentários
Se usado, a instrução Option Compare deve aparecer em um arquivo antes de quaisquer
outras instruções de código-fonte.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
(A=a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø)
7 Observação
Seu computador pode mostrar diferentes nomes ou locais para alguns dos
elementos de interface do usuário do Visual Studio nas instruções a seguir. A
edição do Visual Studio que você possui e as configurações que você usa
determinam esses elementos. Para obter mais informações, consulte
Personalizando o IDE.
Exemplo 1
O exemplo a seguir usa a instrução Option Compare para definir a comparação binária
como o método padrão de comparação de cadeia de caracteres. Para usar esse código,
retire os comentários da instrução Option Compare Binary e coloque-os na parte
superior do arquivo de origem.
VB
Exemplo 2
O exemplo a seguir usa a instrução Option Compare para definir a ordem de classificação
sem diferenciação de maiúsculas de minúsculas como o método padrão de comparação
de cadeia de caracteres. Para usar esse código, retire os comentários da instrução
Option Compare Text e coloque-os na parte superior do arquivo de origem.
VB
Console.WriteLine("A" = "a")
Confira também
InStr
InStrRev
Replace
Split
StrComp
-optioncompare
Operadores de comparação
Operadores de comparação no Visual Basic
Operador Like
Funções de cadeia de caracteres
Instrução Option Explicit
Instrução Option Strict
Instrução Option Explicit (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
On
Off
Comentários
Quando Option Explicit On ou Option Explicit aparece em um arquivo, você precisa
declarar explicitamente todas as variáveis usando a instrução Dim ou ReDim . Se você
tentar usar um nome de variável não declarado, ocorrerá um erro em tempo de
compilação. A instrução Option Explicit Off permite a declaração implícita de
variáveis.
7 Observação
Configurar Option Explicit como Off geralmente não é uma boa prática. Você
poderia digitar incorretamente um nome de variável em um ou mais locais, o que
levaria a resultados inesperados na execução do programa.
Quando uma instrução Option Explicit não está
presente
Se o código-fonte não contiver uma instrução Option Explicit , será usada a
configuração de Option Explicit em Compilar Página, Designer de Projeto (Visual Basic).
Se for usado o compilador de linha de comando, será usada a opção do compilador -
optionexplicit.
Quando você cria um novo projeto, a configuração de Option Explicit na guia Compilar
é definida para a configuração de Option Explicit na caixa de diálogo Padrões do VB.
Para acessar a caixa de diálogo Padrões do VB, no menu Ferramentas, clique em
Opções. Na caixa de diálogo Opções, expanda Projetos e Soluções e, em seguida,
clique em Padrões de VB. A configuração inicial padrão nos Padrões do VB é On .
Exemplo
O exemplo a seguir usa a instrução Option Explicit para forçar a declaração explícita
de todas as variáveis. Tentar usar uma variável não declarada causa um erro em tempo
de compilação.
VB
Option Explicit On
VB
thisVar = 10
Confira também
Instrução Dim
Instrução ReDim
Instrução Option Compare
Instrução Option Strict
-optioncompare
-optionexplicit
-optionstrict
Caixa de diálogo Padrões do Visual Basic, Projetos, Opções
Instrução Option Infer
Artigo • 28/11/2022 • 4 minutos para o fim da leitura
Sintaxe
VB
Partes
Termo Definição
Comentários
Para definir Option Infer em um arquivo, digite Option Infer On ou Option Infer Off
na parte superior do arquivo, antes de qualquer outro código-fonte. Se o valor definido
para Option Infer em um arquivo entrar em conflito com o valor definido no IDE ou na
linha de comando, o valor no arquivo possui precedência.
Quando você define Option Infer para On , você pode declarar variáveis locais sem
especificar explicitamente um tipo de dados. O compilador infere o tipo de dados de
uma variável do tipo de sua expressão de inicialização.
Na ilustração a seguir, Option Infer está ativado. A variável na declaração Dim someVar
= 2 é declarada como um inteiro por inferência de tipo.
A captura de tela a seguir mostra o IntelliSense quando a instrução Option Infer está
ativada:
Na ilustração a seguir, o Option Infer está desativado. A variável na declaração Dim
someVar = 2 é declarada como um Object por inferência de tipo. Neste exemplo, a
A captura de tela a seguir mostra o IntelliSense quando a instrução Option Infer está
desativada:
7 Observação
Quando você cria um novo projeto, a configuração de Option Infer na guia Compilar é
definida para a configuração de Option Infer na caixa de diálogo Padrões do VB. Para
acessar a caixa de diálogo Padrões de VB, no menu Ferramentas, clique em Opções. Na
caixa de diálogo Opções, expanda Projetos e Soluções e, em seguida, clique em
Padrões de VB. A configuração inicial padrão nos Padrões de VB é On .
Sim Não Dim qty A variável é inicializada para o valor padrão para o
As tipo de dados. Para obter mais informações,
Integer consulte Instrução Dim.
Exemplo 1
Os exemplos a seguir demonstram como a instrução Option Infer habilita a inferência
de tipo local.
VB
Dim num = 5
For i = 1 To 10
Console.WriteLine(i)
Next
Console.WriteLine(item)
Next
.City = "Snoqualmie"}
' query, the inferred type of cust is Customer, and the inferred type
Exemplo 2
O exemplo a seguir demonstra o tipo de tempo de execução pode ser diferente quando
uma variável é identificada como um Object .
VB
Dim someVar = 5
Console.WriteLine(someVar.GetType.ToString)
someVar = "abc"
Console.WriteLine(someVar.GetType.ToString)
' Output:
' System.Int32
' System.String
Confira também
Instrução Dim
Inferência de Tipo de Variável Local
Instrução Option Compare
Instrução Option Explicit
Instrução Option Strict
Caixa de diálogo Padrões do Visual Basic, Projetos, Opções
-optioninfer
Conversão boxing e unboxing
Instrução Option Strict
Artigo • 28/11/2022 • 9 minutos para o fim da leitura
Sintaxe
VB
Partes
Termo Definição
Comentários
Quando Option Strict On ou Option Strict aparece em um arquivo, as seguintes
condições causam um erro em tempo de compilação:
Associação tardia
7 Observação
Nas configurações de aviso que você pode definir na Página Compilar, Designer
de Projeto (Visual Basic), existem três configurações que correspondem às três
condições que causam um erro em tempo de compilação. Para obter informações
sobre como usar essas configurações, confira Para definir configurações de aviso
no IDE mais adiante neste tópico.
A instrução Option Strict Off desativa a verificação de erros e avisos das três
condições, mesmo que as configurações associadas do IDE especifiquem para ativar
esses erros ou avisos. A instrução Option Strict On ativa a verificação de erros e avisos
das três condições, mesmo que as configurações associadas do IDE especifiquem para
desativar esses erros ou avisos.
Se usada, a instrução Option Strict deve ser exibida antes de quaisquer outras
instruções de código em um arquivo.
Quando você define Option Strict como On , o Visual Basic verifica se os tipos de
dados foram especificados para todos os elementos de programação. Os tipos de dados
podem ser especificados explicitamente ou usando a inferência de tipo de variável local.
É recomendável especificar os tipos de dados para todos os elementos de programação
pelos seguintes motivos:
Acelera a execução do código. Isso ocorre porque, se você não especificar um tipo
de dados para um elemento de programação, o compilador do Visual Basic
atribuirá a ele o tipo Object . O código compilado pode ter que alternar a
conversão entre Object e outros tipos de dados, o que reduz o desempenho.
O Visual Basic pode converter muitos tipos de dados em outros tipos de dados. Pode
ocorrer uma perda de dados, quando o valor de um tipo de dados é convertido em um
tipo de dados com menos precisão ou com menor capacidade. Ocorrerá um erro em
tempo de execução, se essa conversão de restrição falhar. Option Strict garante a
notificação do tempo de compilação dessas conversões de restrição para que você
possa evitá-las. Para obter mais informações, confira Conversões Implícitas e Explícitas e
Conversões de Expansão e de Restrição.
As conversões que podem causar erros incluem as conversões implícitas que ocorrem
nas expressões. Para obter mais informações, consulte estes tópicos:
Operador +
Operador +=
Quando você chama um método que tem um argumento com um tipo de dados
diferente do parâmetro correspondente, uma conversão de restrição causa um erro em
tempo de compilação, se Option Strict estiver ativado. Você pode evitar o erro em
tempo de compilação, usando uma conversão de expansão ou uma conversão explícita.
Se você declarar uma variável sem usar uma cláusula As e defini-la como Nothing , a
variável terá um tipo de Object . Nenhum erro em tempo de compilação ocorre nesse
caso, quando Option Strict está ativado e Option Infer está ativado. Um exemplo
disso é o Dim something = Nothing .
Sim Não Dim qty A variável é inicializada para o valor padrão para o
As tipo de dados. Para obter mais informações, confira
Integer Instrução Dim.
7 Observação
Seu computador pode mostrar diferentes nomes ou locais para alguns dos
elementos de interface do usuário do Visual Studio nas instruções a seguir. A
edição do Visual Studio que você possui e as configurações que você usa
determinam esses elementos. Para obter mais informações, consulte
Personalizando o IDE.
Conversão implícita
Para definir Option Strict nesta caixa de diálogo, no menu Ferramentas, clique em
Opções. Na caixa de diálogo Opções, expanda Projetos e Soluções e, em seguida,
clique em Padrões de VB. A configuração inicial padrão nos Padrões do VB é Off .
Exemplo 1
Os exemplos a seguir demonstram erros em tempo de compilação causados por
conversões de tipo implícito que restringem as conversões. Essa categoria de erros
corresponde à condição Conversão implícita na Página Compilar.
VB
Exemplo 2
O exemplo a seguir demonstra um erro em tempo de compilação causado pela
associação tardia. Essa categoria de erros corresponde à condição Associação tardia; a
chamada pode falhar em tempo de execução na Página Compilar.
VB
punchCard.Column = 5
Exemplo 3
Os exemplos a seguir demonstram os erros causados por variáveis declaradas com um
tipo implícito de Object . Essa categoria de erros corresponde à condição Conversão
implícita; objeto pressuposto na Página Compilar.
VB
Dim cardReaders = 5
Dim dryWall
VB
End Sub
Confira também
Conversões de Widening e Narrowing
Conversões implícitas e explícitas
Página de Compilação, Designer de Projeto (Visual Basic)
Instrução Option Explicit
Funções de conversão do tipo
Como acessar membros de um objeto
Expressões inseridas no XML
Conversão de delegado reduzida
Associação tardia em soluções do Office
-optionstrict
Caixa de diálogo Padrões do Visual Basic, Projetos, Opções
Instrução Property
Artigo • 07/04/2023 • 6 minutos para o fim da leitura
Sintaxe
VB
[ statements ]
End Get
[ statements ]
End Set
End Property
- or -
Partes
attributelist
Default
propriedade.
accessmodifier
Público
Protegido
Friend
Privado
Amigo Protegido
Particular Protegido
propertymodifiers
Sobrecargas
Substituições
Substituível
NotOverridable
MustOverride
MustOverride Overrides
NotOverridable Overrides
Shared
Shadows
ReadOnly
Iterator
name
parameterlist
returntype
Necessário se Option Strict for On . Tipo de dados do valor retornado por essa
propriedade.
Implements
implementslist
interface.definedname
Parte Descrição
statements
End Get
Set
End Set
End Property
Comentários
A instrução Property apresenta a declaração de uma propriedade. Uma propriedade
pode ter um procedimento Get (somente leitura), um procedimento Set (somente
gravação) ou ambos (leitura-gravação). Você pode omitir os procedimentos Get e Set
ao usar uma propriedade implementada automaticamente. Para obter mais
informações, consulte Propriedades autoimplementadas.
Você só pode usar Property no nível da classe. Isso significa que o contexto de
declaração de uma variável precisa ser uma classe, estrutura, módulo, procedimento ou
interface, e não pode ser um arquivo de origem, namespace, procedimento ou bloco.
Para obter mais informações, consulte Contextos de declaração e níveis de acesso
padrão.
Por padrão, as propriedades usam o acesso público. Você pode ajustar o nível de acesso
de uma propriedade com um modificador de acesso na instrução Property e,
opcionalmente, ajustar um dos procedimentos de propriedade a um nível de acesso
mais restritivo.
Regras
Níveis de acesso mistos. Se você estiver definindo uma propriedade de
leitura/gravação, opcionalmente poderá especificar um nível de acesso diferente
para o procedimento Get ou o procedimento Set , mas não ambos. Se você fizer
isso, o nível de acesso ao procedimento deverá ser mais restritivo do que o nível
de acesso da propriedade. Por exemplo, se a propriedade for declarada Friend ,
você poderá declarar o procedimento Set Private , mas não Public .
Tipo de retorno. A instrução Property pode declarar o tipo de dados do valor que
retorna. Você pode especificar qualquer tipo de dados ou o nome de uma
enumeração, estrutura, classe ou interface.
Comportamento
Retorno de um procedimento de propriedade. Quando o procedimento Get ou
Set retorna ao código de chamada, a execução continua com a instrução após a
instrução que a invocou.
VB
VB
Get
QuoteForTheDay = quoteValue
Exit Property
End Get
End Property
Se você usar Exit Property sem atribuir um valor a name , o procedimento Get
retornará o valor padrão para o tipo de dados da propriedade.
VB
VB
Get
Return quoteValue
End Get
End Property
Exemplo
O exemplo a seguir declara uma propriedade em uma classe.
VB
Class Class1
Get
Return propertyValue
End Get
propertyValue = value
End Set
End Property
End Class
Confira também
Propriedades autoimplementadas
Objetos e Classes
Instrução Get
Instrução Set
Lista de parâmetros
Default
Instruções Q-Z
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
RaiseEvent
ReDim
REM
RemoveHandler
Retomar
Return
Select...Case
Configurar
Parar
Estrutura
Sub
SyncLock
Então
Throw
Try...Catch...Finally
Using
While...End While
With...End With
Yield
Confira também
Instruções A-E
Instruções F-P
Referência da linguagem Visual Basic
Instrução RaiseEvent
Artigo • 07/04/2023 • 4 minutos para o fim da leitura
Sintaxe
VB
Partes
eventname
argumentlist
Comentários
O eventname necessário é o nome de um evento declarado dentro do módulo. Ele segue
as convenções de nomenclatura de variáveis do Visual Basic.
Se o evento não tiver sido declarado dentro do módulo no qual ele é acionado, ocorrerá
um erro. O fragmento de código a seguir ilustra uma declaração de evento e um
procedimento no qual o evento é acionado.
VB
RaiseEvent LogonCompleted(UserName)
End Sub
Você não pode usar RaiseEvent para acionar eventos que não são declarados
explicitamente no módulo. Por exemplo, todos os formulários herdam um evento Click
do System.Windows.Forms.Form; ele não pode ser acionado usando RaiseEvent em
uma forma derivada. Se você declarar um evento Click no módulo de formulário, ele
sombreará o próprio evento Click do formulário. Você ainda pode invocar o evento Click
do formulário chamando o método OnClick.
Por padrão, um evento definido no Visual Basic aciona seus manipuladores de eventos
na ordem em que as conexões são estabelecidas. Como os eventos podem ter
parâmetros ByRef , um processo que se conecta tardiamente pode receber parâmetros
que foram alterados por um manipulador de eventos anterior. Após a execução dos
manipuladores de eventos, o controle retorna para a sub-rotina que acionou o evento.
7 Observação
7 Observação
Exemplo 1
O exemplo a seguir usa eventos para contagem regressiva de segundos de 10 para 0. O
código ilustra vários métodos, propriedades e instruções relacionados a evento,
incluindo a instrução RaiseEvent .
Para usar este exemplo, abra um novo projeto de Aplicativo do Windows, adicione um
botão nomeado Button1 e uma caixa de texto nomeada TextBox1 ao formulário
principal, chamado Form1 . Em seguida, clique com o botão direito do mouse no
formulário e clique em Exibir Código para abrir o editor de código.
VB
Exemplo 2
Adicione o código a seguir ao código de Form1 . Substitua todos os procedimentos
duplicados que possam existir, como Form_Load ou Button_Click .
VB
Button1.Text = "Start"
End Sub
mText.StartCountdown(10.0, 0.1)
End Sub
TextBox1.Text = "Done"
End Sub
) Handles mText.UpdateTime
My.Application.DoEvents()
End Sub
Class TimerState
SoFar += Increment
End If
Loop
RaiseEvent Finished()
End Sub
End Class
7 Observação
Confira também
Eventos
Instrução Event
Instrução AddHandler
Instrução RemoveHandler
Alças
Instrução ReDim (Visual Basic)
Artigo • 07/04/2023 • 4 minutos para o fim da leitura
Sintaxe
VB
Partes
Termo Definição
Preserve Opcional. Modificador usado para preservar os dados na matriz existente quando é
alterado o tamanho apenas da última dimensão.
Comentários
Você pode usar a instrução ReDim para alterar o tamanho de uma ou mais dimensões de
uma matriz que já foi declarada. Se tiver uma matriz grande e não precisar mais de
alguns de seus elementos, ReDim poderá liberar memória reduzindo o tamanho da
matriz. Por outro lado, se sua matriz precisar de mais elementos, ReDim poderá
adicioná-los.
A instrução ReDim destina-se apenas para matrizes. Não é válida em escalares (variáveis
que contêm apenas um único valor), coleções ou estruturas. Observe que, se declarar
uma variável como de tipo Array , a instrução ReDim não terá informações de tipo
suficientes para criar a nova matriz.
Tipos de dados. A instrução ReDim não pode alterar o tipo de dados de uma
variável de matriz ou seus elementos.
Por exemplo, se a matriz tiver apenas uma dimensão, você poderá redimensionar
essa dimensão e ainda preservar todo o conteúdo da matriz, pois você está
alterando a última e única dimensão. No entanto, se a matriz tiver duas ou mais
dimensões, você poderá alterar o tamanho apenas da última dimensão se usar
Preserve .
Propriedades. Você pode usar ReDim em uma propriedade que contém uma
matriz de valores.
Comportamento
Substituição de matriz. ReDim libera a matriz existente e cria uma nova matriz com
a mesma classificação. A nova matriz substitui a matriz liberada na variável de
matriz.
Inicialização sem Preserve. Se você não especificar Preserve , ReDim inicializará os
elementos da nova matriz usando o valor padrão para o tipo de dados.
Exemplo
O exemplo a seguir aumenta o tamanho da última dimensão de uma matriz dinâmica
sem perder dados existentes na matriz e, em seguida, diminui o tamanho com perda
parcial de dados. Por fim, ele diminui o tamanho de volta para seu valor original e
reinicializa todos os elementos da matriz.
VB
A instrução Dim cria uma nova matriz com três dimensões. Cada dimensão é declarada
com um limite de 10, portanto, o índice de matriz para cada dimensão pode variar de 0
a 10. Na discussão a seguir, as três dimensões são conhecidas como camada, linha e
coluna.
O primeiro ReDim cria uma nova matriz que substitui a matriz existente na variável
intArray . ReDim copia todos os elementos da matriz existente para a nova matriz.
Também adiciona mais 10 colunas ao final de cada linha em cada camada e inicializa os
elementos nessas novas colunas com 0 (o valor padrão de Integer , que é o tipo de
elemento da matriz).
O segundo ReDim cria outra nova matriz e copia todos os elementos que se ajustam. No
entanto, cinco colunas são perdidas do final de cada linha em cada camada. Isso não
será um problema se tiver terminado de usar essas colunas. Reduzir o tamanho de uma
matriz grande pode liberar memória que não seja mais necessária.
O terceiro ReDim cria outra nova matriz e remove outras cinco colunas do final de cada
linha em cada camada. Desta vez, ele não copia nenhum elemento existente. Essa
instrução reverte a matriz para seu tamanho original. Como a instrução não inclui o
modificador Preserve , ela define todos os elementos de matriz para seus valores
padrão originais.
Para obter exemplos adicionais, consulte Matrizes.
Confira também
IndexOutOfRangeException
Instrução Const
Instrução Dim
Instrução Erase
Nothing
matrizes
Instrução REM (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
REM comment
' comment
Partes
comment
Comentários
Você pode colocar uma instrução REM sozinha em uma linha ou colocá-la em uma linha
após outra instrução. A instrução REM deve ser a última na linha. Se ela seguir outra
instrução, REM deverá ser separada daquela instrução por um espaço.
Você pode usar aspas simples ( ' ) em vez de REM . Isso é verdade se seu comentário
segue outra instrução na mesma linha ou fica sozinho em uma linha.
7 Observação
Você não pode continuar uma instrução REM usando uma sequência de
continuação de linha ( _ ). Quando um comentário é iniciado, o compilador não
examina os caracteres para um significado especial. Para um comentário de várias
linhas, use outra instrução REM ou um símbolo de comentário ( ' ) em cada linha.
Exemplo
O exemplo a seguir ilustra a instrução REM , que é usada para incluir comentários
explicativos em um programa. Ele também mostra a alternativa de usar o caractere de
aspas simples ( ' ) em vez de REM .
VB
demoStr2 = "Goodbye" ' Comment after a statement using the ' character.
Confira também
Comentários no código
Como: Quebrar e combinar instruções no código
Instrução RemoveHandler
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
Termo Definição
Comentários
As instruções AddHandler e RemoveHandler permitem que você inicie e pare a
manipulação para um evento específico a qualquer momento durante a execução do
programa.
7 Observação
Exemplo
VB
Sub TestEvents()
Obj.CauseSomeEvent()
Obj.CauseSomeEvent()
End Sub
Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
End Sub
Sub CauseSomeEvent()
RaiseEvent Ev_Event()
End Sub
End Class
Confira também
Instrução AddHandler
Alças
Instrução Event
Eventos
Instrução Resume
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sugerimos que você use o tratamento de exceção estruturado em seu código sempre
que possível, em vez de usar o tratamento de exceção não estruturado e as instruções
On Error e Resume . Para obter mais informações, consulte Instrução Try...Catch...Finally.
Sintaxe
VB
Partes
Resume
Next
line
Comentários
7 Observação
Se você usar uma instrução Resume em qualquer lugar diferente de uma rotina de
tratamento de erros, ocorrerá um erro.
A instrução Resume não pode ser usada em nenhum procedimento que contenha uma
instrução Try...Catch...Finally .
Exemplo
Este exemplo usa a instrução Resume para encerrar o tratamento de erros em um
procedimento e, em seguida, retomar a execução com a instrução que causou o erro. O
erro número 55 é gerado para ilustrar o uso da instrução Resume .
VB
Sub ResumeStatementDemo()
Dim x As Integer = 32
Dim y As Integer = 0
Dim z As Integer
Case Else
End Select
End Sub
Requisitos
Namespace:Microsoft.VisualBasic
Assembly: Biblioteca de Tempo de Execução do Visual Basic (em
Microsoft.VisualBasic.dll)
Confira também
Instrução Try...Catch...Finally
Instrução Error
Instrução On Error
Instrução Return (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Retorna o controle para o código que chamou um procedimento Function , Sub , Get ,
Set ou Operator .
Sintaxe
VB
Return
' -or-
Return expression
Parte
expression
Comentários
Em um procedimento Sub ou Set , a instrução Return é equivalente a uma instrução
Exit Sub ou Exit Property e expression não deve ser fornecida.
procedimento para servir como o valor retornado e executar uma instrução Exit
Function ou Exit Property . Em um procedimento Operator , você deve usar Return
expression .
7 Observação
O código em um bloco Finally é executado depois que uma instrução Return em
um bloco Try ou Catch é encontrada, mas antes que essa instrução Return seja
executada. Uma instrução Return não pode ser incluída em um bloco Finally .
Exemplo
O exemplo a seguir usa a instrução Return várias vezes para retornar ao código de
chamada quando o procedimento não precisa fazer mais nada.
VB
Return "Infant"
End Function
Confira também
Instrução Function
Instrução Sub
Instrução Get
Instrução Set
Instrução Operator
Instrução Property
Instrução Exit
Instrução Try...Catch...Finally
Instrução Select...Case (Visual Basic)
Artigo • 28/11/2022 • 4 minutos para o fim da leitura
Sintaxe
VB
[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Partes
Termo Definição
testexpression Obrigatórios. Expressão. Deve ser avaliada como um dos tipos de dados
elementares ( Boolean , Byte , Char , Date , Double , Decimal , Integer , Long ,
Object , SByte , Short , Single , String , UInteger , ULong , e UShort ).
Termo Definição
- expressão1 To expressão2
- [ Is ] operadordecomparaçãoexpressão
- expressão
statements Opcional. Uma ou mais instruções após Case que são executadas se
testexpression corresponder a qualquer cláusula em expressionlist .
elsestatements Opcional. Uma ou mais instruções a seguir Case Else que são executadas se
testexpression não corresponderem a nenhuma cláusula expressionlist em
nenhuma das instruções Case .
Comentários
Se testexpression corresponder a qualquer cláusula Case expressionlist , as instruções
após essa instrução Case serão executadas até a próxima instrução Case , Case Else ou
End Select . Em seguida, o controle passa para a instrução após End Select . Se
testexpression corresponder a uma cláusula expressionlist em mais de uma cláusula
necessário, é uma boa ideia ter uma instrução Case Else em seu constructo Select
Case para lidar com valores imprevistos de testexpression . Se nenhuma cláusula
Você pode usar várias expressões ou intervalos em cada cláusula Case . Por exemplo, a
linha a seguir é válida.
7 Observação
A palavra-chave Is usada nas instruções Case e Case Else não é a mesma que o
Operador Is, usado para comparação de referência de objeto.
7 Observação
Uma instrução Case com várias cláusulas pode exibir o comportamento conhecido
como curto-circuito. O Visual Basic avalia as cláusulas da esquerda para a direita e,
se uma delas produzir uma correspondência com testexpression , as cláusulas
restantes não serão avaliadas. O curto-circuito pode melhorar o desempenho, mas
pode produzir resultados inesperados se você espera que cada expressão
expressionlist seja avaliada. Para obter mais informações sobre curto-circuito,
Construções Select Case podem ser aninhadas. Cada construção Select Case aninhada
deve ter uma instrução correspondente End Select e deve estar completamente
contida em um único bloco Case ou instrução Case Else da construção externa Select
Case na qual está aninhada.
Exemplo
O exemplo a seguir usa uma construção Select Case para gravar uma linha
correspondente ao valor da variável number . A segunda instrução Case contém o valor
que corresponde ao valor atual de number , portanto, a instrução que grava "Entre 6 e 8,
inclusive" é executada.
VB
Case 1 To 5
' The following is the only Case clause that evaluates to True.
Case 6, 7, 8
Case 9 To 10
Debug.WriteLine("Equal to 9 or 10")
Case Else
End Select
Confira também
Choose
Instrução End
Instrução If...Then...Else
Instrução Option Compare
Instrução Exit
Instrução Set (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
[ statements ]
End Set
Partes
attributelist
accessmodifier
Opcional em no máximo uma das instruções Get e Set nesta propriedade. Um dos
seguintes pode ser feito:
Protegido
Friend
Privado
Protected Friend
value
Opcional. Parâmetro que contém o novo valor da propriedade. Se não for fornecida (ou
seja, se a lista de parâmetros não estiver presente ou estiver vazia), um parâmetro
implícito nomeado value será definido. O tipo de dados desse parâmetro implícito é o
tipo de dados da propriedade em que essa Set instrução é declarada.
datatype
Obrigatório se value estiver presente e Option Strict for On . Não pode estar presente
se value não for dado. Tipo de dados do parâmetro value . O tipo de dados
especificado deve ser igual ao tipo de dados da propriedade em que esta instrução Set
é declarada.
statements
End Set
Comentários
Cada propriedade deve ter um procedimento de propriedade Set , a menos que a
propriedade seja marcada ReadOnly . O procedimento Set é usado para definir o valor
da propriedade.
Regras
Níveis de acesso mistos. Se você estiver definindo uma propriedade de
leitura/gravação, opcionalmente poderá especificar um nível de acesso diferente
para o procedimento Get ou o procedimento Set , mas não ambos. Se você fizer
isso, o nível de acesso ao procedimento deverá ser mais restritivo do que o nível
de acesso da propriedade. Por exemplo, se a propriedade for declarada Friend ,
você poderá declarar o procedimento Set Private , mas não Public .
Comportamento
Retorno de um procedimento de propriedade. Quando o procedimento Set
retorna ao código de chamada, a execução continua seguindo a instrução que
forneceu o valor a ser armazenado.
Exemplo
O exemplo a seguir usa a instrução Set para definir o valor de uma propriedade.
VB
Class propClass
Get
Return propVal
End Get
propVal = value
End Set
End Property
End Class
Confira também
Instrução Get
Instrução Property
Instrução Sub
Procedimentos de propriedade
Instrução Stop (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Suspende a execução.
Sintaxe
VB
Stop
Comentários
Você pode colocar instruções Stop em qualquer lugar nos procedimentos para
suspender a execução. O uso da instrução Stop é semelhante à configuração de um
ponto de interrupção no código.
A instrução Stop suspende a execução, mas, ao contrário de End , não fecha nenhum
arquivo ou limpa nenhuma variável, a menos que ela seja encontrada em um arquivo
executável compilado (.exe).
7 Observação
Se a instrução Stop for encontrada no código que está sendo executado fora do
IDE (ambiente de desenvolvimento integrado), o depurador será invocado. Isso é
verdadeiro, independentemente de o código ter sido compilado no modo de
depuração ou de varejo.
Exemplo
Este exemplo usa a instrução Stop para suspender a execução de cada iteração por
meio do loop For...Next .
VB
Dim i As Integer
For i = 1 To 10
Debug.WriteLine(i)
' Stop during each iteration and wait for user to resume.
Stop
Next i
Confira também
Instrução End
Instrução Structure
Artigo • 28/11/2022 • 6 minutos para o fim da leitura
Sintaxe
VB
[ Implements interfacenames ]
[ datamemberdeclarations ]
[ methodmemberdeclarations ]
End Structure
Partes
Termo Definição
- Público
- Protegido
- Amigo
- Particular
- Amigo Protegido
Comentários
A instrução Structure define um tipo de valor composto que você pode personalizar.
Uma estrutura é uma generalização do UDT (tipo definido pelo usuário) de versões
anteriores do Visual Basic. Para obter mais informações, confira Estruturas.
As estruturas dão suporte a muitos dos mesmos recursos que as classes. Por exemplo,
as estruturas podem ter propriedades e procedimentos, podem implementar interfaces
e ter construtores parametrizados. No entanto, há diferenças significativas entre
estruturas e classes em áreas como herança, declarações e uso. Além disso, as classes
são tipos de referência e as estruturas são tipos de valor. Para obter mais informações,
confira Estruturas e classes.
Você só pode usar Structure no namespace ou no nível do módulo. Isso significa que o
contexto de declaração de uma interface precisa ser um arquivo de origem, namespace,
classe, estrutura, módulo ou interface, e não pode ser um procedimento ou bloco. Para
obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.
Regras
Aninhamento. Você pode definir uma estrutura dentro de outra. A estrutura
externa é chamada de estrutura recipiente e a estrutura interna é chamada de
estrutura aninhada. No entanto, você não pode acessar os membros de uma
estrutura aninhada por meio da estrutura recipiente. Em vez disso, você precisa
declarar uma variável do tipo de dados da estrutura aninhada.
Você pode declarar zero ou mais variáveis não compartilhadas ou eventos não
compartilhados e não personalizados em uma estrutura. Você não pode ter apenas
constantes, propriedades e procedimentos, mesmo que alguns deles não sejam
compartilhados.
Herança. Uma estrutura não pode herdar de nenhum tipo diferente de ValueType,
do qual todas as estruturas herdam. Em particular, uma estrutura não pode herdar
de outra.
Você não pode usar a Instrução Inherits em uma definição de estrutura, mesmo
para especificar ValueType.
Comportamento
Nível de acesso. Em uma estrutura, você pode declarar cada membro com o
próprio nível de acesso. Todos os membros da estrutura assumem o padrão de
acesso Público. Observe que, se a estrutura em si tiver um nível de acesso mais
restrito, isso restringirá automaticamente o acesso aos membros dela, mesmo que
você ajuste os níveis de acesso com os modificadores de acesso.
Escopo. Uma estrutura está no escopo em todo o namespace, classe, estrutura ou
módulo que a contém.
Tempo de vida. Uma estrutura em si não tem tempo de vida. Em vez disso, cada
instância dessa estrutura tem um tempo de vida independente de todas as outras
instâncias.
O tempo de vida de uma instância começa quando é criado por uma cláusula New
Operator. Ele termina quando o tempo de vida da variável que a mantém termina.
Se o código dentro de uma estrutura aninhada fizer uma referência não qualificada
a um elemento de programação, o Visual Basic procurará o elemento primeiro na
estrutura aninhada e, em seguida, na estrutura recipiente e assim por diante até o
elemento recipiente mais externo. Para obter mais informações, confira Referências
a elementos declarados.
Exemplo
O exemplo a seguir usa a instrução Structure para definir um conjunto de dados
relacionados para um funcionário. Ele mostra o uso de membros Public , Friend e
Private para refletir a confidencialidade dos itens de dados. Ele também mostra os
' Friend members, accessible from anywhere within the same assembly.
' Private members, accessible only from within the structure itself.
End Sub
Get
End Get
End Property
' Event member, raised when business phone number has changed.
Public Event ChangedWorkPhone(ByVal newPhone As Long)
End Structure
Para obter mais informações sobre como usar Structure s, confira Variável de estrutura.
Confira também
Instrução Class
Instrução Interface
Instrução Module
Instrução Dim
Instrução Const
Instrução Enum
Instrução Event
Instrução Operator
Instrução Property
Estruturas e classes
Instrução Sub (Visual Basic)
Artigo • 07/04/2023 • 6 minutos para o fim da leitura
Sintaxe
VB
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
Partes
attributelist
Partial
accessmodifier
Público
Protegido
Friend
Privado
Amigo Protegido
Particular Protegido
Consulte Níveis de acesso no Visual Basic.
proceduremodifiers
Sobrecargas
Substituições
Substituível
NotOverridable
MustOverride
MustOverride Overrides
NotOverridable Overrides
Shared
Shadows
Async
name
typeparamlist
parameterlist
implementslist
interface.definedname
Parte Descrição
Handles
Opcional. Indica que esse procedimento pode lidar com um ou mais eventos
específicos. Consulte Identificadores.
eventlist
eventvariable.event
Parte Descrição
End Sub
Comentários
Todo código executável deve estar dentro de um procedimento. Use um procedimento
Sub quando não quiser retornar um valor para o código de chamada. Use um
Os procedimentos Sub têm como padrão o acesso público. Você pode ajustar seus
níveis de acesso usando os modificadores de acesso.
implementslist . No entanto, o nome pelo qual uma interface define o Sub (em
VB
Return
End Sub
As instruções Exit Sub e Return causam uma saída imediata de um procedimento Sub .
Qualquer número de instruções Exit Sub e Return podem aparecer em qualquer lugar
no procedimento, e você pode misturar instruções Exit Sub e Return .
Você pode usar a palavra-chave Call ao chamar um procedimento Sub , mas essa
palavra-chave não é recomendada para a maioria dos usos. Para obter mais
informações, confira Instrução Call.
7 Observação
Um procedimento Async retorna para o chamador quando o primeiro objeto
esperado que ainda não está completo é encontrado ou quando é atingido o fim
do procedimento Async , o que ocorrer primeiro.
Você também pode marcar uma Instrução de Função com o modificador Async . Uma
função Async pode ter um tipo de retorno de Task<TResult> ou Task. Um exemplo mais
adiante neste tópico mostra uma função Async que tem um tipo de retorno de
Task<TResult>.
Exemplo 1
O exemplo a seguir usa a instrução Sub para definir o nome, os parâmetros e o código
que formam o corpo de um procedimento Sub .
VB
Exit Sub
End If
Debug.WriteLine(area)
End Sub
Exemplo 2
No exemplo a seguir, DelayAsync é um Async Function que tem um tipo de retorno de
Task<TResult>. DelayAsync tem uma instrução Return que retorna um número inteiro.
Portanto, a declaração da função de Task(Of Integer) deve ter um tipo de retorno de
DelayAsync . Como o tipo de retorno é Task(Of Integer) , a avaliação da expressão
Await em DoSomethingAsync produz um inteiro, como a instrução a seguir demonstra:
VB
Await DoSomethingAsync()
End Sub
End Function
Await Task.Delay(100)
Return 5
End Function
' Output:
' Result: 5
Confira também
Instrução Implements
Instrução Function
Lista de parâmetros
Instrução Dim
Instrução Call
Of
Matrizes de Parâmetros
Como: Usar uma classe genérica
Solucionando problemas de procedimentos
Métodos Parciais
Instrução SyncLock
Artigo • 07/04/2023 • 5 minutos para o fim da leitura
Sintaxe
VB
SyncLock lockobject
[ block ]
End SyncLock
Partes
lockobject
block
End SyncLock
Comentários
A instrução SyncLock garante que vários threads não executam o bloco de instruções ao
mesmo tempo. SyncLock impede que cada thread entre no bloco até que nenhum outro
thread o esteja executando.
O uso mais comum de SyncLock é proteger os dados para que não sejam atualizados
por mais de um thread simultaneamente. Se as instruções que manipulam os dados
precisarem ir para a conclusão sem interrupção, coloque-as dentro de um bloco
SyncLock .
Valor do Objeto de Bloqueio. O valor de lockobject não pode ser Nothing . Você
deve criar o objeto de bloqueio, antes de usá-lo em uma instrução SyncLock .
Comportamento
Mecanismo. Quando um thread acessa a instrução SyncLock , ele avalia a expressão
lockobject e suspende a execução até que ela adquira um bloqueio exclusivo no
Se lockobject for uma variável de instância (não Shared ), o bloqueio impedirá que
um thread em execução na instância atual execute o bloco SyncLock , ao mesmo
tempo que outro thread na mesma instância. Isso protege os dados mantidos pela
instância individual.
Você não deve usar a palavra-chave Me para fornecer um objeto de bloqueio para
dados de instância. Se o código externo à sua classe tiver uma referência a uma
instância da sua classe, ele pode usar essa referência como objeto de bloqueio para um
bloco SyncLock completamente diferente do seu, protegendo dados diferentes. Dessa
forma, sua classe e a outra classe podem impedir uma à outra de executar os blocos
SyncLock não relacionados. Da mesma forma, o bloqueio em uma cadeia de caracteres
pode ser problemático, pois qualquer outro código no processo, que use a mesma
cadeia de caracteres, compartilhará o mesmo bloqueio.
Você também não deve usar o método Me.GetType para fornecer um objeto de
bloqueio para dados compartilhados. Isso ocorre porque GetType sempre retorna o
mesmo objeto Type para determinado nome de classe. O código externo pode chamar
GetType na classe e obter o mesmo objeto de bloqueio que você está usando. Isso
Exemplos
Descrição
O exemplo a seguir mostra uma classe que mantém uma lista simples de mensagens.
Ele retém as mensagens em uma matriz e o último elemento usado dessa matriz em
uma variável. O procedimento addAnotherMessage incrementa o último elemento e
armazena a nova mensagem. Essas duas operações são protegidas pelas instruções
SyncLock e End SyncLock , visto que depois que o último elemento tiver sido
incrementado, a nova mensagem deve ser armazenada antes que qualquer outro thread
incremente o último elemento novamente.
Class simpleMessageList
SyncLock messagesLock
messagesLast += 1
messagesList(messagesLast) = newMessage
End If
End SyncLock
End Sub
End Class
Descrição
O exemplo a seguir usa threads e SyncLock . Contanto que a instrução SyncLock esteja
presente, o bloco de instruções será uma seção crítica e balance nunca se tornará um
número negativo. Você pode comentar as instruções SyncLock e End SyncLock para ver
o efeito de não usar a palavra-chave SyncLock .
Código
VB
Imports System.Threading
Module Module1
Class Account
balance = initial
End Sub
End If
' Comment out the SyncLock and End SyncLock lines to see
SyncLock thisLock
Return amount
Else
Return 0
End If
End SyncLock
End Function
For i As Integer = 0 To 99
Withdraw(r.Next(1, 100))
Next
End Sub
End Class
Sub Main()
For i As Integer = 0 To 9
threads(i) = t
Next
For i As Integer = 0 To 9
threads(i).Start()
Next
End Sub
End Module
Comentários
Confira também
System.Threading.Monitor
System.Threading.Interlocked
Visão geral dos primitivos de sincronização
Instrução Then
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
A palavra-chave Then pode ser usada nestes dois contextos:
Diretiva #If...Then...#Else
Instrução If...Then...Else
Confira também
Palavras-chave
Instrução Throw (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Throw [ expression ]
Parte
expression
Comentários
A instrução Throw gera uma exceção que você pode manipular com código estruturado
de tratamento de exceções ( Try ... Catch ... Finally ) ou código de tratamento de exceção
não estruturado ( On Error GoTo ). Você pode usar a instrução Throw para capturar erros
em seu código porque o Visual Basic move a pilha de chamadas até encontrar o código
de tratamento de exceção apropriado.
Uma instrução Throw sem expressão só pode ser usada em uma instrução Catch . Nesse
caso, a instrução gera novamente a exceção que está sendo tratada pela instrução
Catch .
Exemplo
O código a seguir usa a instrução Throw para gerar uma exceção:
VB
' Throws a new exception.
Confira também
Instrução Try...Catch...Finally
Instrução On Error
Instrução Try...Catch...Finally (Visual
Basic)
Artigo • 07/04/2023 • 14 minutos para o fim da leitura
Oferece uma forma de lidar com alguns ou com todos os possíveis erros que podem
ocorrer em um determinado bloco de código e, ainda assim, executar o código.
Sintaxe
VB
Try
[ tryStatements ]
[ Exit Try ]
[ catchStatements ]
[ Exit Try ] ]
[ Catch ... ]
[ Finally
[ finallyStatements ] ]
End Try
Partes
Termo Definição
tryStatements Opcional. Instruções em que um erro pode ocorrer. Pode ser uma instrução
composta.
When Opcional. Uma instrução Catch com uma cláusula When captura exceções
somente quando expression é avaliada como True . Uma cláusula When é
aplicada somente depois de verificar o tipo da exceção e expression pode
se referir ao identificador que representa a exceção.
catchStatements Opcional. Instruções para lidar com erros que ocorrem no bloco Try
associado. Pode ser uma instrução composta.
Comentários
Se você espera que uma exceção específica possa ocorrer durante uma determinada
seção de código, coloque o código em um bloco Try e use um bloco Catch para
manter o controle e manipular a exceção se ocorrer.
A instrução Try…Catch consiste em um bloco Try seguido por uma ou mais cláusulas
Catch , que especificam os manipuladores para diferentes exceções. Quando uma
exceção é lançada em um bloco Try , o Visual Basic procura a instrução Catch que
manipula a exceção. Se uma instrução Catch correspondente não for encontrada, o
Visual Basic examinará o método que chamou o método atual e assim por diante na
pilha de chamadas. Se nenhum bloco Catch for encontrado, o Visual Basic exibirá uma
mensagem de exceção sem tratamento para o usuário e interromperá a execução do
programa.
Você pode usar mais de uma instrução Catch em uma instrução Try…Catch . Se você
fizer isso, a ordem das cláusulas Catch será significativa porque elas são examinadas em
ordem. Capture as exceções mais específicas antes das menos específicas.
As condições da instrução Catch a seguir são as menos específicas e vão capturar todas
as exceções derivadas da classe Exception. Normalmente, você deve usar uma dessas
variações como o último bloco Catch da estrutura Try...Catch...Finally , depois de
capturar todas as exceções específicas esperadas. O fluxo de controle nunca pode
alcançar um bloco Catch que siga qualquer uma dessas variações.
As variáveis locais de um bloco Try não estão disponíveis em um bloco Catch porque
são blocos separados. Se você quiser usar uma variável em mais de um bloco, declare a
variável fora da estrutura Try...Catch...Finally .
Dica
Bloco Finally
Se você tiver uma ou mais instruções que precisam ser executadas antes que você saia
da estado Try , use um bloco Finally . O controle passa para o bloco Finally pouco
antes de ele sair da estrutura Try…Catch . Isso é verdadeiro mesmo se ocorrer uma
exceção em qualquer lugar dentro da estrutura Try .
Um bloco Finally é útil para executar qualquer código que precise ser executado
mesmo se houver uma exceção. O controle é passado para o bloco Finally ,
independentemente de como o bloco Try...Catch sai.
O código em um bloco Finally é executado mesmo que seu código encontre uma
instrução Return em um bloco Try ou Catch . O controle não passa de um bloco Try
ou Catch para o bloco Finally correspondente nos seguintes casos:
Se uma instrução Try não contiver pelo menos um bloco Catch , ela deverá conter um
bloco Finally .
Dica
Argumento de exceção
O argumento exception do bloco Catch é uma instância da classe Exception ou uma
classe que deriva da classe Exception . A instância da classe Exception corresponde ao
erro que ocorreu no bloco Try .
Se um bloco Catch não for tratado corretamente, a exceção poderá não ser
relatada corretamente aos usuários.
Nem sempre você precisa de uma instrução Try…Catch para verificar se há uma
condição que provavelmente ocorrerá. O exemplo a seguir verifica se um arquivo existe
antes de tentar abri-lo. Isso reduz a necessidade de capturar uma exceção gerada pelo
método OpenText.
VB
Else
Dim sr As System.IO.StreamReader =
System.IO.File.OpenText(filePath)
Console.Write(sr.ReadToEnd)
sr.Close()
End If
End Sub
Métodos assíncronos
Se marcar um método com o modificador Async, você poderá usar o operador Await no
método. Uma instrução com o operador Await suspende a execução do método até
que a tarefa aguardada seja concluída. A tarefa representa um trabalho em andamento.
Quando a tarefa que está associada ao operador Await for concluída, a execução será
retomada no mesmo método. Para obter mais informações, confira Fluxo de controle
em programas assíncronos.
Uma tarefa retornada por um método Async pode terminar em um estado com falha,
indicando que ela foi concluída devido a uma exceção sem tratamento. Uma tarefa
também pode terminar em um estado cancelado, o que resulta na expulsão de
OperationCanceledException da expressão await. Para capturar qualquer tipo de
exceção, coloque a expressão Await associada à tarefa em um bloco Try e capture a
exceção no bloco Catch . Um exemplo é fornecido posteriormente neste tópico.
Uma tarefa pode estar em um estado com falha porque várias exceções foram
responsáveis pela falha. Por exemplo, a tarefa pode ser o resultado de uma chamada
para Task.WhenAll. Quando você espera uma tarefa, a exceção capturada é somente
uma das exceções e não é possível prever qual exceção será capturada. Um exemplo é
fornecido posteriormente neste tópico.
Uma expressão Await não pode estar dentro de um bloco Catch ou Finally .
Iterators
Uma função iteradora ou um acessador Get realiza uma iteração personalizada em uma
coleção. Um iterador usa uma instrução Yield para retornar um elemento da coleção por
vez. Você chama uma função iteradora usando uma instrução For Each...Next.
Uma instrução Yield pode estar dentro de um bloco Try . Um bloco Try que contém
uma instrução Yield pode ter blocos Catch e pode ter um bloco Finally . Confira a
seção "Experimentar blocos no Visual Basic" de Iteradores para obter um exemplo.
Uma instrução Yield não pode estar dentro de um bloco Catch ou bloco Finally .
Se o corpo For Each (fora da função iteradora) lançar uma exceção, um bloco Catch na
função iteradora não será executado, mas um bloco Finally na função iteradora será
executado. Um bloco Catch dentro de uma função iteradora captura apenas exceções
que ocorrem dentro da função iteradora.
Try
Process.Start("http://www.microsoft.com")
Catch ex As Exception
Exemplos
A estrutura de Try...Catch...Finally
O exemplo a seguir ilustra a estrutura da instrução Try...Catch...Finally .
VB
Dim x As Integer = 5
Dim y As Integer = 0
Try
x = x \ y
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
End Try
End Sub
O exemplo inclui instruções Catch para diversos tipos de exceções, ordenadas da mais
específica para a mais geral.
VB
Try
CreateException()
Catch ex As System.IO.IOException
Catch ex As NullReferenceException
Catch ex As Exception
End Try
End Sub
End Sub
VB
Dim i As Integer = 5
Try
Console.WriteLine("First handler")
Console.WriteLine("Second handler")
Catch When i = 5
Console.WriteLine("Third handler")
End Try
End Sub
a exceção original. O bloco Catch externo relata a própria exceção e a exceção interna.
VB
Try
Try
Dim sb As System.Text.StringBuilder
sb.Append("text")
Catch ex As Exception
End Try
Console.WriteLine(ex2.StackTrace)
Console.WriteLine(ex2.StackTrace)
End If
End Try
End Sub
VB
Try
Catch ex As Exception
End Try
theTask.Exception.Message)
theTask.Exception.InnerException.Message)
End If
End Function
Await Task.Delay(100)
Return "Done"
End Function
Cada uma das três tarefas causa uma exceção. O bloco Catch itera por meio de
exceções, que são encontradas na propriedade Exception.InnerExceptions da tarefa
retornada por Task.WhenAll .
VB
Try
Await allTasks
Catch ex As Exception
Next
End Try
End Function
Await Task.Delay(100)
End Function
' Output:
Confira também
Err
Exception
Instrução Exit
Instrução On Error
Melhores práticas para usar snippets de código
Tratamento de exceção
Instrução Throw
Instrução Using (Visual Basic)
Artigo • 22/02/2023 • 4 minutos para o fim da leitura
Sintaxe
VB
[ statements ]
End Using
Partes
Termo Definição
-ou-
arglist Opcional. Lista de argumentos que você está passando para o construtor
para criar uma instância de resourcetype . Consulte a Lista de parâmetros.
Comentários
Às vezes, o código requer um recurso não gerenciado, como um identificador de
arquivo, um wrapper COM ou uma conexão SQL. Um bloco Using garante o descarte de
um ou mais desses recursos quando o código for concluído com eles. Isso os
disponibiliza para que outros códigos sejam usados.
Aquisição significa criar uma variável e inicializá-la para fazer referência ao recurso
do sistema. A instrução Using pode adquirir um ou mais recursos, ou você pode
adquirir exatamente um recurso antes de inserir o bloco e fornecê-lo à instrução
Using . Se você fornecer resourceexpression , deverá adquirir o recurso antes de
Uso significa acessar os recursos e realizar ações com eles. As instruções entre
Using e End Using representam o uso dos recursos.
Comportamento
Um bloco Using se comporta como uma construção Try ... Finally na qual Try usa os
recursos e Finally os descarta. Por isso, o bloco Using garante o descarte dos recursos,
independentemente de como você sai dele. Isso é verdade mesmo no caso de uma
exceção não tratada, exceto para StackOverflowException.
Se resourcename for Nothing , nenhuma chamada para Dispose será feita e nenhuma
exceção será lançada.
VB
End Using
Try
Finally
resource.Dispose()
End If
End Try
7 Observação
O código dentro do bloco Using não deve atribuir o objeto resourcename a outra
variável. Quando você sai do bloco Using , o recurso é descartado e a outra variável
não pode acessar o recurso ao qual ele aponta.
Exemplo
O exemplo a seguir cria um arquivo chamado log.txt e grava duas linhas de texto no
arquivo. O exemplo também lê esse mesmo arquivo e exibe as linhas de texto:
VB
End Using
End Sub
line = reader.ReadLine()
Console.WriteLine(line)
line = reader.ReadLine()
Loop
End Using
End Sub
Confira também
IDisposable
Instrução Try...Catch...Finally
Como descartar um recurso do sistema
Instrução While...End While (Visual
Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Executa uma série de instruções desde que a condição determinada seja True .
Sintaxe
VB
While condition
[ statements ]
[ Continue While ]
[ statements ]
[ Exit While ]
[ statements ]
End While
Partes
Termo Definição
statements Opcional. Uma ou mais instruções após While , que são executadas sempre que
condition é True .
Comentários
Use uma estrutura While...End While quando quiser repetir um conjunto de instruções
um número indefinido de vezes, desde que uma condição permaneça True . Se você
deseja mais flexibilidade com o local de teste da condição ou o resultado do teste,
talvez prefira a Instrução Do...Loop. Se você quiser repetir as instruções um número
definido de vezes, a instrução For...Next geralmente é uma opção melhor.
7 Observação
Se condition for True , todos os statements serão executados até que a instrução End
While seja encontrada. Em seguida, o controle retorna para a instrução While e
condition é verificado novamente. Se condition ainda for True , o processo é repetido.
Se for False , o controle passa para a instrução que segue a instrução End While .
A instrução While sempre verifica a condição antes de iniciar o loop. O looping continua
enquanto a condição permanece True . Se condition for False quando você entrar no
loop pela primeira vez, ele não será executado.
A condition geralmente resulta de uma comparação de dois valores, mas pode ser
qualquer expressão avaliada como um valor de Tipo de dados booliano ( True ou
False ). Essa expressão pode incluir um valor de outro tipo de dados, como um tipo
Você pode aninhar While loops colocando um loop dentro de outro. Você também
pode aninhar diferentes tipos de estruturas de controle entre eles. Para obter mais
informações, confira Estruturas de controle aninhadas.
Exit While
A instrução Exit While pode fornecer outra maneira de sair de um loop While . Exit
While transfere imediatamente o controle imediatamente para a instrução que segue
End While .
Exit While geralmente é usado após avaliação de alguma condição (por exemplo, em
uma estrutura If...Then...Else ). Talvez você queira sair de um loop se detectar uma
condição que torna desnecessário ou impossível continuar iterando, como um valor
errôneo ou uma solicitação de encerramento. Você pode usar Exit While ao testar uma
condição que pode causar um loop sem fim, que pode ser executado várias vezes ou até
mesmo infinitamente. Você pode usar Exit While para ignorar o loop.
Você pode colocar qualquer número de instruções Exit While em qualquer lugar no
loop While .
Quando usado em loops While aninhados, Exit While transfere o controle para fora do
loop mais interno e para dentro do próximo nível mais alto de aninhamento.
A instrução Continue While transfere o controle para a próxima iteração do loop. Para
obter mais informações, confira Instrução Continue.
Exemplo 1
No exemplo a seguir, as instruções no loop continuam a ser executadas até que a
variável index seja maior que 10.
VB
index += 1
End While
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Exemplo 2
O exemplo a seguir ilustra o uso das instruções Continue While e Exit While .
VB
index += 1
Continue While
End If
If index = 10 Then
Exit While
End If
End While
Debug.WriteLine("")
' Output: 1 2 3 4 9 10
Exemplo 3
O exemplo a seguir lê todas as linhas em um arquivo de texto. O método OpenText abre
o arquivo e retorna um StreamReader que lê os caracteres. Na condição While , o
método Peek do StreamReader determina se o arquivo contém caracteres adicionais.
VB
Else
Dim sr As System.IO.StreamReader =
System.IO.File.OpenText(textFilePath)
Debug.WriteLine(sr.ReadLine())
End While
sr.Close()
End If
End Sub
Confira também
Estruturas de Loop
Instrução Do...Loop
Instrução For...Next
Tipo de dados booliano
Estruturas de Controle Aninhadas
Instrução Exit
Instrução Continue
Instrução With...End With (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
With objectExpression
[ statements ]
End With
Partes
Termo Definição
objectExpression Obrigatórios. Uma expressão que avalia como um objeto. A expressão pode
ser arbitrariamente complexa e é avaliada apenas uma vez. A expressão pode
ser avaliada como qualquer tipo de dados, inclusive tipos elementares.
statements Opcional. Uma ou mais instruções entre With e End With que podem fazer
referência a membros de um objeto que é gerado pela avaliação de
objectExpression .
Comentários
Usando With...End With , você pode executar uma série de instruções em um objeto
especificado sem especificar o nome do objeto várias vezes. Dentro de um bloco de
instrução With , você pode especificar um membro do objeto que começa com um
ponto, como se o objeto de instrução With o precedesse.
Por exemplo, para alterar várias propriedades diferentes em um único objeto, coloque
as instruções de atribuição de propriedade dentro do bloco With...End With , fazendo
referência ao objeto apenas uma vez em vez de uma vez para cada atribuição de
propriedade.
Se seu código acessar o mesmo objeto em várias instruções, você ganhará os seguintes
benefícios usando a instrução With :
Você não precisa avaliar várias vezes uma expressão complexa ou atribuir o
resultado a uma variável temporária para fazer referência a seus membros várias
vezes.
Você torna seu código mais legível eliminando expressões aplicáveis repetitivas.
objectExpression é avaliada uma vez, ao entrar no bloco. Você não pode reatribuir
Você pode colocar uma instrução With...End With dentro de outra. As instruções
With...End With aninhadas podem ser confusas se os objetos que estão sendo
referidos não são claros em termos de contexto. Você deve fornecer uma referência
totalmente qualificada a um objeto que esteja em um bloco With externo quando o
objeto é referenciado dentro de um bloco With interno.
A menos que o bloco contenha um loop, as instruções são executadas somente uma
vez. Você pode aninhar diferentes tipos de estruturas de controle. Para obter mais
informações, confira Estruturas de controle aninhadas.
7 Observação
Exemplo 1
No exemplo a seguir, cada bloco With executa uma série de instruções em um único
objeto.
VB
With theCustomer
.URL = "http://www.cohovineyard.com/"
.City = "Redmond"
End With
With theCustomer.Comments
.Add("First comment.")
.Add("Second comment.")
End With
End Sub
End Class
Exemplo 2
O exemplo a seguir aninha instruções With…End With . Na instrução With aninhada, a
sintaxe faz referência ao objeto interno.
VB
With theWindow
With .InfoLabel
.Foreground = Brushes.DarkSeaGreen
.Background = Brushes.LightYellow
End With
.Show()
End With
Confira também
List<T>
Estruturas de Controle Aninhadas
Inicializadores de objeto: tipos nomeados e anônimos
Tipos anônimos
Instrução Yield (Visual Basic)
Artigo • 07/04/2023 • 4 minutos para o fim da leitura
Envia o próximo elemento de uma coleção para uma instrução For Each...Next .
Sintaxe
VB
Yield expression
Parâmetros
Termo Definição
Comentários
A instrução Yield retorna um elemento de uma coleção por vez. A instrução Yield é
incluída em uma função iteradora ou acessador Get , que executa iterações
personalizadas em uma coleção.
Você consome uma função iteradora usando um Instrução For Each...Next ou uma
consulta LINQ. Cada iteração do loop For Each chama a função iteradora. Quando uma
instrução Yield é alcançada na função iteradora, expression é retornado e o local atual
no código é mantido. A execução será reiniciada desse local na próxima vez que a
função iteradora for chamada.
Uma conversão implícita deve existir do tipo de expression na instrução Yield para o
tipo de retorno do iterador.
Você pode usar uma instrução Exit Function ou Return para terminar a iteração.
"Yield" não é uma palavra reservada e tem um significado especial somente quando é
usado em uma função Iterator ou acessador Get .
Para obter mais informações sobre funções iteradoras e acessadores Get , confira
Iteradores.
Uma função iteradora pode ser uma função anônima. Para obter mais informações,
consulte Iteradores.
Tratamento de exceção
Uma instrução Yield pode estar dentro de um bloco Try de uma Instrução
Try...Catch...Finally. Um bloco Try que tem uma instrução Yield pode ter blocos Catch
e pode ter um bloco Finally .
Uma instrução Yield não pode estar dentro de um bloco Catch ou bloco Finally .
Se o corpo For Each (fora da função iteradora) lançar uma exceção, um bloco Catch na
função iteradora não será executado, mas um bloco Finally na função iteradora será
executado. Um bloco Catch dentro de uma função iteradora captura apenas exceções
que ocorrem dentro da função iteradora.
Implementação Técnica
O código a seguir retorna um IEnumerable (Of String) de uma função iteradora e, em
seguida, itera pelos elementos do IEnumerable (Of String) .
VB
Dim elements As IEnumerable(Of String) = MyIteratorFunction()
Next
Em uma iteração do loop For Each , o método MoveNext é chamado para elements .
Essa chamada executará o corpo de MyIteratorFunction até que a próxima instrução
Yield seja atingida. A instrução Yield retorna uma expressão que determina não
apenas o valor da variável element para consumo pelo corpo do loop, mas também a
propriedade Current dos elementos, que é um IEnumerable (Of String) .
Exemplo 1
O exemplo a seguir tem uma instrução Yield que está dentro de um loop For…Next.
Cada iteração do corpo da instrução For Each em Main cria uma chamada para a
Power função de iterador. Cada chamada à função iteradora prossegue para a próxima
execução da instrução Yield que ocorre durante a próxima iteração do loop For…Next .
VB
Sub Main()
Next
Console.ReadKey()
End Sub
As System.Collections.Generic.IEnumerable(Of Integer)
Dim result = 1
Yield result
Next
End Function
Exemplo 2
O exemplo a seguir demonstra um acessador Get que é um iterador. A declaração de
propriedade inclui um modificador Iterator .
VB
Sub Main()
With theGalaxy
End With
Next
Console.ReadKey()
End Sub
As System.Collections.Generic.IEnumerable(Of Galaxy)
Get
End Get
End Property
End Class
End Class
Confira também
Instruções
Cláusulas (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Nesta seção
Alias
As
Alças
Implementações
In
Into
Of
Seções relacionadas
Referência da linguagem Visual Basic
Cláusula Alias (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
A palavra-chave Alias pode ser usada neste contexto:
Instrução Declare
VB
Sub GetUser()
MsgBox(userName)
End Sub
Confira também
Palavras-chave
Cláusula As (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
A palavra-chave As pode ser usada nestes dois contextos:
Cláusula Aggregate
Instrução Class
Instrução Const
Instrução Declare
Instrução Delegate
Instrução Dim
Instrução Enum
Instrução Event
Instruções For...Next
Cláusula From
Instrução Function
Instrução Interface
Instrução Operator
Instrução Property
Instrução Structure
Instrução Sub
Instruções Try...Catch...Finally
Confira também
Como criar uma nova variável
Data Types
Declaração de Variável
Lista de Tipos
Tipos genéricos no Visual Basic
Palavras-chave
Cláusula Handles (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
proceduredeclaration A declaração de procedimento Sub para o procedimento que
tratará o evento.
eventlist Lista dos eventos para proceduredeclaration tratar, separados por vírgulas.
Os eventos devem ser gerados pela classe base da classe atual ou por um objeto
declarado usando a palavra-chave WithEvents .
Comentários
Use a palavra-chave Handles no final de uma declaração de procedimento para fazer
com que ela lide com eventos gerados por uma variável de objeto declarada usando a
palavra-chave WithEvents . A palavra-chave Handles também pode ser usada em uma
classe derivada para manipular eventos de uma classe base.
Exemplo 1
VB
Sub CauseSomeEvent()
RaiseEvent Ev_Event()
End Sub
End Class
End Sub
' class to test the Ev_Event event and the event handler.
Obj.CauseSomeEvent()
End Sub
End Class
O exemplo a seguir demonstra como uma classe derivada pode usar a instrução
Handles para manipular um evento de uma classe base.
VB
Event Ev1()
End Class
Class DerivedClass
Inherits BaseClass
End Sub
End Class
Exemplo 2
O exemplo a seguir contém dois manipuladores de eventos de botão para um projeto
do Aplicativo WPF.
VB
Private Sub Button1_Click(sender As System.Object, e As
System.Windows.RoutedEventArgs) Handles Button1.Click
End Sub
End Sub
Exemplo 3
O exemplo a seguir é equivalente ao exemplo anterior. A eventlist na cláusula Handles
contém os eventos para ambos os botões.
VB
End Sub
Confira também
WithEvents
Instrução AddHandler
Instrução RemoveHandler
Instrução Event
Instrução RaiseEvent
Eventos
Cláusula Implements (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
A palavra-chave Implements não é a mesma que a Instrução Implements. Você usa a
instrução Implements para especificar que uma classe ou estrutura implementa uma ou
mais interfaces e, em seguida, para cada membro, você usa a palavra-chave Implements
para especificar qual interface e qual membro ela implementa.
Se uma classe ou estrutura implementar uma interface, ela deverá incluir a instrução
Implements imediatamente após a Instrução Class ou a Instrução Structure e deve
Reimplementação
Em uma classe derivada, você pode reimplementar um membro de interface que a
classe base já implementou. Isso é diferente de substituir o membro da classe base nos
seguintes aspectos:
O membro da classe base não precisa ser Substituível para ser reimplementado.
Você pode reimplementar o membro com outro nome.
Instrução Event
Instrução Function
Instrução Property
Instrução Sub
Confira também
Instrução Implements
Instrução Interface
Instrução Class
Instrução Structure
Cláusula In (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Especifica o grupo que a variável de loop deve percorrer em um loop For Each ou
especifica a coleção a ser consultada em uma cláusula From , Join ou Group Join .
Comentários
A palavra-chave In pode ser usada nos seguintes contextos:
Cláusula From
Cláusula Join
Confira também
Palavras-chave
Cláusula Into (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Comentários
A palavra-chave Each é usada nos seguintes contextos:
Cláusula Aggregate
Cláusula Group By
Confira também
Palavras-chave
Cláusula Of (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Introduz uma cláusula Of , que identifica um parâmetro de tipo em uma classe, uma
estrutura, uma interface, um delegado ou um procedimento genérico. Para obter
informações sobre tipos genéricos, confira Tipos Genéricos no Visual Basic.
Uso da palavra-chave
O exemplo de código a seguir usa a palavra-chave Of para definir a estrutura de tópicos
de uma classe que usa dois parâmetros de tipo. Ele restringe o parâmetro keyType pela
interface IComparable, o que significa que o código de consumo deve fornecer um
argumento de tipo que implementa IComparable. Isso é necessário para que o
procedimento add possa chamar o método IComparable.CompareTo. Para obter mais
informações sobre restrições, consulte Tipo de lista.
VB
Dim dk As keyType
If k.CompareTo(dk) = 0 Then
End If
End Sub
End Function
End Class
O exemplo de código a seguir cria um objeto que contém String entradas e associa
uma chave Integer a cada uma delas. Integer implementa IComparable e, portanto,
satisfaz a restrição em keyType .
VB
Instrução Class
Instrução Delegate
Instrução Function
Instrução Interface
Instrução Structure
Instrução Sub
Confira também
IComparable
Lista de Tipos
Tipos genéricos no Visual Basic
In
Saída
Contextos de declaração e níveis de
acesso padrão (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Este tópico descreve quais tipos do Visual Basic podem ser declarados dentro de quais
outros tipos e qual o nível padrão deles, caso não sejam especificados.
Nível do módulo – dentro de uma classe, estrutura, módulo ou interface, mas não
dentro de um procedimento ou bloco
Confira também
Friend
Privado
Público
Lista de atributos (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
Partes
Parte Descrição
Comentários
Você pode aplicar um ou mais atributos a quase qualquer elemento de programação
(tipos, procedimentos, propriedades e assim por diante). Os atributos aparecem nos
metadados do assembly e podem ajudar você a anotar o código ou especificar como
usar um determinado elemento de programação. Você pode aplicar atributos definidos
pelo Visual Basic e pelo .NET Framework e pode definir os próprios atributos.
Para obter mais informações sobre quando usar atributos, confira a visão geral de
Atributos. Para obter informações sobre nomes de atributos, confira Nomes de
Elementos Declarados.
Regras
Posicionamento. Você pode aplicar atributos à maioria dos elementos de
programação declarados. Para aplicar um ou mais atributos, você coloca um bloco
de atributo no início da declaração do elemento. Cada entrada na lista de atributos
especifica um atributo que você deseja aplicar e o modificador e os argumentos
que você está usando para essa invocação do atributo.
Exemplo
O exemplo a seguir aplica o atributo DllImportAttribute a uma definição de esqueleto
de um procedimento Function .
VB
<DllImportAttribute("kernel32.dll", EntryPoint:="MoveFileW",
SetLastError:=True, CharSet:=CharSet.Unicode,
ExactSpelling:=True,
CallingConvention:=CallingConvention.StdCall)>
' This function copies a file from the path src to the path dst.
' Leave this function empty. The DLLImport attribute forces calls
End Function
Confira também
Assembly
Palavra-chave <Module>
Visão geral de atributos
Como: Quebrar e combinar instruções no código
Lista de parâmetros (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
Partes
attributelist
Opcional. Lista de atributos que se aplicam a esse parâmetro. Você deve colocar a Lista
de atributos entre colchetes angulares (" < " e " > ").
Optional
ByVal
ByRef
ParamArray
parametername
Necessário se Option Strict for On . Tipo de dados da variável local que representa o
parâmetro.
defaultvalue
Comentários
Os parâmetros são cercados por parênteses e separados por vírgulas. Um parâmetro
pode ser declarado com qualquer tipo de dados. Se você não especificar parametertype ,
o padrão será Object .
O argumento que o código de chamada passa para cada parâmetro é um ponteiro para
um elemento subjacente no código de chamada. Se esse elemento for invariável (uma
constante, literal, enumeração ou expressão), é impossível para qualquer código alterá-
lo. Se ele for um elemento variável (uma variável declarada, campo, propriedade,
elemento de matriz ou elemento de estrutura), o código de chamada poderá alterá-lo.
Para obter mais informações, confira Diferenças entre argumentos modificáveis e não
modificáveis.
Regras
Parênteses. Se você especificar uma lista de parâmetros, deverá colocá-la entre
parênteses. Se não houver parâmetros, você ainda poderá usar parênteses que
incluem uma lista vazia. Isso melhora a legibilidade do código esclarecendo que o
elemento é um procedimento.
Exemplo
O exemplo a seguir mostra um procedimento Function que define dois parâmetros.
VB
End Function
Confira também
DllImportAttribute
Instrução Function
Instrução Sub
Instrução Declare
Instrução Structure
Instrução Option Strict
Visão geral de atributos
Como: Quebrar e combinar instruções no código
Lista de tipos (Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
Partes
Termo Definição
genericmodifier Opcional. Pode ser usado somente em interfaces genéricas e delegados. Você
pode declarar um tipo covariante usando a palavra-chave Out ou
contravariante usando a palavra-chave In. Consulte Covariância e
contravariância.
constraintlist Opcional. Lista de requisitos que restringem o tipo de dados que pode ser
fornecido para typename . Se você tiver várias restrições, coloque-as entre
chaves ( { } ) e separe-as com vírgulas. Você deve introduzir a lista de
restrições com a palavra-chave As. Você usa As apenas uma vez, no início da
lista.
Comentários
Cada elemento de programação genérico deve ter pelo menos um parâmetro de tipo.
Um parâmetro de tipo é um espaço reservado para um tipo específico (um elemento
construído) que o código do cliente especifica quando cria uma instância do tipo
genérico. Você pode definir uma classe genérica, estrutura, interface, procedimento ou
delegado.
Para obter mais informações sobre quando definir um tipo genérico, confira Tipos
Genéricos no Visual Basic. Para obter mais informações sobre nomes de parâmetro de
tipo, confira Nomes de Elementos Declarados.
Regras
Parênteses. Se você fornecer uma lista de parâmetros de tipo, deverá colocá-la
entre parênteses e apresentar a lista com a palavra-chave Of. Você usa Of apenas
uma vez, no início da lista.
Comportamento
Substituição do tempo de compilação. Ao criar um tipo construído por meio de
um elemento de programação genérico, você fornece um tipo definido para cada
parâmetro de tipo. O compilador do Visual Basic substitui o tipo fornecido para
cada ocorrência de typename dentro do elemento genérico.
Exemplo 1
O exemplo a seguir mostra uma definição de esqueleto de uma classe de dicionário
genérica, incluindo uma função de esqueleto para adicionar uma nova entrada ao
dicionário.
VB
Dim dk As keyType
If kt.CompareTo(dk) = 0 Then
End If
End Sub
End Class
Exemplo 2
Como dictionary é genérico, o código que o usa pode criar uma variedade de objetos
com base nele, cada um com a mesma funcionalidade, mas atuando em um tipo de
dados distinto. O exemplo a seguir mostra uma linha de código que cria um objeto
dictionary com entradas String e chaves Integer .
VB
Exemplo 3
O exemplo a seguir mostra a definição de esqueleto equivalente gerada pelo exemplo
anterior.
VB
Dim dk As Integer
If kt.CompareTo(dk) = 0 Then
End If
End Sub
End Class
Confira também
Of
Novo Operador
Níveis de acesso no Visual Basic
Tipo de dados Object
Instrução Function
Instrução Structure
Instrução Sub
Como: Usar uma classe genérica
Covariância e Contravariância
In
Saída
marcações XML recomendadas para
comentários da documentação (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
7 Observação
O compilador processará qualquer marca que seja um XML válido. As seguintes marcas
fornecem as funcionalidades geralmente usadas na documentação do usuário.
<c>
<code>
<example>
<exception>1
<include>1
<list>
<para>
<param>1
<paramref>
<permission>1
<remarks>
<returns>
<see>1
<seealso>1
<summary>
<typeparam>1
<value>
(1 O compilador verifica a sintaxe.)
7 Observação
Confira também
Documentando o código com XML
-doc
Como criar documentação XML
<c> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<c>text</c>
Parâmetros
Parâmetro Descrição
Comentários
A marca <c> oferece uma forma de indicar que o texto em uma descrição deve ser
marcado como código. Use <code> para indicar várias linhas como código.
Exemplo
Este exemplo usa a marca <c> na seção resumo para indicar que Counter é código.
VB
''' <summary>
''' </summary>
counterValue = 0
End Sub
''' <summary>
''' </summary>
Get
counterValue += 1
Return counterValue
End Get
End Property
Confira também
Marcações de Comentário XML
<code> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<code>content</code>
Parâmetros
content
Comentários
Use a marca <code> para indicar várias linhas como código. Use <c> para indicar que o
texto dentro uma descrição deve ser marcado como código.
Exemplo
Este exemplo usa a marca <code> para incluir o código de exemplo para usar o campo
ID .
VB
''' <remarks>
''' <example> This sample shows how to set the <c>ID</c> field.
''' <code>
''' </code>
''' </example>
''' </remarks>
Public ID As Integer
End Class
Confira também
Marcações de Comentário XML
<example> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<example>description</example>
Parâmetros
description
Comentários
A marca <example> permite especificar um exemplo de como usar um método ou outro
membro da biblioteca. Normalmente, isso envolve o uso da marca <code>.
Exemplo
Este exemplo usa a marca <example> para incluir um exemplo de uso do campo ID .
VB
''' <remarks>
''' <example> This sample shows how to set the <c>ID</c> field.
''' <code>
''' </code>
''' </example>
''' </remarks>
Public ID As Integer
End Class
Confira também
Marcações de Comentário XML
<exception> (Visual Basic)
Artigo • 06/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<exception cref="member">description</exception>
Parâmetros
member
Uma referência a uma exceção que está disponível no ambiente de compilação atual. O
compilador verifica se a exceção apresentada existe e move o member para o nome de
elemento canônico no XML de saída. member deve ser exibido entre aspas duplas (" ").
description
Uma descrição.
Comentários
Use a marca <exception> para especificar quais exceções podem ser geradas. Essa
marcação é aplicada a uma definição de método.
Exemplo
Este exemplo usa a marca <exception> para descrever uma exceção que a função
IntDivide pode gerar.
VB
''' </exception>
) As Integer
End Function
Confira também
Marcações de Comentário XML
<include> (Visual Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Sintaxe
XML
Parâmetros
filename
tagpath
Obrigatórios. O caminho das marcas em filename que leva à marca name . Coloque o
caminho entre aspas duplas (" ").
name
id
Comentários
Use a marca <include> para consultar comentários em outro arquivo que descreve os
tipos e membros em seu código-fonte. Essa é uma alternativa para inserir comentários
de documentação diretamente em seu arquivo de código-fonte.
A marca <include> usa a recomendação da linguagem XPath do W3C versão 1.0. Para
obter mais informações sobre formas de personalizar o uso do seu <include> , confira
https://www.w3.org/TR/xpath .
Exemplo
Este exemplo usa a marca <include> para importar comentários da documentação do
membro de um arquivo chamado commentFile.xml .
VB
End Sub
End Sub
XML
<Docs>
<Members name="Open">
<summary>Opens a file.</summary>
</Members>
<Members name="Close">
<summary>Closes a file.</summary>
</Members>
</Docs>
Confira também
Marcações de Comentário XML
<list> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<list type="type">
<listheader>
<term>term</term>
<description>description</description>
</listheader>
<item>
<term>term</term>
<description>description</description>
</item>
</list>
Parâmetros
type
O tipo da lista. Deve ser um "marcador" para uma lista com marcadores, "número" para
uma lista numerada ou "tabela" para uma tabela de duas colunas.
term
Usado somente quando type é "tabela". Um termo a ser definido, que é definido na
marca de descrição.
description
Comentários
O bloco <listheader> define o título de uma tabela ou lista de definições. Ao definir
uma tabela, é necessário fornecer uma entrada para term no título.
Cada item na lista é especificado com um bloco <item> . Ao criar uma lista de definições,
é necessário especificar term e description . No entanto, para uma tabela, lista com
marcadores ou lista numerada, será necessário fornecer apenas uma entrada para
description .
Uma lista ou tabela pode ter quantos blocos <item> forem necessários.
Exemplo
Este exemplo usa a marca <list> para definir uma lista com marcadores na seção de
comentários.
VB
''' </list>
''' </remarks>
End Sub
Confira também
Marcações de Comentário XML
<para> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<para>content</para>
Parâmetros
content
O texto do parágrafo.
Comentários
A marca <para> é para ser usada dentro de uma marca, como <summary>, <remarks>
ou <returns>, e permite adicionar estrutura ao texto.
Exemplo
Este exemplo usa a marca <para> para dividir a seção de comentários do método
UpdateRecord em dois parágrafos.
VB
''' </remarks>
End Sub
End Function
Confira também
Marcações de Comentário XML
<param> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<param name="name">description</param>
Parâmetros
name
O nome do parâmetro de um método. Coloque o nome entre aspas duplas (" ").
description
Comentários
A marca <param> deve ser usada no comentário para uma declaração de método para
descrever um dos parâmetros do método.
Exemplo
Este exemplo usa a marca <param> para descrever o parâmetro id .
VB
''' <param name="id">The ID of the record to update.</param>
''' </remarks>
End Sub
End Function
Confira também
Marcações de Comentário XML
<paramref> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<paramref name="name"/>
Parâmetros
name
O nome do parâmetro ao qual você deseja se referir. Coloque o nome entre aspas
duplas (" ").
Comentários
A marca <paramref> fornece uma forma de indicar que uma palavra é um parâmetro. O
arquivo XML pode ser processado para formatar esse parâmetro de uma forma distinta.
Exemplo
Este exemplo usa a marca <paramref> para se referir ao parâmetro id .
VB
''' </remarks>
End Sub
End Function
Confira também
Marcações de Comentário XML
<permission> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<permission cref="member">description</permission>
Parâmetros
member
description
Comentários
Use a marca <permission> para documentar o acesso de um membro. Use a classe
PermissionSet para especificar o acesso a um membro.
Exemplo
Este exemplo usa a marca <permission> para descrever que FileIOPermission é exigido
pelo método ReadFile .
VB
''' </permission>
End Sub
Confira também
Marcações de Comentário XML
<remarks> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<remarks>description</remarks>
Parâmetros
description
Comentários
Use a marca <remarks> para adicionar informações sobre um tipo, complementando as
informações especificadas com <summary>.
Essas informações são exibidas no Pesquisador de Objetos. Para obter mais informações
sobre o Pesquisador de Objetos, consulte Exibir a estrutura do código.
Exemplo
Este exemplo usa a marca <remarks> para explicar o que o método UpdateRecord faz.
VB
''' </remarks>
End Sub
End Function
Confira também
Marcações de Comentário XML
<returns> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<returns>description</returns>
Parâmetros
description
Comentários
Use a marca <returns> no comentário para uma declaração de método descrever o
valor retornado.
Exemplo
Este exemplo usa a marca <returns> para explicar o que a função DoesRecordExist
retorna.
VB
''' </remarks>
End Sub
End Function
Confira também
Marcações de Comentário XML
<see> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<see cref="member"/>
Parâmetros
member
Comentários
Use a marca <see> para especificar um link de dentro do texto. Use <seealso> para
indicar o texto que você deseja exibir em uma seção "Confira também".
Exemplo
Este exemplo usa a marca <see> na seção de comentários UpdateRecord para fazer
referência ao método DoesRecordExist .
VB
''' </remarks>
End Sub
End Function
Confira também
Marcações de Comentário XML
<seealso> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<seealso cref="member"/>
Parâmetros
member
Comentários
A marca <seealso> permite especificar o texto que você quer que seja exibido na seção
Confira também. Use <see> para especificar um link de dentro do texto.
Exemplo
Este exemplo usa a marca <seealso> na seção de comentários DoesRecordExist para
fazer referência ao método UpdateRecord .
VB
''' </remarks>
End Sub
End Function
Confira também
Marcações de Comentário XML
<summary> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<summary>description</summary>
Parâmetros
description
Um resumo do objeto.
Comentários
Use a marca <summary> para descrever um tipo ou um membro de tipo. Use <remarks>
para adicionar mais informações a uma descrição de tipo.
Exemplo
Este exemplo usa a marca <summary> para descrever o método ResetCounter e a
propriedade Counter .
VB
''' <summary>
''' </summary>
counterValue = 0
End Sub
''' <summary>
''' </summary>
Get
counterValue += 1
Return counterValue
End Get
End Property
Confira também
Marcações de Comentário XML
<typeparam> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<typeparam name="name">description</typeparam>
Parâmetros
name
O nome do parâmetro de tipo. Coloque o nome entre aspas duplas (" ").
description
Comentários
Use a marca <typeparam> no comentário para um tipo genérico ou declaração de
membro genérico para descrever um dos parâmetros de tipo.
Exemplo
Este exemplo usa a marca <typeparam> para descrever o parâmetro id .
VB
''' </typeparam>
End Class
Confira também
Marcações de Comentário XML
<value> (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<value>property-description</value>
Parâmetros
property-description
Comentários
Use a marca <value> para descrever uma propriedade. Observe que quando você
adiciona uma propriedade usando o assistente de código no ambiente de
desenvolvimento do Visual Studio, ele adicionará uma marca <resumo> para a nova
propriedade. Então, você deve adicionar manualmente uma marca <value> para
descrever o valor que a propriedade representa.
Exemplo
Este exemplo usa a marca <value> para descrever qual valor a propriedade Counter
contém.
VB
''' <summary>
''' </summary>
counterValue = 0
End Sub
''' <summary>
''' </summary>
Get
counterValue += 1
Return counterValue
End Get
End Property
Confira também
Marcações de Comentário XML
Propriedades do eixo XML (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Nesta seção
Tópico Descrição
Propriedade do Valor Descreve como acessar o valor do primeiro elemento de uma coleção
XML de objetos XElement ou XAttribute.
Confira também
XML
Propriedade de eixo do atributo XML
(Visual Basic)
Artigo • 07/04/2023 • 3 minutos para o fim da leitura
Sintaxe
VB
object.@attribute
' -or-
object.@<attribute>
Partes
object Necessário. Um objeto XElement ou uma coleção de objetos XElement.
Parte Descrição
prefix Opcional. O prefixo do namespace XML para o atributo. Deve ser um namespace XML
global definido com uma instrução Imports .
name Obrigatórios. Nome do Atributo local. Confira Nomes de elementos e atributos XML
declarados.
Valor Retornado
Uma cadeia de caracteres que contém o valor de attribute . Se o nome do atributo não
existir, Nothing será retornado.
Comentários
Você pode usar uma propriedade do eixo de atributo XML para acessar o valor de um
atributo por nome de um objeto XElement ou do primeiro elemento em uma coleção de
objetos XElement. Você pode recuperar um valor de atributo por nome ou adicionar um
novo atributo a um elemento especificando um novo nome precedido pelo identificador
@.
As regras de nomenclatura para atributos XML diferem das regras de nomenclatura para
identificadores do Visual Basic. Para acessar um atributo XML que tenha um nome que
não seja um identificador válido do Visual Basic, coloque o nome entre colchetes
angulares (< e >).
Namespaces de XML
O nome em uma propriedade de eixo de atributo pode usar apenas prefixos de
namespace de XML declarados globalmente usando a instrução Imports . Ele não pode
usar prefixos de namespace de XML declarados localmente em literais de elemento
XML. Para obter mais informações, confira Instrução Imports (namespace de XML).
Exemplo 1
O exemplo a seguir mostra como obter os valores dos atributos XML nomeados type
de uma coleção de elementos XML nomeados phone .
VB
<phones>
<phone type="home">206-555-0144</phone>
<phone type="work">425-555-0145</phone>
</phones>
<phoneTypes>
%>
</phoneTypes>
Console.WriteLine(phoneTypes)
<phoneTypes>
<type>home</type>
<type>work</type>
</phoneTypes>
Exemplo 2
O exemplo a seguir mostra como criar atributos para um elemento XML
declarativamente, como parte do XML e dinamicamente adicionando um atributo a uma
instância de um objeto XElement. O atributo type é criado declarativamente e o
atributo owner é criado dinamicamente.
VB
Console.WriteLine(phone2)
XML
Exemplo 3
O exemplo a seguir usa a sintaxe de colchete angular para obter o valor do atributo
XML nomeado number-type , que não é um identificador válido no Visual Basic.
VB
Dim phone As XElement =
Exemplo 4
O exemplo a seguir declara ns como um prefixo de namespace de XML. Em seguida, ele
usa o prefixo do namespace para criar um literal XML e acessar o primeiro nó filho com
o nome qualificado " ns:name ".
VB
Class TestClass3
Dim phone =
<ns:phone ns:type="home">206-555-0144</ns:phone>
End Sub
End Class
Confira também
XElement
Propriedades do eixo XML
Literais XML
Criando XML no Visual Basic
Nomes de elementos e atributos XML declarados
Propriedade do eixo filho XML (Visual
Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Sintaxe
VB
object.<child>
Partes
Termo Definição
child Obrigatórios. Nome dos nós filhos a serem acessados, no formato [prefix:]name .
Valor Retornado
Uma coleção de objetos XElement .
Comentários
Você pode usar uma propriedade de eixo filho XML para acessar nós filhos por nome de
um objeto XElement ou XDocument ou de uma coleção de objetos XElement ou
XDocument. Use a propriedade Value XML para acessar o valor do primeiro nó filho na
coleção retornada. Para obter mais informações, consulte Propriedade do Valor XML.
Namespaces de XML
O nome em uma propriedade de eixo filho pode usar apenas prefixos de namespace de
XML declarados globalmente com a instrução Imports . Ele não pode usar prefixos de
namespace de XML declarados localmente em literais de elemento XML. Para obter mais
informações, confira Instrução Imports (namespace de XML).
Exemplo 1
O exemplo a seguir mostra como acessar os nós filhos denominados phone do objeto
contact .
VB
<contact>
<name>Patrick Hines</name>
<phone type="home">206-555-0144</phone>
<phone type="work">425-555-0145</phone>
</contact>
Select hp
Exemplo 2
O exemplo a seguir mostra como acessar os nós filhos nomeados phone da coleção
retornada pela propriedade do eixo filho contact do objeto contacts .
VB
Dim contacts As XElement =
<contacts>
<contact>
<name>Patrick Hines</name>
<phone type="home">206-555-0144</phone>
</contact>
<contact>
<name>Lance Tucker</name>
<phone type="work">425-555-0145</phone>
</contact>
</contacts>
Select contact.<phone>
Exemplo 3
O exemplo a seguir declara ns como um prefixo de namespace de XML. Em seguida, ele
usa o prefixo do namespace para criar um literal do XML e acessar o primeiro nó filho
com o nome qualificado ns:name .
VB
Class TestClass4
<ns:name>Patrick Hines</ns:name>
</ns:contact>
Console.WriteLine(contact.<ns:name>.Value)
End Sub
End Class
Patrick Hines
Confira também
XElement
Propriedades do eixo XML
Literais XML
Criando XML no Visual Basic
Nomes de elementos e atributos XML declarados
Propriedade de eixo descendente XML
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
object...<descendant>
Partes
object Necessário. Um objeto XElement, um objeto XDocument, uma coleção de
objetos XElement ou uma coleção de objetos XDocument.
[ prefix:]name .
Parte Descrição
Valor Retornado
Uma coleção de objetos XElement .
Comentários
Você pode usar uma propriedade de eixo descendente XML para acessar nós
descendentes por nome de um objeto XElement ou XDocument ou de uma coleção de
objetos XElement ou XDocument. Use a propriedade Value XML para acessar o valor do
primeiro nó descendente na coleção retornada. Para obter mais informações, consulte
Propriedade do Valor XML.
Namespaces de XML
O nome em uma propriedade de eixo descendente pode usar apenas namespaces de
XML declarados globalmente com a instrução Imports . Ele não pode usar namespaces
de XML declarados localmente em literais de elemento XML. Para obter mais
informações, confira Instrução Imports (namespace de XML).
Exemplo 1
O exemplo a seguir mostra como acessar o valor do primeiro nó descendente
denominado name e os valores de todos os nós descendentes denominados phone do
objeto contacts .
VB
<contacts>
<contact>
<name>Patrick Hines</name>
<phone type="home">206-555-0144</phone>
<phone type="work">425-555-0145</phone>
</contact>
</contacts>
Select phone.Value
Exemplo 2
O exemplo a seguir declara ns como um prefixo de namespace de XML. Em seguida, ele
usa o prefixo do namespace para criar um literal do XML e acessar o valor do primeiro
nó filho com o nome qualificado ns:name .
VB
Class TestClass2
Dim contacts =
<ns:contacts>
<ns:contact>
<ns:name>Patrick Hines</ns:name>
</ns:contact>
</ns:contacts>
End Sub
End Class
Confira também
XElement
Propriedades do eixo XML
Literais XML
Criando XML no Visual Basic
Nomes de elementos e atributos XML declarados
Propriedade do indexador de extensão
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
object(index)
Partes
Termo Definição
object Obrigatórios. Uma coleção consultável. Ou seja, uma coleção que implementa
IEnumerable<T> ou IQueryable<T>.
index Obrigatórios. Uma expressão inteira que especifica a posição baseada em zero de um
elemento da coleção.
Valor Retornado
O objeto do local especificado na coleção ou Nothing se o índice estiver fora do
intervalo.
Comentários
Você pode usar a propriedade indexador de extensão para acessar elementos
individuais em uma coleção. Essa propriedade indexador normalmente é usada na saída
das propriedades do eixo XML. As propriedades do eixo filho XML e XML descendente
retornam coleções de objetos XElement ou um valor de atributo.
O compilador do Visual Basic converte as propriedades do indexador de extensão em
chamadas para o método ElementAtOrDefault . Ao contrário de um indexador de matriz,
o método ElementAtOrDefault retornará Nothing se o índice estiver fora do intervalo.
Esse comportamento é útil quando você não pode determinar facilmente o número de
elementos em uma coleção.
Exemplo
O exemplo a seguir mostra como usar o indexador de extensão para acessar o segundo
nó filho em uma coleção de objetos XElement. A coleção é acessada usando a
propriedade do eixo filho, que obtém todos os elementos filho nomeados phone no
objeto contact .
VB
<contact>
<name>Patrick Hines</name>
<phone type="home">206-555-0144</phone>
<phone type="work">425-555-0145</phone>
</contact>
Confira também
XElement
Propriedades do eixo XML
Literais XML
Criando XML no Visual Basic
Propriedade do Valor XML
Propriedade do valor XML (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
VB
object.Value
Partes
Termo Definição
Valor Retornado
Um String que contém o valor do primeiro elemento da coleção ou Nothing se a
coleção estiver vazia.
Comentários
A propriedade Value facilita o acesso ao valor do primeiro elemento em uma coleção de
objetos XElement. Essa propriedade verifica primeiro se a coleção contém pelo menos
um objeto. Se a coleção estiver vazia, essa propriedade retornará Nothing . Caso
contrário, essa propriedade retornará o valor da propriedade Value do primeiro
elemento na coleção.
7 Observação
Quando você acessa o valor de um atributo XML usando o identificador '@', o valor
do atributo é retornado como um String e você não precisa especificar
explicitamente a propriedade Value.
Para acessar outros elementos em uma coleção, você pode usar a propriedade do
indexador de extensão XML. Para obter mais informações, consulte Propriedade do
indexador de extensão.
Herança
A maioria dos usuários não precisará implementar IEnumerable<T> e, portanto, pode
ignorar esta seção.
Exemplo 1
O exemplo a seguir mostra como usar a propriedade Value para acessar o primeiro nó
em uma coleção de objetos XElement. O exemplo usa a propriedade do eixo filho para
obter a coleção de todos os nós filho chamados phone que estão no objeto contact .
VB
<contact>
<name>Patrick Hines</name>
<phone type="home">206-555-0144</phone>
<phone type="work">425-555-0145</phone>
</contact>
Exemplo 2
O exemplo a seguir mostra como obter o valor de um atributo XML de uma coleção de
objetos XAttribute. O exemplo usa a propriedade do eixo do atributo para exibir o valor
do atributo type para todos os elementos phone .
VB
<contact>
<name>Patrick Hines</name>
<phone type="home">206-555-0144</phone>
<phone type="work">425-555-0145</phone>
</contact>
Console.WriteLine(attr.Value)
Next
Console
home
work
Confira também
XElement
IEnumerable<T>
Propriedades do eixo XML
Literais XML
Criando XML no Visual Basic
Métodos de Extensão
Propriedade do Indexador de Extensão
Propriedade do Eixo Filho XML
Propriedade de Eixo do Atributo XML
Literais XML (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Nesta seção
Tópico Descrição
Confira também
XML
Literal do elemento XML (Visual Basic)
Artigo • 12/12/2022 • 5 minutos para o fim da leitura
Sintaxe
XML
-or-
Partes
<
name
Parte Descrição
Expressão inserida da forma <%= nameExp %> . O tipo de nameExp deve ser
String ou um tipo de dados implicitamente conversível para XName. Uma
expressão inserida não é permitida em uma marca de fechamento de um
elemento.
attributeList
Parte Descrição
/>
>
elementContents
</[name]>
Valor Retornado
Um objeto XElement.
Comentários
Você pode usar a sintaxe literal do elemento XML para criar objetos XElement em seu
código.
7 Observação
Um literal do XML pode abranger várias linhas sem usar caracteres de continuação
de linha. Essa funcionalidade permite que você copie o conteúdo de um
documento XML e cole-o diretamente em um programa do Visual Basic.
Namespaces de XML
Prefixos de namespace de XML são úteis quando você precisa criar literais do XML com
elementos do mesmo namespace muitas vezes no código. Você pode usar prefixos de
namespace de XML globais, que você define usando a instrução Imports , ou prefixos
locais, que você define usando a sintaxe do atributo xmlns:xmlPrefix="xmlNamespace" .
Para obter mais informações, confira Instrução Imports (namespace de XML).
De acordo com as regras de escopo para namespaces de XML, os prefixos locais têm
precedência sobre os prefixos globais. No entanto, se um literal do XML definir um
namespace de XML, esse namespace não estará disponível para expressões que
aparecem em uma expressão inserida. A expressão inserida pode acessar apenas o
namespace de XML global.
O compilador do Visual Basic converte cada namespace de XML global usado por um
literal do XML em uma definição de namespace local no código gerado. Namespaces de
XML globais que não são usados não aparecem no código gerado.
Exemplo 1
O exemplo a seguir mostra como criar um elemento XML simples que tenha dois
elementos vazios aninhados.
VB
<outer>
<inner1></inner1>
<inner2/>
</outer>
Console.WriteLine(test1)
O exemplo exibe o texto a seguir. Observe que o literal preserva a estrutura dos
elementos vazios.
XML
<outer>
<inner1></inner1>
<inner2 />
</outer>
Exemplo 2
O exemplo a seguir mostra como usar expressões inseridas para nomear um elemento e
criar atributos.
VB
isbn="1234"
/>
Console.WriteLine(book)
XML
Exemplo 3
O exemplo a seguir declara ns como um prefixo de namespace de XML. Em seguida, ele
cria um literal do XML que usa o prefixo de namespace e exibe a forma final do
elemento.
VB
Imports <xmlns:ns="http://SomeNamespace">
Class TestClass1
Dim test =
<ns:outer>
<ns:middle xmlns:ns="http://NewNamespace">
<ns:inner1/>
</ns:middle>
</ns:outer>
Console.WriteLine(test)
End Sub
End Class
XML
<ns:outer xmlns:ns="http://SomeNamespace">
<ns:middle xmlns:ns="http://NewNamespace">
<ns:inner1 />
</ns:middle>
</ns:outer>
Confira também
XElement
Nomes de elementos e atributos XML declarados
Literal de Comentário XML
Literal CDATA XML
Literais XML
Criando XML no Visual Basic
Expressões inseridas no XML
Instrução Imports (namespace XML)
Literal de documento XML (Visual Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Sintaxe
XML
[ piCommentList ]
rootElement
[ piCommentList ]
Partes
Termo Definição
Um objeto XElement.
Uma coleção que contém um objeto XElement e qualquer número de
objetos XProcessingInstruction e XComment.
Comentários
Um literal de documento XML é identificado pela declaração XML no início do literal.
Embora cada literal de documento XML precise ter exatamente um elemento XML raiz,
ele pode ter qualquer número de instruções de processamento XML e comentários XML.
7 Observação
Um literal do XML pode abranger várias linhas sem usar caracteres de continuação
de linha. Isso permite que você copie o conteúdo de um documento XML e cole-o
diretamente em um programa do Visual Basic.
Exemplo
O exemplo a seguir cria um documento XML que tem uma declaração XML, uma
instrução de processamento, um comentário e um elemento que contém outro
elemento.
VB
<books>
<book/>
</books>
Console.WriteLine(libraryRequest)
Confira também
XElement
XProcessingInstruction
XComment
XDocument
Literal de Instrução de Processamento XML
Literal de Comentário XML
Literal do Elemento XML
Literais XML
Criando XML no Visual Basic
Expressões inseridas no XML
Literal CDATA XML (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
<![CDATA[content]]>
Partes
<![CDATA[
content
]]>
Valor Retornado
Um objeto XCData.
Comentários
As seções CDATA XML contêm texto bruto que deve ser incluído, mas não analisado,
com o XML que o contém. Uma seção CDATA XML pode conter qualquer texto. Isso
inclui caracteres XML reservados. A seção CDATA XML termina com a sequência "]]>".
Isso significa o seguinte:
Você não pode usar uma expressão inserida em um literal CDATA XML porque os
delimitadores de expressão inseridos são conteúdo CDATA XML válido.
As seções CDATA XML não podem ser aninhadas, porque content não podem
conter o valor "]]>".
Você pode atribuir um literal CDATA XML a uma variável ou incluí-lo em um literal de
elemento XML.
7 Observação
Um literal XML pode abranger várias linhas, mas não usa caracteres de continuação
de linha. Isso permite que você copie o conteúdo de um documento XML e cole-o
diretamente em um programa do Visual Basic.
O compilador do Visual Basic converte o literal de CDATA XML em uma chamada para o
construtor XCData.
Exemplo
O exemplo a seguir cria uma seção CDATA que contém o texto "Pode conter marcas
<XML> literais".
VB
Confira também
XCData
Literal do Elemento XML
Literais XML
Criando XML no Visual Basic
Literal de comentário XML (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
Partes
Termo Definição
content Obrigatórios. Texto a ser exibido no comentário XML. Não é possível conter uma série
de dois hifens (--) ou terminar com um hífen adjacente à marca de fechamento.
Valor Retornado
Um objeto XComment.
Comentários
Literais de comentário XML não contêm conteúdo de documento. Eles contêm
informações sobre o documento. A seção comentário XML termina com a sequência "--
>". Isso significa o seguinte:
Você não pode usar uma expressão inserida em um literal de comentário XML
porque os delimitadores de expressão inseridos são conteúdo de comentário XML
válido.
As seções de comentário XML não podem ser aninhadas, porque content não
podem conter o valor "-->".
Você pode atribuir um literal de comentário XML a uma variável ou incluí-lo em um
literal de elemento XML.
7 Observação
Um literal do XML pode abranger várias linhas sem usar caracteres de continuação
de linha. Essa funcionalidade permite que você copie o conteúdo de um
documento XML e cole-o diretamente em um programa do Visual Basic.
Exemplo
O exemplo a seguir cria um comentário XML que contém o texto "Isso é um
comentário".
VB
Confira também
XComment
Literal do Elemento XML
Literais XML
Criando XML no Visual Basic
Literal de instrução de processamento
XML (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
XML
Partes
<?
piName
Obrigatórios. Nome que indica qual aplicativo a instrução de processamento tem como
destino. Não é possível começar com "xml" ou "XML".
piData
Opcional. Cadeia de caracteres que indica como o aplicativo direcionado por piName
deve processar o documento XML.
?>
Valor Retornado
Um objeto XProcessingInstruction.
Comentários
Literais de instrução de processamento XML indicam como os aplicativos devem
processar um documento XML. Quando um aplicativo carrega um documento XML, o
aplicativo pode verificar as instruções de processamento XML para determinar como
processar o documento. O aplicativo interpreta o significado de piName e piData .
O literal do documento XML usa sintaxe semelhante à da instrução de processamento
XML. Para saber mais, confira Literal de documento XML.
7 Observação
7 Observação
Um literal do XML pode abranger várias linhas, mas não usa caracteres de
continuação de linha. Isso permite que você copie o conteúdo de um documento
XML e cole-o diretamente em um programa do Visual Basic.
Exemplo
O exemplo a seguir cria uma instrução de processamento que identifica uma folha de
estilos para um documento XML.
VB
Dim pi As XProcessingInstruction =
Confira também
XProcessingInstruction
Literal de Documento XML
Literais XML
Criando XML no Visual Basic
Mensagens de erro no Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Para obter informações sobre como solucionar um erro específico, consulte Recursos
adicionais para programadores do Visual Basic.
O atributo só pode ser aplicado a uma vez. O atributo AttributeUsage determina se ele
pode ser aplicado mais de uma vez.
ID do erro: BC30663
VB
<AttributeUsage(AllowMultiple := True)>
Confira também
AttributeUsageAttribute
Criando atributos personalizados
AttributeUsage
BC32500: '<attribute>' não pode ser
aplicado porque o formato '<number>'
do GUID não está correto
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
evento de criação.
Um GUID consiste em 16 bytes, dos quais os oito primeiros são numéricos e os oito
últimos são binários. Ele é gerado por utilitários da Microsoft, como uuidgen.exe e tem a
garantia de ser exclusivo no espaço e no tempo.
ID do erro: BC32500
Confira também
Guid
Visão geral de atributos
BC30014: '#ElseIf' deve ser precedido
por um '#If' ou '#ElseIf' correspondente
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
#ElseIf é uma diretiva de compilação condicional. Uma cláusula #ElseIf deve ser
precedida por uma cláusula #If ou #ElseIf correspondente.
ID do erro: BC30014
2. Se o valor #ElseIf for precedido por uma diretiva #Else , remova o #Else ou
altere-o para um #ElseIf .
3. Se todo o resto estiver em ordem, adicione uma diretiva #If ao início do bloco de
compilação condicional.
Confira também
Diretivas #If...Then...#Else
BC32025: as instruções '#Region' e
'#End Region' não são válidas dentro
dos corpos/lambdas de várias linhas do
método
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC32025
Confira também
Diretiva #Region
BC40029: '<classname>' não é
compatível com CLS porque a interface
'<interfacename>' implementada não é
compatível com CLS
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Para que uma classe ou interface esteja em conformidade com o CLS (Independência de
Linguagem e Componentes Independente de Linguagem), toda a hierarquia de herança
precisa estar em conformidade. Isso significa que todos os tipos dos quais herdam,
direta ou indiretamente, precisam estar em conformidade. Da mesma maneira, se uma
classe implementar uma ou mais interfaces, todas elas deverão estar em conformidade
em todas as hierarquias de herança.
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar os avisos como erros, consulte Configurar avisos no Visual Basic.
ID do Erro: BC40029
Se você exigir que esse tipo permaneça dentro de sua hierarquia de herança ou
esquema de implementação atual, remova o CLSCompliantAttribute da definição
ou marque-o como <CLSCompliant(False)> .
BC40008: '<elementname>' está
obsoleto (aviso do Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma instrução tenta acessar um elemento de programação que foi marcado com o
atributo ObsoleteAttribute e a diretiva para tratá-lo como um aviso.
Você pode marcar qualquer elemento de programação como não mais em uso
aplicando ObsoleteAttribute a ele. Se você fizer isso, poderá definir a propriedade
IsError do atributo como True ou False . Se você definir como True , o compilador
tratará uma tentativa de usar o elemento como um erro. Se você definir como False ou
deixar como padrão de False , o compilador emitirá um aviso se houver uma tentativa
de usar o elemento.
ID do Erro: BC40008
Confira também
Visão geral de atributos
BC32022: '<eventname>' é um evento e
não pode ser chamado diretamente
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
'< eventname >' é um evento; por isso, não pode ser chamado diretamente. Use uma
instrução RaiseEvent para gerar um evento.
ID do Erro: BC32022
Confira também
Instrução RaiseEvent
BC32061: '<expression>' não pode ser
usado como uma restrição de tipo
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma lista de restrições inclui uma expressão que não representa uma restrição válida
em um parâmetro de tipo.
Se você não incluir nenhuma classe ou interface específica na lista de restrições, poderá
impor um requisito mais geral especificando um dos seguintes itens:
Você não pode especificar Structure e Class no mesmo parâmetro de tipo, nem
especificar uma delas mais de uma vez.
ID do erro: BC32061
< functionname > não está declarado. A funcionalidade de E/S do arquivo normalmente
está disponível no namespace Microsoft.VisualBasic , mas a versão de destino do .NET
Compact Framework não dá suporte a ela.
ID do erro: BC30766
Confira também
System.IO
Access de arquivo com o Visual Basic
BC42015: '<interfacename>.
<membername>' já está implementado
pela classe base '<baseclassname>'.
Reimplementação de <type> presumida
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratá-los como erros, consulte Configurar Avisos no Visual Basic.
ID do erro BC42015
Confira também
Interfaces
BC30043: '<keyword>' é válido somente
em um método de instância
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro:* BC30043
Confira também
Atribuição de variável do objeto
Me, My, MyBase e MyClass
Noções básicas de herança
BC30909: '<membername>' não pode
expor o tipo '<typename>' fora do
projeto por meio <containertype>
'<containertypename>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O código esqueleto a seguir mostra uma situação que gera esse erro.
VB
End Class
End Class
Um tipo declarado Protected , Friend , Protected Friend ou Private que se destina a ter
acesso limitado fora do contexto de declaração. Usá-la como o tipo de dados de uma
variável com acesso menos restrito eliminaria essa finalidade. No código esqueleto
anterior, exposedVar é Public e exporia privateClass ao código que não deve ter
acesso a ele.
ID do erro: BC30909
Confira também
Níveis de acesso no Visual Basic
BC30685: '<membername>' é ambíguo
nas interfaces herdadas
'<interfacename1>' e
'<interfacename2>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
A interface herda dois ou mais membros com o mesmo nome de várias interfaces.
ID do Erro: BC30685
VB
Interface Left
Sub MySub()
End Interface
Interface Right
Sub MySub()
End Interface
Interface LeftRight
End Interface
Module test
Sub Main()
Dim x As LeftRight
End Sub
End Module
Confira também
Interfaces
BC30971: <message> Este erro também
poderia ocorrer devido à mistura de
uma referência de arquivo com uma
referência de projeto ao assembly
'<assemblyname>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
<message> Este erro também poderia ocorrer devido à mistura de uma referência de
arquivo com uma referência de projeto ao assembly '<assemblyname>'. Nesse caso,
tente substituir a referência de arquivo a '<assemblyfilename>' no projeto
'<projectname1>' por uma referência de projeto a '<projectname2>'.
Para acessar um tipo definido em outro assembly, o compilador do Visual Basic deve ter
uma referência a esse assembly. Essa deve ser uma referência única e inequívoca que
não cause referências circulares entre projetos.
ID do Erro: BC30971
Confira também
Gerenciando referências em um projeto
ID do erro: BC30269
Confira também
Referências a elementos declarados
Considerações sobre procedimentos de sobrecarga
BC30560: '<name>' é ambíguo no
namespace '<namespacename>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você forneceu um nome ambíguo que, portanto, entra em conflito com outro nome. O
compilador do Visual Basic não tem regras de resolução de conflitos; você deve eliminar
a ambiguidade dos nomes por conta própria.
ID do erro: BC30560
Confira também
Namespaces no Visual Basic
Instrução Namespace
BC30561: '<name1>' é ambíguo,
importado dos namespaces ou tipos
<name2>'
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Você forneceu um nome ambíguo que, portanto, entra em conflito com outro nome. O
compilador do Visual Basic não tem regras de resolução de conflitos; você deve eliminar
a ambiguidade dos nomes por conta própria.
ID do erro: BC30561
Confira também
Instrução Imports (tipo e namespace .NET)
Namespaces no Visual Basic
Instrução Namespace
BC40035: <proceduresignature1> não
está em conformidade com CLS porque
sobrecarrega <proceduresignature2>
que difere dele somente pelos tipos de
matriz e parâmetro de matriz ou pela
classificação dos tipos de parâmetro da
matriz
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar os avisos como erros, consulte Configurar avisos no Visual Basic.
ID do Erro: BC40035
Confira também
Sobrecarga de procedimento
Sobrecargas
BC30154: <type1>'<typename>' deve
implementar '<membername>' para
interface '<interfacename>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma classe ou estrutura afirma implementar uma interface, mas não implementa um
procedimento, uma propriedade ou um evento definido pela interface. Todos os
membros da interface devem ser implementados.
ID do Erro: BC30154
VB
Confira também
Instrução Implements
Interfaces
BC30149: <type1>'<typename>' deve
implementar '<methodname>' para a
interface '<interfacename>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma classe ou estrutura afirma implementar uma interface, mas não implementa um
procedimento definido pela interface. Todos os membros da interface devem ser
implementados.
ID do erro: BC30149
VB
Confira também
Instrução Implements
Interfaces
BC30910: '<typename>' não pode
herdado de <type> '<basetypename>'
porque ele expande o acesso do <type>
base fora do assembly
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma classe ou interface herda de uma classe base ou interface, mas tem um nível de
acesso menos restritivo.
Por exemplo, uma interface Public herda de Friend ou uma classe Protected herda de
Private . Isso expõe a classe base ou a interface para o acesso além do nível pretendido.
ID do erro: BC30910
-ou-
Confira também
Instrução Class
Instrução Interface
Instrução Inherits
Níveis de acesso no Visual Basic
BC32008: '<typename>' é um tipo
delegado
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
A cláusula New que cria uma instância de uma classe delegada fornece uma lista de
argumentos inválida para o construtor delegado.
Você pode fornecer apenas uma expressão AddressOf única ao criar uma nova instância
delegada.
Esse erro poderá resultar se você não passar nenhum argumento para o construtor
delegado, se passar mais de um argumento ou se passar um argumento único que não
seja uma expressão AddressOf válida.
ID do erro: BC32008
Confira também
Novo Operador
Operador AddressOf
Representantes
Como invocar um método delegado
BC30108: '<typename>' é um tipo e não
pode ser usado como uma expressão
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Um nome de tipo ocorre quando uma expressão é necessária. Uma expressão deve
consistir em uma combinação de variáveis, constantes, literais, propriedades e chamadas
de procedimento Function .
ID do error: BC30108
Confira também
Operadores e Expressões
Aspas duplas não formam um token de
comentário válido para campos
delimitados em que EscapeQuote esteja
definido como True
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma aspa foi fornecida como o delimitador para o TextFieldParser , mas EscapeQuotes
está definido como True .
Confira também
SetDelimiters
Delimiters
TextFieldParser
Como: ler de arquivos de texto separados por vírgula
Uma chamada de propriedade ou
método não pode incluir uma referência
a um objeto particular, como um
argumento ou um valor de retorno
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Privado
BC40059: Foi criada uma referência para
o assembly de interoperabilidade
inserido '<assembly1>' devido a uma
referência indireta a esse assembly a
partir do assembly '<assembly2>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
7 Observação
ID do erro: BC40059
Para remover o aviso, você pode definir a propriedade Embed Interop Types do
assembly1 como False . Nesse caso, as informações de tipo de interoperabilidade
são fornecidas por um PIA (assembly de interoperabilidade primário).
Confira também
-link (Visual Basic)
Interoperação com código não gerenciado
Não foi especificado um formulário de
inicialização
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
WindowsFormsApplicationBase
OnCreateMainForm
MainForm
Visão geral do modelo de aplicativo do Visual Basic
BC42025: acesso de membro
compartilhado, membro constante,
membro enum ou tipo aninhado por
meio de uma instância; a expressão de
qualificação não será avaliada
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma variável de instância de uma classe ou estrutura é usada para acessar uma variável,
propriedade, procedimento ou evento Shared definido nessa classe ou estrutura. Esse
aviso também pode ocorrer se uma variável de instância for usada para acessar um
membro compartilhado implicitamente de uma classe ou estrutura, como uma
constante ou enumeração, ou uma classe ou estrutura aninhada.
A finalidade de compartilhar um membro é criar apenas uma única cópia desse membro
e disponibilizar essa única cópia para todas as instâncias da classe ou estrutura na qual
ela é declarada. É consistente com esse propósito acessar um membro Shared por meio
do nome de sua classe ou estrutura, em vez de por meio de uma variável que contém
uma instância individual dessa classe ou estrutura.
Acessar um membro Shared por meio de uma variável de instância pode dificultar a
compreensão do código, obscurecendo o fato de que o membro é Shared . Além disso,
se esse acesso for parte de uma expressão que executa outras ações, como um
procedimento Function que retorna uma instância do membro compartilhado, o Visual
Basic ignora a expressão e quaisquer outras ações que ele executaria.
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar avisos como erros, consulte Configurar avisos no Visual Basic.
ID do erro: BC42025
Exemplo
O seguinte exemplo gera o erro bc42025:
VB
Public Class TestClass
Console.WriteLine("Hello")
End Sub
End Class
Module Program
End Sub
End Module
VB
Console.WriteLine("Hello")
End Sub
End Class
Module Program
TestClass.SayHello()
End Sub
End Module
7 Observação
Confira também
Compartilhado
Escopo no Visual Basic
BC30577: o operando 'AddressOf' deve
ter o mesmo nome de um método (sem
parênteses)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
VB
AddressOf procedurename
ID do erro: BC30577
Exemplo
O seguinte exemplo gera o erro bc30577:
VB
For i = 0 To 10
Console.WriteLine($"Counted: {i}")
Threading.Thread.Sleep(500)
Next
End Sub
Sub Main()
t.Start()
End Sub
For i = 0 To 10
Console.WriteLine($"Counted: {i}")
Threading.Thread.Sleep(500)
Next
End Sub
Sub Main()
t.Start()
End Sub
Confira também
Operador AddressOf
Representantes
Ocorreu um erro inesperado porque não
foi possível adquirir um recurso do
sistema operacional obrigatório para a
inicialização de instância única
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
3. Reinicie o computador para limpar qualquer processo que possa estar usando os
recursos necessários para se conectar ao aplicativo da instância original.
Confira também
Página de Aplicativo, Designer de Projeto (Visual Basic)
Noções básicas do depurador
Opções de comentários do Visual Studio
BC36556: o nome do membro de tipo
anônimo só pode ser inferido a partir de
um nome simples ou qualificado sem
argumentos
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você não pode inferir um nome de membro de tipo anônimo usando uma expressão
complexa.
ID do erro: BC36556
Exemplo
O seguinte exemplo gera o erro BC36556:
VB
Para obter mais informações sobre fontes das quais tipos anônimos podem e não
podem inferir nomes e tipos de membros, confira Como inferir nomes e tipos de
propriedade em declarações de tipo anônimo.
VB
Confira também
Tipos anônimos
Como inferir nomes e tipos de propriedade na declaração de tipo anônimo
Argumento não opcional (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Tipos de Erro
BC30638: os limites de matriz não
podem ser exibidos em especificadores
de tipo
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30638
Exemplo
O seguinte exemplo gera o erro BC30638:
VB
VB
VB
Confira também
matrizes
BC32039: A matriz declarada para a
variável de controle do loop não pode
ser declarada com um tamanho inicial
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Um loop For Each usa uma matriz como sua variável de iteração, mas inicializa essa
matriz.
ID do Erro: BC32039
Exemplo
O exemplo a seguir gera o erro bc32039:
VB
Next
VB
Next
VB
Next
Confira também
Instrução For...Next
matrizes
Coleções
BC30306: Expressão de subscrito de
matriz ausente
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma inicialização de matriz deixa de fora um ou mais dos subscritos que definem os
limites da matriz. Por exemplo, a instrução pode conter a expressão myArray (5,5,,10) ,
que deixa de fora o terceiro subscrito.
ID do erro: BC30306
Confira também
matrizes
BC31043: matrizes declaradas como
membros de estrutura não podem ser
declaradas com um tamanho inicial
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma matriz em uma estrutura é declarada com um tamanho inicial. Você não pode
inicializar nenhum elemento de estrutura, e declarar um tamanho de matriz é uma
forma de inicialização.
ID do erro: BC31043
Exemplo
O seguinte exemplo gera o erro BC31043:
VB
Structure DemoStruct
End Structure
VB
Structure DemoStruct
End Structure
Sub UseStruct()
ReDim struct.demoArray(9)
Struct.demoArray(2) = 777
End Sub
Confira também
matrizes
Como: Declarar uma estrutura
BC30828: 'As Any' não é suportado em
instruções 'Declare'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O tipo de dados Any foi usado com instruções Declare no Visual Basic 6.0 e versões
anteriores para permitir o uso de argumentos que poderiam conter qualquer tipo de
dados. No entanto, o Visual Basic dá suporte à sobrecarga e, portanto, torna o tipo de
dados Any obsoleto.
ID do erro: BC30828
VB
VB
ByVal x As Short,
<System.Runtime.InteropServices.MarshalAsAttribute(
System.Runtime.InteropServices.UnmanagedType.AsAny)>
ByVal o As Object)
Confira também
MarshalAsAttribute
Passo a passo: Fazer chamadas de APIs do Windows
Instrução Declare
Criando protótipos em código gerenciado
Erro de automação
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Tipos de Erro
Opções de comentários do Visual Studio
BC42033: Valor de soma de verificação
incorreto, dígitos não hexadecimais ou
número ímpar de dígitos hexadecimais
Artigo • 21/02/2023 • 2 minutos para o fim da leitura
Quando o ASP.NET gera um arquivo de origem do Visual Basic (extensão .vb), ele calcula
uma soma de verificação e a coloca em um arquivo de origem oculto identificado por
#externalchecksum . Um usuário também pode gerar um arquivo .vb para isso, mas é
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar os avisos como erros, consulte Configurar avisos no Visual Basic.
ID do erro: BC42033
Confira também
Visão geral do ASP.NET
Opções de comentários do Visual Studio
Convenção de chamada de DLL inválida
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Tipos de Erro
Instrução Call
Instrução Declare
Modo de arquivo inválido
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Verifique se Input especifica um arquivo aberto para Input . Caso contrário, use
outra instrução para colocar dados no arquivo ou reabra-o em um modo
apropriado.
Confira também
FileSystem
Solução de problemas: ler e gravar em arquivos de texto
Nome ou número de arquivo inválido
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma instrução refere-se a um arquivo com um número que está fora do intervalo
de números de arquivo.
Confira também
FileOpen
Convenções de nomenclatura do Visual Basic
Comprimento de registro inválido
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
FileGet
FileGetObject
FilePut
FilePutObject
BC42358: Como esta chamada não era
esperada, a execução do método atual
continua antes da chamada ser
concluída
Artigo • 07/04/2023 • 6 minutos para o fim da leitura
Como esta chamada não era esperada, a execução do método atual continua antes da
chamada ser concluída. Considere aplicar o operador Await ao resultado da chamada.
O método atual chama um método assíncrono que retorna uma classe Task ou
Task<TResult> e não aplica o operador Await ao resultado. A chamada ao método
assíncrono inicia uma tarefa assíncrona. No entanto, como nenhum operador Await é
aplicado, o programa continua sem esperar que a tarefa seja concluída. Na maioria dos
casos, esse comportamento não é o que você deseja. Geralmente, os outros aspectos do
método de chamada dependem dos resultados da chamada ou, no mínimo, é esperado
que o método chamado seja concluído antes de retornar do método que contém a
chamada.
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratá-los como erros, consulte Configurar Avisos no Visual Basic.
ID do erro: BC42358
VB
' Variable delay is used to slow down the called method so that you
' can distinguish between awaiting and not awaiting in the program's
output.
' You can adjust the value to produce the output that this topic shows
' Call an async method. Because you don't await it, its completion isn't
CalledMethodAsync(delay)
' To suppress the warning without awaiting, you can assign the
' returned task to a variable. The assignment doesn't change how
' Call #3
'Await CalledMethodAsync(delay)
' continues to run and, in this example, finishes its work and returns
End Function
' Slow the process down a little so you can distinguish between awaiting
' and not awaiting. Adjust the value for howLong if necessary.
Await Task.Delay(howLong)
End Function
Console
Exemplo
O seguinte aplicativo do WPF (Windows Presentation Foundation) contém os métodos
do exemplo anterior. As etapas a seguir configuram o aplicativo:
XAML
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<Grid>
</Grid>
</Window>
Uma janela simples, contendo um botão e uma caixa de texto, aparecerá no modo
de exibição de Design de MainWindow.xaml.
Para obter mais informações sobre o Designer XAML, consulte Criando uma
interface do usuário usando o Designer XAML. Para obter informações sobre como
criar sua própria interface do usuário simples, consulte as seções "Para criar um
aplicativo WPF" e "Para criar uma simples MainWindow do WPF" do Passo a passo:
acessando a Web usando async e await.
VB
Class MainWindow
Await CallingMethodAsync()
End Sub
' Variable delay is used to slow down the called method so that
you
' You can adjust the value to produce the output that this
topic shows
' Call an async method. Because you don't await it, its
completion isn't
CalledMethodAsync(delay)
' To suppress the warning without awaiting, you can assign the
' Call #3
' (Call #1 or Call #2) with the following awaited call. The
best
'Await CalledMethodAsync(delay)
' continues to run and, in this example, finishes its work and
returns
End Function
' Slow the process down a little so you can distinguish between
awaiting
' and not awaiting. Adjust the value for howLong if necessary.
Await Task.Delay(howLong)
ResultsTextBox.Text &= vbCrLf & " Task.Delay is finished--
returning from called method."
End Function
End Class
' Output
' Output
Confira também
Operador Await
Programação assíncrona com Async e Await
BC36548: não é possível converter o
tipo anônimo em uma árvore de
expressão porque uma propriedade de
tipo é usada para inicializar outra
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC36548
Exemplo
VB
Module M2
End Sub
Sub Main()
End Sub
End Module
VB
Sub Main()
Dim temp = 2
End Sub
Confira também
Tipos anônimos (Visual Basic)
Árvores de expressão (Visual Basic)
Como usar árvores de expressão para criar consultas dinâmicas (Visual Basic)
Não é possível criar o componente
ActiveX
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Tipos de Erro
Opções de comentários do Visual Studio
BC30310: Não é possível fazer referência
a "<name>" porque ele é um membro
do campo de tipo de valor "<name>"
da classe "<classname>" que tem
'System.MarshalByRefObject' como uma
classe base
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30310
Confira também
MarshalByRefObject
Instrução Dim
BC30369: não é possível fazer referência
a um membro da instância de uma
classe de dentro de um método
compartilhado ou inicializador de
membro compartilhado sem uma
instância explícita da classe
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
VB
Class Sample
Public x as Integer
x = 10
End Sub
End Class
ID do erro: BC30369
Para corrigir este erro
1. Decida se deseja que o membro seja compartilhado entre todas as instâncias da
classe ou mantido individualmente para cada instância.
2. Se você quiser que uma cópia única do membro seja compartilhada entre todas as
instâncias, adicione a palavra-chave Shared à declaração de membro. Mantenha a
palavra-chave Shared na declaração de procedimento.
3. Se você quiser que cada instância tenha sua própria cópia individual do membro,
não especifique Shared para a declaração de membro. Remova a palavra-chave
Shared na declaração de procedimento.
Confira também
Compartilhado
Não é possível criar arquivo temporário
necessário
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
A unidade está completa que contém o diretório especificado pela variável de ambiente
TEMP, ou a variável de ambiente TEMP especifica uma unidade ou diretório inválido ou
somente leitura.
Confira também
Tipos de Erro
BC2012: não é possível abrir
'<filename>' para gravação
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O arquivo especificado não pode ser aberto para gravação, talvez porque isso já tenha
ocorrido.
ID do erro: BC2012
Confira também
WriteAllText
WriteAllBytes
Gravar em arquivos
BC31098: não foi possível encontrar a
classe '<classname>'.
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC31098
Confira também
Opções de comentários do Visual Studio
A classe não dá suporte à automação ou
à interface esperada
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Tipos de Erro
Opções de comentários do Visual Studio
BC30481: Instrução 'Class' deve finalizar
com 'End Class' correspondente
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Class é usada para iniciar um bloco Class ; portanto, ela só pode aparecer no início
dele e uma instrução correspondente End Class deve finalizá-lo. É necessário ter uma
instrução Class redundante ou não conseguirá finalizar o bloco Class com End Class .
ID do erro: BC30481
Confira também
Instrução End <keyword>
Instrução Class
Formato inválido de área de
transferência
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Área de transferência: adicionando outros formatos
BC30439: Expressão de constante não
representável no tipo '<typename>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você está tentando avaliar uma constante que não se ajusta ao tipo de destino,
geralmente porque ultrapassa o intervalo.
ID do erro: BC30439
Confira também
Visão geral de constantes
Constantes e Enumerações
BC30424: As constantes devem ser do
tipo intrínseco ou enumerado, e não
classe, estrutura, parâmetro de tipo ou
tipo de matriz
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você tentou declarar uma constante como uma classe, estrutura ou tipo de matriz ou
como um parâmetro de tipo definido por um tipo genérico contido.
As constantes devem ser de um tipo intrínseco ( Boolean , Byte , Date , Decimal , Double ,
Integer , Long , Object , SByte , Short , Single , String , UInteger , ULong ou UShort ) ou,
um tipo Enum com base em um tipo de dados integrais.
ID do erro: BC30424
2. Uma constante também pode ser um valor especial, como True , False ou
Nothing . O compilador considera esses valores predefinidos como do tipo
intrínseco apropriado.
Confira também
Constantes e Enumerações
Data Types
Data Types
BC30298: o construtor '<name>' não
pode se chamar
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30298
Confira também
Tempo de vida do objeto: como os objetos são criados e destruídos
BC32053: Copiar o valor
“<parametername>” do parâmetro
'ByRef' de volta para o argumento
correspondente é restrita do tipo
“<typename1>” para o tipo
“<typename2>”
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Se você passar o argumento ByRef, o Visual Basic às vezes copia o valor do argumento
em uma variável local no procedimento em vez de passar uma referência. Nesse caso,
quando o procedimento retorna, o Visual Basic deve copiar o valor da variável local de
volta para o argumento no código de chamada.
ID do Erro: BC32053
Confira também
Procedimentos
Parâmetros e Argumentos de Procedimento
Passar argumentos por valor e por referência
Procedimentos do operador
Instrução Operator
Como definir um operador
Como definir um operador de conversão
Conversões de tipo no Visual Basic
Conversões de Widening e Narrowing
BC31122: O modificador 'Custom' não é
válido em eventos declarados sem tipos
delegados explícitos
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Eventos não personalizados podem ser definidos com uma cláusula As e um tipo de
delegado explícito ou com uma lista de parâmetros imediatamente após o nome do
evento.
ID de erro: BC31122
Por exemplo, se o Custom Event foi definido por Custom Event Test(ByVal sender
As Object, ByVal i As Integer) , o delegado correspondente seria o seguinte.
VB
VB
Exemplo
Esse exemplo declara um Custom Event e especifica a cláusula necessária As com um
tipo de delegado.
VB
End AddHandler
End RemoveHandler
End RaiseEvent
End Event
Confira também
Instrução Event
Instrução Delegate
Eventos
BC36647 e BC36644: Não é possível
inferir o(s) tipo(s) de dados do(s)
parâmetro(s) de tipo a partir destes
argumentos
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Não é possível inferir o(s) tipo(s) de dados do(s) parâmetro(s) de tipo a partir destes
argumentos. Especificar os tipos de dados explicitamente pode corrigir esse erro.
Esse erro ocorre quando há falha na resolução de sobrecarga. Ele ocorre como
mensagem subordinada que indica por que um candidato de sobrecarga específico foi
eliminado. A mensagem de erro explica que o compilador não pode usar a inferência de
tipo para encontrar tipos de dados para os parâmetros de tipo.
7 Observação
VB
Module Module1
Sub Main()
'OverloadedGenericMethod("Hello", "World")
End Sub
End Sub
End Sub
End Module
Interface InterfaceExample(Of T)
End Interface
Confira também
Conversão de delegado reduzida
Procedimentos genéricos no Visual Basic
Conversões de tipo no Visual Basic
BC30188: declaração esperada
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma instrução nãodeclarativa, como uma instrução de atribuição ou loop, ocorre fora
de qualquer procedimento. Somente declarações são permitidas fora dos
procedimentos.
ID do erro: BC30188
Confira também
Procedimentos
Instrução Dim
BC40007: A propriedade padrão
'<propertyname1>' está em conflito
com a propriedade padrão
'<propertyname2>' em '<classname>' e
por isso deve ser declarada como
'Shadows'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma propriedade é declarada com o mesmo nome de uma definida na classe base.
Nessa situação, a propriedade nessa classe deve sombrear aquela de classe base.
Esta mensagem é um aviso. Shadows será considerado por padrão. Para obter mais
informações sobre como ocultar avisos ou tratar avisos como erros, consulte Configurar
avisos no Visual Basic.
ID do Erro: BC40007
Confira também
Sombras
Sombreamento no Visual Basic
BC30686: o acesso à propriedade
padrão é ambíguo entre os membros de
interface herdada
'<defaultpropertyname>' da interface
'<interfacename1>' e
'<defaultpropertyname>' da interface
'<interfacename2>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma interface herda de duas interfaces, cada uma delas declara uma propriedade
padrão com o mesmo nome. O compilador não pode resolver um acesso a essa
propriedade padrão sem qualificação. O exemplo a seguir ilustra essa situação.
VB
End Interface
End Interface
End Interface
End Sub
End Class
ID do erro: BC30686
VB
-ou-
VB
Implements Iface3
' Insert code to define Get and Set procedures for prop1.
End Property
' Insert code to define Get and Set procedures for prop2.
End Property
End Class
Confira também
Interfaces
BC30220: classe Delegate '<classname>'
não tem nenhum método Invoke.
Portanto, uma expressão desse tipo não
pode ser o destino de uma chamada de
método
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma chamada para Invoke por meio de um delegado falhou porque Invoke não está
implementada na classe de delegado.
ID do erro: BC30220
Confira também
Representantes
Instrução Delegate
Operador AddressOf
Instrução Dim
BC30029: As classes derivadas não
podem gerar eventos de classe base
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30029
Confira também
Instrução Event
Instrução RaiseEvent
Erro de E/S do dispositivo
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Tipos de Erro
A função 'Dir' deve ser chamada
primeiro com um argumento
'PathName'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma chamada inicial para a função Dir não inclui o argumento PathName . A primeira
chamada para Dir deve incluir um PathName , mas chamadas subsequentes para Dir
não precisam incluir parâmetros para recuperar o próximo item.
Confira também
Dir
BC30205: fim de instrução esperado
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30205
Confira também
Como: Quebrar e combinar instruções no código
Instruções
BC30140: Erro ao criar manifesto do
assembly: <mensagem de erro>
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Isso pode ocorrer se houver problemas com o arquivo de chave ou o contêiner de chave
especificado. Para marcar totalmente um assembly, é necessário fornecer um arquivo de
chave válido que contenha informações sobre as chaves públicas e privadas. Para
marcar um atraso em um assembly, é necessário marcar a caixa de seleção Somente
sinal de atraso e fornecer um arquivo de chave válido que contenha informações sobre
as informações de chave pública. A chave privada não é necessária quando um
assembly estiver marcado com atraso. Para obter mais informações, confira Como
assinar um assembly com um nome forte.
ID do Erro: BC30140
Confira também
Como assinar um assembly com um nome forte
Página de Assinatura, Designer de Projeto
Al.exe
Opções de comentários do Visual Studio
BC30136: Erro na criação de recursos
Win32: <mensagem de erro>
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30136
Confira também
Al.exe
Opções de comentários do Visual Studio
Erro no carregamento da DLL (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma DLL (biblioteca de vínculo dinâmico) é uma biblioteca especificada na cláusula Lib
de uma instrução Declare . Possíveis causas desse erro incluem:
Se a DLL referenciar outra DLL que não esteja presente, obtenha e disponibilize a
DLL referenciada.
Confira também
Instrução Declare
BC30137: Erro ao salvar o arquivo de
recurso Win32 temporário '<filename>':
<error message>
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30137
Confira também
Al.exe
Opções de comentários do Visual Studio
BC36810: ocorreram erros na
compilação dos esquemas XML no
projeto
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Ocorreram erros na compilação dos esquemas XML no projeto. Por isso, o IntelliSense
XML não está disponível.
ID do erro: BC36810
Se você estiver usando o Assistente de XML no Esquema, esse erro poderá ocorrer
se você inferir esquemas mais de uma vez da mesma origem. Nesse caso, você
pode remover os arquivos de esquema XSD existentes do projeto, adicionar um
novo modelo de item do XML no Esquema e, em seguida, fornecer o Assistente de
XML no Esquema com todas as fontes de XML aplicáveis para o projeto.
Se nenhum erro for identificado no esquema XSD, o compilador XML poderá não
ter informações suficientes para fornecer uma mensagem de erro detalhada. Você
poderá obter informações de erro mais detalhadas se garantir que os namespaces
de XML para os arquivos .xsd incluídos no projeto correspondam aos namespaces
de XML identificados para o Esquema de XML definido no Visual Studio.
Confira também
Janela Lista de Erros
XML
BC30722: A avaliação da expressão ou
da instrução atingiu o tempo limite
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30722
2. Simplifique sua expressão para que leve menos tempo para ser executada.
Confira também
Depurando no Visual Studio
BC31423: o evento '<eventname1>' não
pode implementar o evento
'<eventname2>' na interface
'<interface>' porque seus tipos
delegados '<delegate1>' e
'<delegate2>' não correspondem
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O Visual Basic não pode implementar um evento porque o tipo delegado do evento não
corresponde àquele na interface. Esse erro pode ocorrer quando você define vários
eventos em uma interface e tenta implementá-los junto com o mesmo evento. Um
evento só poderá implementar dois ou mais eventos se todos os eventos
implementados forem declarados usando a sintaxe As e especificar o mesmo tipo de
delegado.
ID do Erro: BC31423
— ou —
Confira também
Instrução Event
Instrução Delegate
Eventos
BC31084: Os eventos não podem ser
declarados com um tipo delegado que
tenha um tipo de retorno
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do Erro: BC31084
Confira também
Eventos
BC30594: Eventos de variáveis
WithEvents compartilhadas não podem
ser manipulados por métodos não
compartilhados
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma variável declarada com o modificador Shared é uma variável compartilhada. Uma
variável compartilhada identifica exatamente um local de armazenamento. Uma variável
declarada com o modificador WithEvents afirma que o tipo ao qual ela pertence
manipula o conjunto de eventos gerados por ela. Quando um valor é atribuído à
variável, a propriedade criada pela declaração WithEvents desvinculará qualquer
manipulador de eventos existente e vinculará o novo manipulador de eventos por meio
do método Add .
ID do Erro: BC30594
Confira também
Compartilhado
WithEvents
BC30491: A expressão não produz um
valor
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você tentou usar uma expressão que não produz um valor em um contexto de
produção de valor, como chamar Sub em um contexto no qual Function é esperada.
ID do erro: BC30491
Confira também
Tipos de Erro
BC31393: a expressão tem o tipo
'<typename>', que é um tipo restrito e
não pode ser usado para acessar
membros herdados de 'Object' ou
'ValueType'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma expressão é avaliada como um tipo que não pode ser demarcado pelo CLR
(Common Language Runtime), mas acessa um membro que requer conversão boxing.
Essa expressão tenta usar o tipo restrito para chamar um método herdado de Object ou
ValueType, como GetHashCode ou ToString. Para acessar esse método, o Visual Basic
tentou uma conversão de boxing implícita que causa esse erro.
ID do erro: BC31393
Confira também
Conversões implícitas e explícitas
BC30068: expressão é um valor e, por
isso, não pode ser o destino de uma
atribuição
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma instrução tenta atribuir um valor a uma expressão. Você pode atribuir um valor
apenas a uma variável gravável, propriedade ou elemento de matriz em tempo de
execução. O exemplo a seguir ilustra como esse erro pode ocorrer.
VB
maximum = 50
Acesso indireto. O acesso indireto por meio de um tipo de valor também pode gerar
esse erro. Considere o exemplo de código a seguir, que tenta definir o valor de Point
acessando-o indiretamente por meio de Location.
VB
exitButton.Location.X = 140
A última instrução do exemplo anterior falha porque cria apenas uma alocação
temporária para a estrutura Point retornada pela propriedade Location. Uma estrutura é
um tipo de valor e a estrutura temporária não é mantida após a execução da instrução.
O problema é resolvido declarando e usando uma variável para Location, o que cria
uma alocação mais permanente para a estrutura Point. O exemplo a seguir mostra o
código que pode substituir a última instrução do exemplo anterior.
VB
exitButton.Location = exitLocation
ID do erro: BC30068
Se a instrução fizer acesso indireto por meio de um tipo de valor (geralmente uma
estrutura), crie uma variável para manter o tipo de valor.
Confira também
Operadores e Expressões
Instruções
Solucionando problemas de procedimentos
BC36593: a expressão do tipo <type>
não pode ser consultada
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
A expressão do tipo <type> não pode ser consultada. Verifique se você não está
perdendo uma referência de assembly e/ou importação de namespace para o provedor
LINQ.
O namespace System.Linq permite que você consulte objetos como coleções e matrizes
usando LINQ.
O namespace System.Xml.Linq permite que você consulte XML usando LINQ e use
recursos XML no Visual Basic.
ID do erro: BC36593
2. Verifique se o tipo que você identificou como a origem da consulta pode ser
passível de consulta. Ou seja, um tipo que implementa IEnumerable<T> ou
IQueryable<T>.
Confira também
System.Linq
System.Data.Linq
System.Xml.Linq
Introdução a LINQ no Visual Basic
LINQ
XML
Referências e a instrução Imports
Instrução Imports (tipo e namespace .NET)
Página Referências, Designer de Projeto (Visual Basic)
BC42026: a expressão chama
recursivamente a propriedade que
contém '<propertyname>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O procedimento Get se comporta como Function , para que ele possa atribuir um valor
ao nome da propriedade e retornar o controle encontrando a instrução End Get . A
abordagem recomendada, no entanto, incluir a variável Private como o valor em uma
Instrução Return.
O procedimento Set se comporta como Sub , que não retorna um valor. Portanto, o
procedimento ou o nome da propriedade não tem um significado especial dentro de
um procedimento Set e você não pode armazenar um valor nele.
O exemplo a seguir ilustra a abordagem que pode causar esse erro, seguida pela
abordagem recomendada.
VB
Get
badProp = charValue
End Get
badProp = Value
End Set
End Property
Get
Return propValue
End Get
propValue = Value
End Set
End Property
End Class
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou como tratar avisos como erros, consulte Configurar Avisos no Visual
Basic.
ID do erro: BC42026
Confira também
Procedimentos de propriedade
Instrução Property
Instrução Set
Expressão muito complexa
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Operadores e Expressões
BC36550: O atributo 'Extension' pode
ser aplicado apenas às declarações
'Module', 'Sub' ou 'Function'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC36550
Exemplo
O exemplo a seguir define um método Print para o tipo de dados String .
VB
Imports StringUtility
Imports System.Runtime.CompilerServices
Namespace StringUtility
<Extension()>
Module StringExtensions
<Extension()>
End Sub
End Module
End Namespace
Confira também
Visão geral de atributos
Métodos de Extensão
Instrução Module
Arquivo já aberto
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Às vezes, um arquivo deve ser fechado antes que FileOpen ou outra operação possa
ocorrer. Entre as possíveis causas desse erro estão:
Confira também
FileOpen
O arquivo é muito grande para ser lido
em um array de bytes
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
O tamanho do arquivo que você está tentando ler em um array de bytes excede 4 GB. O
método My.Computer.FileSystem.ReadAllBytes não pode ler um arquivo que exceda
esse tamanho.
Confira também
ReadAllBytes
StreamReader
Access de arquivo com o Visual Basic
Como: ler texto usando arquivos com um StreamReader
O nome do arquivo ou da classe não foi
localizado durante a operação de
automação (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O nome especificado para nome ou classe de arquivo em uma chamada para a função
GetObject não foi encontrado.
Confira também
Tipos de Erro
Arquivo não localizado (erro de tempo
de execução do Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Arquivo não foi encontrado onde especificado. O erro tem as seguintes causas
possíveis:
Você tentou abrir um projeto ou carregar um arquivo de texto que não existe.
Confira também
Instrução Declare
BC33107: o primeiro operando em uma
expressão 'If' binária deve ser um tipo
anulável ou um tipo de referência
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma expressão If pode usar dois ou três argumentos. Quando você envia apenas dois
argumentos, o primeiro argumento deve ser um tipo de referência ou um tipo de valor
anulável. Se o primeiro argumento for avaliado para qualquer outra coisa que não seja
Nothing , seu valor será retornado. Se o primeiro argumento for avaliado para Nothing ,
o segundo argumento será avaliado e retornado.
Por exemplo, o código a seguir contém duas expressões If , uma com três argumentos
e outra com dois argumentos. As expressões calculam e retornam o mesmo valor.
VB
Console.WriteLine(If(firstChoice, secondChoice))
VB
Dim choice1 = 4
Dim choice2 = 5
ID do erro: BC33107
VB
Confira também
Operador If
Instrução If...Then...Else
Tipos de Valor Anulável
BC30148: A primeira instrução deste '
Sub New ' deve ser uma chamada para
'MyBase.New' ou 'MyClass.New' (Não
há nenhum construtor acessível sem
parâmetros)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Primeira instrução deste "Sub New" deve ser uma chamada para "MyBase.New" ou
"MyClass.New" porque a classe base "<basename>" de "<derivedname>" não tem um
"Sub New" acessível que pode ser chamado sem argumentos.
Em uma classe derivada, cada construtor deve chamar um construtor de classe base
( MyBase.New ). Se a classe base tiver um construtor sem parâmetros acessível a classes
derivadas, MyBase.New poderá ser chamado automaticamente. Caso contrário, um
construtor de classe base deve ser chamado com parâmetros e isso não pode ser feito
automaticamente. Nesse caso, a primeira instrução de cada construtor de classe
derivada deve chamar um construtor parametrizado na classe base ou chamar outro
construtor na classe derivada que faz uma chamada de construtor de classe base.
ID do erro: BC30148
Por exemplo, se a classe base tiver um construtor declarado como Public Sub
New(ByVal index as Integer) , a primeira instrução no construtor de classe derivada
Confira também
Noções básicas de herança
BC30920: a primeira instrução deste
'Sub New' deve ser uma chamada
explícita para MyBase.New' ou
'MyClass.New' porque
'<constructorname>' na classe base
'<baseclassname>' de
'<derivedclassname>' está marcado
como obsoleto: '<errormessage>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você pode marcar qualquer elemento de programação como não mais em uso
aplicando ObsoleteAttribute a ele. Se você fizer isso, poderá definir a propriedade
IsError do atributo como True ou False . Se você definir como True , o compilador
tratará uma tentativa de usar o elemento como um erro. Se você definir como False ou
deixar como padrão de False , o compilador emitirá um aviso se houver uma tentativa
de usar o elemento.
ID do erro: BC30920
Confira também
Visão geral de atributos
BC32096: 'For Each' no tipo
'<typename>' é ambíguo porque o tipo
implementa várias instâncias de
'System.Collections.Generic.IEnumerable
(Of T)'
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Uma instrução For Each especifica uma variável de iterador que tem mais de um
método GetEnumerator.
ID do erro: BC32096
Confira também
Instrução For Each...Next
Interfaces
BC31535: A referência de assembly
amigável <reference> é inválida
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC31535
Confira também
AssemblyName
Assemblies Amigáveis
BC42105: A função '<procedurename>'
não retorna um valor em todos os
caminhos do código
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Um procedimento Function tem pelo menos um caminho possível por meio do seu
código que não retorna um valor.
Se o controle for passado a Exit Function ou End Function e você não tiver atribuído
nenhum valor ao nome do procedimento, esse procedimento retornará o valor padrão
do tipo de dados de retorno. Para obter mais informações, consulte "Comportamento"
em Instrução Function.
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratá-los como erros, consulte Configurar Avisos no Visual Basic.
ID do Erro: BC42105
É mais fácil garantir que cada retorno do procedimento informe um valor se você
sempre usar a instrução Return . Se você fizer isso, a última instrução antes de End
Function deve ser uma Return .
Confira também
Procedimentos de função
Instrução Function
Página de Compilação, Designer de Projeto (Visual Basic)
BC30957: a avaliação de função está
desabilitada porque uma avaliação de
função anterior atingiu o tempo limite
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
As possíveis causas para uma chamada de procedimento para o tempo limite incluem
um loop infinito ou um loop sem fim. Para obter mais informações, confira Instrução
For...Next.
Um caso especial de um loop infinito é a recursão. Para obter mais informações, confira
Procedimentos Recursivos.
ID do erro: BC30957
Confira também
Depurando no Visual Studio
Navegar pelo Código com o Depurador
BC32124: parâmetros genéricos usados
como tipos de parâmetro opcionais
devem ter a classe restrita
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você deve sempre fornecer um valor padrão para cada parâmetro opcional. Se o
parâmetro for de um tipo de referência, o valor opcional deverá ser Nothing , um valor
válido para qualquer tipo de referência. No entanto, se o parâmetro for de um tipo de
valor, esse último será um tipo de dados elementar predefinido pelo Visual Basic. Isso
ocorre porque um tipo de valor composto, como uma estrutura definida pelo usuário,
não tem valor padrão válido.
Ao usar um parâmetro de tipo para um opcional, você deve garantir que ele seja de um
tipo de referência para evitar a possibilidade de um tipo de valor sem valor padrão
válido. Isso significa que você deve restringir o parâmetro de tipo com a palavra-chave
Class ou com o nome de uma classe específica.
ID do erro: BC32124
Confira também
Tipos genéricos no Visual Basic
Lista de Tipos
Instrução Class
Parâmetros Opcionais
Estruturas
Nothing
BC31103: o acessador 'Get' da
propriedade '<propertyname>' não está
acessível
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma instrução tenta recuperar o valor de uma propriedade quando ela não tem acesso
ao procedimento da propriedade Get .
Se a Instrução Get for marcada com um nível de acesso mais restritivo do que sua
Instrução Property, uma tentativa de ler o valor da propriedade poderá falhar nos
seguintes casos:
A instrução Get está marcada como Private e o código de chamada está fora da
classe ou estrutura na qual a propriedade está definida.
A instrução Get está marcada como Protected e o código de chamada não está na
classe ou estrutura na qual a propriedade está definida, nem em uma classe
derivada.
A instrução Get está marcada como Friend e o código de chamada não está no
mesmo assembly no qual a propriedade está definida.
ID do erro: BC31103
Confira também
Procedimentos de propriedade
Como declarar uma propriedade com níveis de acesso mistos
BC30506: A cláusula de identificadores
requer uma variável WithEvents definida
no tipo recipiente ou em um de seus
tipos base
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você não forneceu uma WithEvents variável em sua Handles cláusula. A Handles
palavra-chave no final de uma declaração de procedimento faz com que ela manipule
eventos gerados por uma variável de objeto declarada usando a WithEvents palavra-
chave.
ID do erro: BC30506
Exemplo
No exemplo a seguir, o Visual Basic gera um erro BC30506 do compilador porque a
palavra-chave WithEvents não é usada na definição da System.Timers.Timer instância.
VB
Imports System.Timers
Module Module1
Sub Main()
Console.ReadKey()
_timer1.Start()
Console.ReadKey()
End Sub
End Sub
End Module
O exemplo a seguir é compilado com êxito porque a _timer1 variável é definida com a
WithEvents palavra-chave:
VB
Imports System.Timers
Module Module1
Sub Main()
Console.ReadKey()
_timer1.Start()
Console.ReadKey()
End Sub
End Sub
End Module
Confira também
Alças
BC30203: Identificador esperado
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30203
Confira também
Nomes de elementos declarados
Visão geral de atributos
BC30033: O identificador é muito longo
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30033
Confira também
Nomes de elementos declarados
BC30996: Inicializador esperado
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você tentou declarar uma instância de uma classe usando um inicializador de objeto no
qual a lista de inicialização está vazia, como mostra o exemplo a seguir.
ID do Erro: BC30996
Confira também
Inicializadores de objeto: tipos nomeados e anônimos
Como declarar um objeto usando um inicializador de objeto
Entrada passou do final do arquivo
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Input
EOF
Seek
Loc
Erro interno ocorrido em <location>
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Ocorreu um erro interno. A linha na qual ocorreu está contida na mensagem de erro.
Confira também
Noções básicas do depurador
BC41999: Conversão implícita de
'<typename1>' em '<typename2>' ao
copiar o valor do parâmetro 'ByRef'
'<parametername>' de volta para o
argumento correspondente.
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar
avisos ou tratá-los como erros, consulte Configurar Avisos no Visual Basic.
ID do Erro: BC41999
Confira também
Procedimentos
Parâmetros e Argumentos de Procedimento
Passar argumentos por valor e por referência
Conversões implícitas e explícitas
BC30020: 'Is' requer operandos que
tenham tipos de referência, mas este
operando tem o tipo de valor
'<typename>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30020
Confira também
Operador Is
Operador Like
Operadores de comparação
BC32128: o operando 'IsNot' do tipo
'typename' só pode ser comparado a
'Nothing', porque 'typename' é um tipo
que permite valor nulo
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma variável declarada como valor de tipo anulável foi comparada a uma expressão
diferente de Nothing usando o operador IsNot .
ID do erro: BC32128
VB
End If
End If
Confira também
Tipos de Valor Anulável
Operador IsNot
BC30801: rótulos que são números são
seguidos de dois pontos
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Os números de linha seguem as mesmas regras que outros tipos de rótulos e devem
conter dois pontos.
ID do erro: BC30801
VB
400: X += 1
Confira também
Instrução GoTo
BC42326: a expressão lambda não será
removida deste manipulador de eventos
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Quando expressões lambda são usadas com manipuladores de eventos, talvez você não
veja o comportamento esperado. O compilador gera um novo método para cada
definição de expressão lambda, mesmo que elas sejam idênticas. Portanto, o código a
seguir exibe False .
VB
Module Module1
Sub Main()
Console.WriteLine(fun1 = fun2)
End Sub
End Module
Quando expressões lambda são usadas com manipuladores de eventos, isso pode
causar resultados inesperados. No exemplo a seguir, a expressão lambda adicionada por
AddHandler não é removida pela instrução RemoveHandler .
VB
Module Module1
Sub Main()
' for a match to remove. However, this lambda is not the same
End Sub
End Module
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar
avisos ou como tratar avisos como erros, consulte Configurar avisos no Visual Basic.
ID do erro: BC42326
VB
Module Module1
Sub Main()
' Use the variable again when you want to remove the listener.
End Sub
End Module
Confira também
Expressões Lambda
Conversão de delegado reduzida
Eventos
BC36635: as expressões lambda não são
válidas na primeira expressão de uma
instrução 'Select Case'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você não pode usar uma expressão lambda para a expressão de teste em uma instrução
Select Case . As definições de expressão lambda retornam funções, e a expressão de
teste de uma instrução Select Case deve ser um tipo de dados elementar.
VB
ID do erro: BC36635
VB
End Select
Confira também
Expressões Lambda
Instrução If...Then...Else
Instrução Select...Case
BC42017: resolução de associação tardia;
poderiam ocorrer erros de runtime
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Quando você declara uma variável como Object , o compilador deve executar a
associação tardia, o que causa operações extras em tempo de execução. Ela também
expõe seu aplicativo a possíveis erros em tempo de execução. Por exemplo, se você
atribuir Form à variável Object e tentar acessar a propriedade
XmlDocument.NameTable, o runtime gerará MemberAccessException porque a classe
Form não expõe uma propriedade NameTable .
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar os avisos como erros, consulte Configurar avisos no Visual Basic.
ID do erro: BC42017
Confira também
Associação Antecipada e Tardia
Declaração de Variável do Objeto
BC30933: Não é possível aplicar a
resolução de sobrecarga com associação
tardia a “<procedurename>” porque a
instância de acesso é um tipo de
interface
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30933
Observe que ele não ajuda a converter o objeto de referência para a interface
subjacente. Você deve converter o argumento para evitar esse erro.
Exemplo
O exemplo a seguir mostra uma chamada para um procedimento Sub sobrecarregado
que causa esse erro em tempo de compilação.
VB
Module m1
Interface i1
End Interface
Class c1
Implements i1
End Sub
End Class
Sub Main()
refer.s1(o1)
End Sub
End Module
Você pode corrigir o erro alterando a chamada para qualquer uma das seguintes linhas
de código:
VB
refer.s1(CType(o1, Integer))
refer.s1(CType(o1, Double))
Cada uma das linhas de código anteriores converte explicitamente a variável Object o1
em um dos tipos de parâmetro definidos para as sobrecargas.
Confira também
Sobrecarga de procedimento
Resolução de Sobrecarga
Função CType
BC30157: '.' ou '!' à esquerda só podem
aparecer dentro de uma instrução 'With'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Um ponto final (.) ou ponto de exclamação (!) que não está dentro de um bloco With
ocorre sem uma expressão à esquerda. O acesso de membro ( . ) e o acesso de membro
do dicionário ( ! ) exigem uma expressão especificando o elemento que contém o
membro. Isso deve aparecer imediatamente à esquerda do acessador ou como o
destino de um bloco With que contém o acesso do membro.
ID do erro: BC30157
Confira também
Caracteres especiais no código
Instrução With...End With
BC30494: A linha é muito longa
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30494
Confira também
Tipos de Erro
BC30830: As instruções 'Line' não são
mais compatíveis
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
As instruções Line não são mais compatíveis. A funcionalidade de E/S do arquivo está
disponível como Microsoft.VisualBasic.FileSystem.LineInput e a funcionalidade
gráfica está disponível como System.Drawing.Graphics.DrawLine .
ID do erro: BC30830
Confira também
System.IO
System.Drawing
Access de arquivo com o Visual Basic
BC36563: O método não tem uma
assinatura compatível com o delegado
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC36563
Confira também
Operador AddressOf
Instrução Delegate
Resolução de Sobrecarga
Tipos genéricos no Visual Basic
BC32126: Os métodos de
'System.Nullable(Of T)' não podem ser
usados como operandos do operador
'AddressOf'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC32126
Escreva uma classe que encapsula o método de Nullable<T> que você deseja usar.
No exemplo a seguir, a classe NullableWrapper define um novo método chamado
GetValueOrDefault . Como esse novo método não é um membro de Nullable<T>,
ele pode ser aplicado a nullInstance , uma instância de um tipo que permite valor
nulo, para formar um argumento para AddressOf .
VB
Module Module1
Sub Main()
Of Integer)(nullInstance)).GetValueOrDefault
Console.WriteLine(del.Invoke())
End Sub
End Sub
Return m_Value.Value
End Function
End Class
End Module
Confira também
Nullable<T>
Operador AddressOf
Tipos de Valor Anulável
Tipos genéricos no Visual Basic
BC30617: instruções 'Module' só podem
ocorrer no nível de namespace ou
arquivo
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30617
Confira também
Instrução Module
BC40031: o nome <membername> não
é compatível com CLS
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar os avisos como erros, consulte Configurar avisos no Visual Basic.
ID do Erro: BC40031
Confira também
Nomes de elementos declarados
Convenções de nomenclatura do Visual Basic
BC30451: o nome '<name>' não foi
declarado
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30451
instrução Imports.
6. Se você estiver tentando compilar um projeto no estilo SDK (um projeto com um
arquivo *.vbproj que começa com a linha <Project Sdk="Microsoft.NET.Sdk"> ), e a
mensagem de erro se referir a um tipo ou membro no assembly
Microsoft.VisualBasic.dll, configure seu aplicativo para compilar com uma
referência à Biblioteca de Runtime do Visual Basic. Por padrão, um subconjunto da
biblioteca é inserido em seu assembly em um projeto no estilo SDK.
VB
Imports Microsoft.VisualBasic.CompilerServices
End Sub
End Module
XML
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
</ItemGroup>
<PropertyGroup>
<VBRuntime>Default</VBRuntime>
<OutputType>Exe</OutputType>
<RootNamespace>vbruntime</RootNamespace>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
</Project>
Confira também
Resumo de Declarações e Constantes
Convenções de nomenclatura do Visual Basic
Nomes de elementos declarados
Referências a elementos declarados
BC40039: O nome <> no namespace
raiz <> não é compatível com CLS
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar
avisos ou tratá-los como erros, consulte Configurar avisos no Visual Basic.
ID do Erro: BC40039
Confira também
Instrução Namespace
Namespaces no Visual Basic
-rootnamespace
Página de Aplicativo, Designer de Projeto (Visual Basic)
Nomes de elementos declarados
Convenções de nomenclatura do Visual Basic
BC40056: o namespace ou o tipo
especificado em Imports
'<qualifiedelementname>' não contém
nenhum membro público ou não pode
ser localizado
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Uma instrução Imports especifica um elemento contido que não pode ser encontrado
ou não define nenhum membro Public .
Um elemento contendo pode ser um namespace, uma classe, uma estrutura, um módulo,
uma interface ou uma enumeração. O elemento de contenção contém membros, como
variáveis, procedimentos ou outros elementos de contenção.
Se o compilador não puder localizar o elemento que o contém, ele não poderá resolver
as referências que o utilizam. Se ele encontrar o elemento, mas o elemento não expor
nenhum membro Public , nenhuma referência poderá ser bem-sucedida. Em ambos os
casos, não faz sentido importar o elemento.
VB
ID do Erro: BC40056
Confira também
Instrução Imports (tipo e namespace .NET)
Instrução Namespace
Público
Namespaces no Visual Basic
Referências a elementos declarados
BC40057: o namespace ou o tipo
especificado no nível de projeto Imports
'<qualifiedelementname>' não contém
nenhum membro público ou não pode
ser localizado
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Um elemento contendo pode ser um namespace, uma classe, uma estrutura, um módulo,
uma interface ou uma enumeração. O elemento de contenção contém membros, como
variáveis, procedimentos ou outros elementos de contenção.
Se o compilador não puder localizar o elemento que o contém, ele não poderá resolver
as referências que o utilizam. Se ele encontrar o elemento, mas o elemento não expor
nenhum membro Public , nenhuma referência poderá ser bem-sucedida. Em ambos os
casos, não faz sentido importar o elemento.
Use o Designer de Projeto para especificar elementos a serem importados. Use a seção
Namespaces importados da página Referências. Você pode acessar o Designer de
Projetos clicando duas vezes no ícone Meu Projeto no Gerenciador de Soluções.
ID do Erro: BC40057
Confira também
Página Referências, Designer de Projeto (Visual Basic)
Gerenciando propriedades de solução e de projeto
Público
Namespaces no Visual Basic
Referências a elementos declarados
Índice da matriz de propriedade
necessário
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Esse valor de propriedade é composto por uma matriz, em vez de um único valor. Você
não especificou o índice da matriz de propriedade que você tentou acessar.
Confira também
Tipos de Erro
Opções de comentários do Visual Studio
BC36532: a função aninhada não tem
uma assinatura que seja compatível com
o delegado '<delegatename>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma expressão lambda foi atribuída a um delegado que tem uma assinatura
incompatível. Por exemplo, no código a seguir, o delegado Del tem dois parâmetros
inteiros.
VB
O erro será gerado se uma expressão lambda com um argumento for declarada como
tipo Del :
VB
ID do erro: BC36532
Confira também
Conversão de delegado reduzida
Expressões Lambda
BC30737: Nenhum método 'Main'
acessível com uma assinatura
apropriada foi encontrado em '<name>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Os aplicativos de linha de comando devem ter um Sub Main definido. Main deve ser
declarado como Public Shared se fosse definido em uma classe ou como Public se
fosse definido em um módulo.
ID do erro: BC30737
Confira também
Estrutura de um programa Visual Basic
Procedimentos
BC40033: <membername> não
compatível com CLS não é permitido em
interfaces compatíveis com CLS
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar
avisos ou tratá-los como erros, consulte Configurar Avisos no Visual Basic.
ID do Erro: BC40033
Se você precisar de conformidade com CLS e não tiver controle sobre o código-
fonte da interface ou se ele não se qualificar quanto à conformidade, defina esse
membro em uma classe diferente.
Se você precisar que esse membro permaneça na sua interface atual, remova o
CLSCompliantAttribute de sua definição ou marque-o como
<CLSCompliant(False)> .
Confira também
Instrução Interface
BC36629: Inferência de tipo que permite
valor nulo não tem suporte neste
contexto
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
VB
Dim a? As Integer
Dim b As Integer?
No entanto, você não pode usar a declaração anulável em combinação com a inferência
de tipos. Os exemplos a seguir causam esse erro.
VB
' Dim c? = 10
' Dim d? = a
ID do erro: BC36629
Confira também
Tipos de Valor Anulável
Inferência de Tipo de Variável Local
BC30106: o número de índices excede o
número de dimensões da matriz
indexada
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O número de índices usados para acessar um elemento de matriz deve ser exatamente
o mesmo que a classificação da matriz, ou seja, o número de dimensões declaradas para
ele.
ID do error: BC30106
VB
gameBoard(1, 1, 1) = "X"
gameBoard(2, 1, 1) = "O"
gameBoard(0, 0) = "X"
gameBoard(1, 0) = "O"
Confira também
matrizes
O objeto ou a classe não dá suporte ao
conjunto de eventos
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você tentou usar uma WithEvents variável com um componente que não pode
funcionar como uma fonte de evento para o conjunto de eventos especificado. Por
exemplo, você queria afundar os eventos de um objeto e, em seguida, criar outro objeto
que Implements o primeiro objeto. Embora você possa pensar que pode afundar os
eventos do objeto implementado, nem sempre é o caso. Implements implementa
apenas uma interface para métodos e propriedades. WithEvents não há suporte para
privados UserControls , pois as informações de tipo necessárias para acionar não
ObjectEvent estão disponíveis em tempo de execução.
Confira também
WithEvents
Instrução Implements
Objeto obrigatório (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Tipos de Erro
Variável de objeto ou variável com bloco
não definida
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma variável de objeto inválida está sendo referenciada. Esse erro pode ocorrer por
várias razões:
Uma variável foi declarada sem especificar um tipo. Se uma variável for declarada
sem especificar um tipo, será padrão digitar Object .
Por exemplo, uma variável declarada com Dim x seria do tipo Object; uma
variável declarada com Dim x As String seria do tipo String .
Dica
Você está tentando fazer referência a um objeto que foi definido como Nothing .
Você está tentando acessar um elemento de uma variável de matriz que não foi
declarado corretamente.
Por exemplo, uma matriz declarada como products() As String disparará o erro
se você tentar fazer referência a um elemento da matriz products(3) = "Widget" . A
matriz não tem elementos e é tratada como um objeto.
Você está tentando acessar o código em um bloco With...End With antes que ele
seja inicializado. Um bloco With...End With deve ser inicializado executando o
ponto de entrada da instrução With .
7 Observação
Em versões anteriores do Visual Basic ou VBA, esse erro também foi disparado
atribuindo um valor a uma variável sem usar a palavra-chave Set ( x = "name" em
vez de Set x = "name" ). A palavra-chave Set não é mais válida no .Net do Visual
Basic.
Para corrigir este erro
1. Defina Option Strict como On adicionando o seguinte código ao início do
arquivo:
VB
Option Strict On
2. Se você não quiser habilitar Option Strict , pesquise quaisquer variáveis no código
que foram especificadas sem um tipo ( Dim x em vez de Dim x As String ) e
adicione o tipo pretendido à declaração.
3. Verifique se você não está se referindo a uma variável de objeto definida como
Nothing . Pesquise em seu código a palavra-chave Nothing e revise o código para
que o objeto não seja definido como Nothing até que você o tenha referenciado.
Confira também
Declaração de Variável do Objeto
Instrução ReDim
Instrução With...End With
BC33000: a declaração do operador
deve ser uma das seguintes: +,-,*,,/,^, &,
Like, Mod, And, Or, Xor, Not, <<, >>...
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você pode declarar apenas um operador qualificado para sobrecarga. A tabela a seguir
lista os operadores que você pode declarar.
Type Operadores
Binário + , - , * , / , \ , & , ^ , >> , << , = , <> , > , >= , < , <= , And , Like , Mod , Or , Xor
ID do Erro: BC33000
Confira também
Instrução Operator
Procedimentos do operador
Como definir um operador
Como definir um operador de conversão
Instrução Function
BC30202: "Opcional" esperado
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30202
Confira também
Parâmetros Opcionais
BC30812: Parâmetros opcionais devem
especificar um valor padrão
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Parâmetros opcionais devem fornecer valores padrão que podem ser usados se nenhum
parâmetro for fornecido por um procedimento de chamada.
ID do Erro: BC30812
Exemplo
O seguinte exemplo gera o erro BC30812:
VB
End Sub
VB
End Sub
Confira também
Opcional
O ordinal não é válido
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sua chamada para uma DLL (biblioteca de vínculo dinâmico) indicou o uso de um
número em vez de um nome de procedimento, usando a sintaxe #num . Esse erro tem as
seguintes causas possíveis:
Uma biblioteca de tipos tem uma declaração inválida, resultando no uso interno
de um número ordinal inválido.
Confira também
Instrução Declare
BC2004: sem memória
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC2004
Certifique-se de que a memória seja liberada quando ela não for mais necessária.
Confira também
Tipos de Erro
Sem espaço na pilha (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
A pilha é uma área de trabalho de memória que cresce e diminui dinamicamente com as
demandas do programa em execução. Os limites dela foram excedidos.
6. Verifique se você não causou uma "cascata de eventos" disparando um evento que
chama um procedimento de evento já na pilha. Uma cascata de eventos é
semelhante a uma chamada de procedimento recursivo não numerada, mas é
menos óbvia, já que a chamada é feita pelo Visual Basic em vez de uma chamada
explícita no código. Use a caixa de diálogo Calls para exibir quais procedimentos
estão ativos na pilha.
Confira também
Janelas de memória
Fora do espaço da cadeia de caracteres
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Com o Visual Basic, você pode usar cadeias de caracteres muito grandes. No entanto, os
requisitos de outros programas e a maneira como você trabalha com suas cadeias de
caracteres ainda podem causar esse erro.
Confira também
Tipos de Erro
Resumo de manipulação da cadeia de caracteres
BC30036: Estouro (erro do Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Um literal representa um valor fora dos limites do tipo de dados ao qual está sendo
atribuído.
ID do erro: BC30036
Confira também
Data Types
Estouro (erro de tempo de execução do
Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Um estouro resulta quando você tenta uma atribuição que excede os limites do destino
dessa atribuição.
Confira também
Int32.MaxValue
Double.MaxValue
Data Types
Tipos de Erro
demarcador não localizado
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Tipos de Erro
Erro de acesso ao demarcador/arquivo
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
3. Verifique se você não tentou abrir um arquivo somente leitura no modo sequencial
Output ou Append . Se esse for o caso, abra o arquivo no modo Input ou altere o
Confira também
Tipos de Erro
Permissão negada (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Foi feita uma tentativa de gravar em um disco protegido contra gravação ou de acessar
um arquivo bloqueado.
2. Verifique se outro processo não bloqueou o arquivo e aguarde para abri-lo até
que o outro processo o libere.
Confira também
Tipos de Erro
A chamada de procedimento ou o
argumento não é válido (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Tipos de Erro
BC42107: A propriedade
'<propertyname>' não retorna um valor
em todos os caminhos de código
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Um procedimento Get da propriedade tem pelo menos um caminho possível por meio
do seu código que não retorna um valor.
Se o controle for passado a Exit Property ou End Get e você não tiver atribuído
nenhum valor ao nome da propriedade, o procedimento Get retornará o valor padrão
do tipo de dados da propriedade. Para obter mais informações, consulte
"Comportamento" em Instrução Function.
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar avisos como erros, confira Configuração de avisos no Visual
Basic.
ID do erro: BC42107
É mais fácil garantir que cada retorno do procedimento retorne um valor se você
sempre usar a instrução Return . Se você fizer isso, a última instrução antes de End
Get deve ser uma instrução Return .
Confira também
Procedimentos de propriedade
Instrução Property
Instrução Get
O índice de matriz da propriedade não é
válido
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
matrizes
Procedimento let de propriedade não
definido e procedimento get de
propriedade não retornou um objeto
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
2. Examine o método Add usado para adicionar o objeto à coleção para verificar se a
sintaxe está correta e se todos os identificadores foram escritos corretamente.
Confira também
Collection
Propriedade não localizada
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
2. Verifique a documentação do objeto para garantir que você não esteja tentando
acessar algo como uma propriedade de "texto" quando o objeto realmente dá
suporte a uma "legenda" ou propriedade nomeada da mesma forma.
Confira também
Tipos de Erro
Propriedade ou método não localizado
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Tipos de Erro
BC36633: A variável de intervalo
<variable> oculta uma variável em um
bloco delimitador, uma variável de
intervalo definida anteriormente ou
uma variável declarada implicitamente
em uma expressão de consulta
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do Erro: BC36633
Confira também
Introdução a LINQ no Visual Basic
Cláusula From
Cláusula Let
Cláusula Aggregate
Cláusula Select
BC36599: o nome da variável de
intervalo só pode ser inferido a partir de
um nome simples ou qualificado sem
argumentos
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC36599
VB
Confira também
Introdução a LINQ no Visual Basic
Cláusula Select
BC30969: Referência necessária para o
assembly '<assemblyidentity>'
contendo o tipo '<typename>', mas não
foi possível encontrar uma referência
adequada devido à ambiguidade entre
os projetos '<projectname1>' e
'<projectname2>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma expressão usa um tipo, como uma classe, estrutura, interface, enumeração ou
delegado, que é definido fora do projeto. No entanto, você tem referências de projeto
para mais de um assembly definindo esse tipo.
Para acessar um tipo definido em outro assembly, o compilador do Visual Basic deve ter
uma referência para esse assembly. Essa deve ser uma referência única e inequívoca que
não cause referências circulares entre projetos.
ID do erro: BC30969
Confira também
Gerenciando referências em um projeto
ID do erro: BC30007
Confira também
Gerenciando referências em um projeto
Solução de Problemas de Referências Quebradas
BC35000: a operação solicitada não está
disponível porque a função de
biblioteca de runtime '<function>' não
foi definida.
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O Visual Basic está tentando fazer uma chamada interna para a função no Runtime do
Visual Basic (Microsoft.VisualBasic.dll) que não pode ser encontrada.
ID do erro: BC35000
Esse erro ocorre em projetos no estilo SDK (projetos com um arquivo *.vbproj que
começa com a linha <Project Sdk="Microsoft.NET.Sdk"> ). Por padrão, apenas um
subconjunto do assemblyMicrosoft.VisualBasic.dll é inserido no assembly do aplicativo e
a <function> não está incluída nesse subconjunto.
XML
<VBRuntime>Default</VBRuntime>
Confira também
opção do compilador -vbruntime
Retomar sem erro
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Instrução Resume
Instrução On Error
BC40027: o tipo de retorno da função
'<procedurename>' não é compatível
com CLS
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Os seguintes tipos de dados do Visual Basic não são compatíveis com CLS:
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar os avisos como erros, consulte Configurar avisos no Visual Basic.
ID do Erro: BC40027
Uma instrução tenta armazenar o valor de uma propriedade quando ela não tem acesso
ao procedimento da propriedade Set .
Se a Instrução Set for marcada com um nível de acesso mais restritivo do que sua
Instrução Property, uma tentativa de definir o valor da propriedade poderá falhar nos
seguintes casos:
A instrução Set está marcada como Private e o código de chamada está fora da
classe ou estrutura na qual a propriedade está definida.
A instrução Set está marcada como Protected e o código de chamada não está na
classe ou estrutura na qual a propriedade está definida, nem em uma classe
derivada.
A instrução Set está marcada como Friend e o código de chamada não está no
mesmo assembly no qual a propriedade está definida.
ID do erro: BC31102
Confira também
Procedimentos de propriedade
Como declarar uma propriedade com níveis de acesso mistos
Não é possível excluir algumas
subchaves
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Foi feita uma tentativa de excluir uma chave do Registro, mas a operação falhou, pois
algumas subchaves não podem ser excluídas. Normalmente, isso ocorre devido à falta
de permissões.
Confira também
Microsoft.VisualBasic.MyServices.RegistryProxy
DeleteSubKey
RegistryPermission
BC32005: A instrução não pode finalizar
um bloco fora de uma instrução 'If' de
linha
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma instrução If de linha única contém várias instruções separadas por dois-pontos (:),
uma das quais é uma instrução End para um bloco de controle fora de If de linha
única. Instruções If de linha única não usam a instrução End If .
ID do erro: BC32005
Confira também
Instrução If...Then...Else
BC30001: A instrução não é válida em
um namespace
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30001
Confira também
Escopo no Visual Basic
Namespaces no Visual Basic
BC30024: a instrução não é válida
dentro de um método/lambda de várias
linhas
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30024
Confira também
Instrução Sub
Instrução Function
Instrução Get
Instrução Set
BC30648: as constantes da cadeia de
caracteres devem terminar com aspas
duplas
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ErrorID: BC30648
Confira também
Cadeias de caracteres
BC30941: a estrutura '<structurename>'
deve conter pelos menos uma variável
membro da instância ou pelo menos
uma declaração de evento da instância
não marcada como 'Personalizada'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma definição de estrutura não inclui variáveis ou eventos não personalizados e não
compartilhados.
Cada estrutura deve ter uma variável ou um evento que se aplica a cada instância
específica (não compartilhada) em vez de todas as instâncias coletivamente
(Compartilhada). Constantes, propriedades e procedimentos não compartilhados não
atendem a esse requisito. Além disso, se não houver variáveis não compartilhadas e
apenas um evento não compartilhado, esse último não poderá ser um evento Custom .
ID do Erro: BC30941
Confira também
Estruturas
Como: Declarar uma estrutura
Instrução Structure
BC30420: 'Sub Main' não foi encontrado
em '<name>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sub Main está ausente ou o local errado foi especificado para ele.
ID do erro: BC30420
Confira também
Instrução Sub
Procedimento principal no Visual Basic
Sub ou função não definida (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sub ou Function deve ser definida para ser chamada. Possíveis causas do erro incluem:
2. Localize o nome do projeto que contém o procedimento que você deseja chamar
na caixa de diálogo Referências. Se ele não aparecer, clique no botão Procurar
para pesquisá-lo. Marque a caixa de seleção à esquerda do nome do projeto e
clique em OK.
Confira também
Tipos de Erro
Gerenciando referências em um projeto
Instrução Sub
Instrução Function
Subscrito fora do intervalo (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Um subscrito de matriz não é válido porque está fora do intervalo permitido. O valor
subscrito mais baixo para uma dimensão é sempre 0, e o valor de subscrito mais alto é
retornado pelo método GetUpperBound dessa dimensão.
Confira também
Array.GetUpperBound
matrizes
TextFieldParser não pode concluir a
operação de leitura porque o tamanho
máximo do buffer foi excedido
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
A operação não pode ser concluída porque o tamanho máximo do buffer (10.000.000
bytes) foi excedido.
Confira também
OpenTextFieldParser
TextFieldParser
Como: ler de arquivos de texto com vários formatos
Analisando arquivos de texto com o objeto TextFieldParser
BC42110: o tipo da variável
'<variablename>' não será inferido
porque está associado a um campo em
um escopo delimitador
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma variável de controle de loop no código tem o mesmo nome que um campo da
classe ou outro escopo delimitador. Como a variável de controle é usada sem uma
cláusula As , ela é associada ao campo no escopo delimitador e o compilador não cria
uma nova variável para ela ou infere seu tipo.
VB
Class Customer
Sub Main()
For Index = 1 To 10
' ...
Next
End Sub
End Class
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar
avisos ou como tratar avisos como erros, consulte Configurar avisos no Visual Basic.
ID do erro: BC42110
Para resolver este aviso
Torne a variável de controle de loop local alterando seu nome para um
identificador que também não seja o nome de um campo da classe.
VB
For I = 1 To 10
VB
For Me.Index = 1 To 10
VB
Exemplo
O código a seguir mostra o exemplo anterior com a primeira correção efetiva.
VB
Class Customer
Sub Main()
For I = 1 To 10
' ...
Next
End Sub
End Class
Confira também
Instrução Option Infer
Instrução For Each...Next
Instrução For...Next
Como fazer referência à instância atual de um objeto
Inferência de Tipo de Variável Local
Me, My, MyBase e MyClass
Esta matriz é fixa ou está
temporariamente bloqueada (Visual
Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Usar ReDim para alterar o número de elementos de uma matriz de tamanho fixo.
Tentar atribuir um valor a uma variável Variant que contém uma matriz, mas
Variant está bloqueada no momento.
Confira também
matrizes
Esta chave já está associada a um
elemento desta coleção
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
A chave especificada para um membro de coleção já identifica outro membro dela. Uma
chave é uma cadeia de caracteres especificada no método Add que identifica
exclusivamente um membro específico de uma coleção.
Confira também
Tipos de Erro
Muitos arquivos
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Foram criados mais arquivos no diretório raiz do que o sistema operacional permite, ou
foram abertos mais arquivos do que o número especificado na configuração files=, no
seu arquivo CONFIG.SYS.
Confira também
Tipos de Erro
BC30251: o tipo '<typename>' não tem
construtores
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Um tipo não suporta uma chamada para Sub New() . Uma possível causa é um
compilador corrompido ou arquivo binário.
ID do erro: BC30251
Confira também
Objetos e Classes
Opções de comentários do Visual Studio
BC40041: o tipo <typename> não é
compatível com CLS
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma variável, propriedade ou retorno de função é declarada com um tipo de dados que
não é compatível com CLS.
Os seguintes tipos de dados do Visual Basic não são compatíveis com CLS:
ID do erro: BC40041
Se o aplicativo não precisar ser compatível com CLS, não será necessário alterar
nada. No entanto, você deve estar ciente de sua não conformidade.
BC30002: o tipo '<typename>' não está
definido
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
A instrução fez referência a um tipo que não foi definido. Você pode definir um tipo em
uma instrução de declaração, como Enum , Structure , Class ou Interface .
ID do erro: BC30002
Verifique se o namespace do tipo não está redefinido em seu projeto. Se for, use a
palavra-chave Global para qualificar totalmente o nome do tipo. Por exemplo, se
um projeto definir um namespace nomeado System , o tipo System.Object não
poderá ser acessado, a menos que seja totalmente qualificado com a palavra-
chave Global : Global.System.Object .
Confira também
Namespaces no Visual Basic
Instrução Enum
Instrução Structure
Instrução Class
Instrução Interface
Gerenciando referências em um projeto
BC36564: Não foi possível inferir
argumentos de tipo do delegado
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC36564
Confira também
Tipos genéricos no Visual Basic
Operador AddressOf
Procedimentos genéricos no Visual Basic
Lista de Tipos
Métodos de Extensão
Tipos incompatíveis (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você tentou converter um valor em outro tipo de uma forma que não é válida.
2. Verifique se você não passou um objeto para um procedimento que espera uma
única propriedade ou valor.
Confira também
Tipos de Erro
BC30982: o tipo de '<variablename>'
não pode ser inferido porque os limites
de loop e a variável step não são
ampliados com o mesmo tipo
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você escreveu um loop For...Next no qual o compilador não pode inferir um tipo de
dados para a variável de controle de loop porque as seguintes condições são
verdadeiras:
Os limites de loop e a variável de etapa contêm pelo menos dois tipos de dados.
VB
Dim m = 0
Dim n = 20
' Next
ID do erro: BC30982
Dim stepVar = 1
-ou-
VB
VB
Next
Confira também
Val
Instrução For...Next
Conversões implícitas e explícitas
Inferência de Tipo de Variável Local
Instrução Option Infer
Funções de conversão do tipo
Conversões de Widening e Narrowing
BC40025: o tipo de membro
“<membername>” não é compatível
com CLS
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
O tipo de dados especificado para esse membro não faz parte do CLS (Independência
da linguagem e componentes independentes da linguagem). Isso não é um erro em seu
componente, pois o .NET Framework e o Visual Basic dão suporte a esse tipo de dados.
No entanto, outro componente escrito em código estritamente compatível com CLS
pode não dar suporte a esse tipo de dados. Esse componente pode não ser capaz de
interagir com êxito com o seu componente.
Os seguintes tipos de dados do Visual Basic não são compatíveis com CLS:
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar avisos como erros, consulte Configurar Avisos no Visual Basic.
ID do Erro: BC40025
Se você estiver fazendo interface com um componente não escrito para o .NET
Framework, poderá determinar, por meio de reflexão ou da documentação, se ele
dá suporte a esse tipo de dados. Se isso acontecer, você não precisa mudar nada.
Se você estiver fazendo interface com um componente que não dá suporte a esse
tipo de dados, deverá substituí-lo pelo tipo mais próximo em conformidade com o
CLS. Por exemplo, no lugar de UInteger você pode ser capaz de usar Integer se
não precisar do intervalo de valores acima de 2.147.483.647. Se você precisar do
intervalo estendido, poderá substituir UInteger por Long .
Confira também
Reflexão
BC40042: o tipo de valor opcional para
o parâmetro opcional
<parametername> não é compatível
com CLS
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Os seguintes tipos de dados do Visual Basic não são compatíveis com CLS:
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar os avisos como erros, consulte Configurar avisos no Visual Basic.
ID do Erro: BC40042
Se o procedimento precisar ser compatível com CLS, altere o tipo desse valor
padrão para aquele em conformidade com CLS mais próximo. Por exemplo, no
lugar de UInteger você pode ser capaz de usar Integer se não precisar do
intervalo de valores acima de 2.147.483.647. Se você precisar do intervalo
estendido, poderá substituir UInteger por Long .
Os seguintes tipos de dados do Visual Basic não são compatíveis com CLS:
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar os avisos como erros, consulte Configurar avisos no Visual Basic.
ID do Erro: BC40028
Um parâmetro de tipo representa um requisito para um tipo que deve ser fornecido
quando o tipo genérico é construído. Ele não representa um tipo definido específico.
Uma cadeia de caracteres de qualificação deve incluir apenas elementos definidos no
momento da compilação.
VB
End Function
ID do erro: BC32098
Confira também
Referências a elementos declarados
Tipos genéricos no Visual Basic
Lista de Tipos
BC31026: não foi possível criar um
assembly de nome forte a partir do
arquivo '<filename>': <error>
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O assembly de nome forte não pode ser criado usando o arquivo de chave especificado.
ID do Erro: BC31026
Confira também
Sn.exe (ferramenta Nome Forte))
BC30143: não é possível inserir o
arquivo de recurso '<filename>':
<mensagem de erro>
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
Al.exe
Opções de comentários do Visual Studio
BC30145: não foi possível emitir o
assembly: <error message>
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
O compilador Visual Basic chama o Assembly Linker (Al.exe, também conhecido como
Alink) para gerar um assembly com um manifesto, e o vinculador relata um erro no
estágio de emissão da criação do assembly.
ID do erro: BC30145
Dica
6. No Visual Studio, inclua uma referência .NET Assembly para o arquivo que acabou
de ser criado.
Confira também
Al.exe
Sn.exe (Ferramenta Nome Forte)
Como criar um par de chaves pública/privada
Opções de comentários do Visual Studio
BC30655: Não é possível localizar o
arquivo '<filename>' obrigatório
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30655
Confira também
Opções de comentários do Visual Studio
Não foi possível obter nomes de portas
serial devido a um erro interno do
sistema
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Confira também
SerialPortNames
Noções básicas do depurador
Opções de comentários do Visual Studio
BC30144: não é possível vincular ao
arquivo de recurso '<filename>': <error
message>
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC30144
Confira também
Al.exe
Opções de comentários do Visual Studio
BC30712: Não é possível carregar
informações da classe '<classname>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Foi feita uma referência a uma classe que não está disponível.
ID do erro: BC30712
Confira também
Depurando no Visual Studio
BC31020: Não foi possível gravar a saída
na memória
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do Erro: BC31020
Confira também
Opções de comentários do Visual Studio
BC30698: Não foi possível gravar o
arquivo temporário porque o caminho
temporário não está disponível
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O Visual Basic não pôde determinar o caminho onde os arquivos temporários são
armazenados.
ID do erro: BC30698
Confira também
Opções de comentários do Visual Studio
BC31019: não é possível gravar no
arquivo de saída '<filename>': <error>
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Não foi possível abrir um arquivo de saída para gravação. O arquivo (ou a pasta que
contém o arquivo) pode estar aberto para uso exclusivo por outro processo ou pode ter
seu atributo definido como somente leitura.
Algumas situações comuns em que um arquivo fica aberto exclusivamente são quando:
Outro aplicativo abriu o arquivo. Para resolver esse problema, verifique se nenhum
outro aplicativo está acessando os arquivos. Nem sempre é óbvio qual aplicativo
está acessando seus arquivos. Nesse caso, reiniciar o computador pode ser o
caminho mais fácil para encerrar o aplicativo.
Se apenas um dos arquivos de saída do projeto estiver marcado como somente leitura,
esta exceção será acionada.
ID do erro: BC31019
3. Pressione OK.
Confira também
Opções de comentários do Visual Studio
BC40032: o tipo subjacente
<typename> de Enum não é compatível
com CLS
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
O tipo de dados especificado para essa enumeração não faz parte do CLS
(Independência da linguagem e componentes independentes da linguagem). Isso não é
um erro em seu componente, pois o .NET Framework e o Visual Basic dão suporte a
esse tipo de dados. No entanto, outro componente escrito em código estritamente
compatível com CLS pode não dar suporte a esse tipo de dados. Esse componente pode
não ser capaz de interagir com êxito com o seu componente.
Os seguintes tipos de dados do Visual Basic não são compatíveis com CLS:
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar avisos como erros, confira Configuração de avisos no Visual
Basic.
ID do Erro: BC40032
Se você estiver fazendo interface com um componente não escrito para o .NET
Framework, poderá determinar, por meio de reflexão ou da documentação, se ele
dá suporte a esse tipo de dados. Se isso acontecer, você não precisa mudar nada.
Se você estiver fazendo interface com um componente que não dá suporte a esse
tipo de dados, deverá substituí-lo pelo tipo mais próximo em conformidade com o
CLS. Por exemplo, no lugar de UInteger você pode ser capaz de usar Integer se
não precisar do intervalo de valores acima de 2.147.483.647. Se você precisar do
intervalo estendido, poderá substituir UInteger por Long .
Confira também
Reflexão (Visual Basic)
Reflexão
BC42324: O uso de uma variável de
iteração em uma expressão lambda
pode ter resultados inesperados
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
O uso de uma variável de iteração em uma expressão lambda pode ter resultados
inesperados. Em vez disso, crie uma variável local dentro do loop e atribua-lhe o valor
da variável de iteração.
Esse aviso é exibido quando você usa uma variável de iteração de loop em uma
expressão lambda declarada dentro do loop. Por exemplo, o exemplo a seguir faz com
que o aviso apareça.
VB
For i As Integer = 1 To 10
Next
VB
Module Module1
Sub Main()
For i As Integer = 0 To 4
array1(i) = Function() i
Next
System.Console.WriteLine(funcElement())
Next
End Sub
End Module
O loop For cria uma matriz de expressões lambda, cada uma delas retorna o valor da
variável i de iteração de loop. Quando as expressões lambda são avaliadas no loop For
Each , você pode esperar ver 0, 1, 2, 3 e 4 exibidos, os valores sucessivos do i no loop
For . Em vez disso, você verá o valor final de i exibido cinco vezes:
5
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar avisos como erros, consulte Configurar Avisos no Visual Basic.
ID do Erro: BC42324
VB
Module Module1
Sub Main()
For i As Integer = 0 To 4
Dim j = i
array1(i) = Function() j
Next
System.Console.WriteLine(funcElement())
Next
End Sub
End Module
Confira também
Expressões Lambda
BC30955: o valor do tipo '<typename1>'
não pode ser convertido em
'<typename2>'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Em uma situação em que um projeto faz uma referência de projeto e uma referência de
arquivo, o compilador não pode garantir que um tipo possa ser convertido em outro.
O pseudocódigo a seguir ilustra uma situação que pode gerar esse erro.
commonObject = P2.getCommonClass()
End Function
End Class
O Project P1 faz uma referência de projeto indireto por meio de P2 ao P3 e também
uma referência de arquivo direto para P3 . A declaração de commonObject usa a
referência de arquivo para P3 , enquanto a chamada para P2.getCommonClass usa a
referência do projeto para P3 .
ID do erro: BC30955
Confira também
Conversões de tipo no Visual Basic
Gerenciando referências em um projeto
BC30961: O valor do tipo
“<typename1>” não pode ser
convertido em “<typename2>” (várias
referências ao arquivo)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você pode usar uma única referência de arquivo se souber que os assemblies
referenciados têm a mesma identidade de assembly. A identidade do assembly inclui o
nome do assembly, a versão, a chave pública (se houver) e a cultura. Essas informações
identificam exclusivamente o assembly.
ID do erro: BC30961
Valor do tipo 'type1' não pode ser convertido em 'type2'. Você pode usar a propriedade
'Value' para obter o valor de cadeia de caracteres do primeiro elemento de
'<parentElement>'.
ID do erro: BC31194
Confira também
Convert
Funções de conversão do tipo
Literais XML
XML
BC30616: a variável '<variablename>'
oculta uma variável em bloco
delimitador
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma variável entre um bloco tem o mesmo nome que outra variável local.
ID do erro: BC30616
VB
Dim a, b, x As Integer
If a = b Then
End If
Outra fonte comum desse erro é uma tentativa de acessar uma variável local
declarada dentro de um bloco Try em um bloco Catch distinto. Para corrigir isso,
declare a variável fora da estrutura Try...Catch...Finally .
Confira também
Instrução Try...Catch...Finally
Declaração de Variável
BC42104: a variável '<variablename>' é
usada antes de receber um valor
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Um aplicativo tem pelo menos um caminho possível por meio do respectivo código,
que lê uma variável antes que qualquer valor seja atribuído a ele.
Se uma variável nunca tiver sido atribuída a um valor, ela armazenará o valor padrão
para o tipo de dados. Para um tipo de dados de referência, esse valor padrão é Nothing.
Ler uma variável de referência que tenha um valor de Nothing pode causar um
NullReferenceException em algumas circunstâncias.
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como
ocultar avisos ou tratar avisos como erros, confira Configuração de avisos no Visual
Basic.
ID do erro: BC42104
Uma forma de garantir que a variável sempre tenha um valor válido é inicializá-la
como parte de sua declaração. Confira "Inicialização" na Instrução Dim.
Confira também
Instrução Dim
Declaração de Variável
Solução de problemas de Variáveis
A variável usa um tipo de automação
sem suporte no Visual Basic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Você tentou usar uma variável definida em uma biblioteca de tipos ou biblioteca de
objetos que tem um tipo de dados sem suporte no Visual Basic.
-ou-
Confira também
Data Types
BC31168: As propriedades de eixo XML
não dão suporte à associação tardia
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma propriedade de eixo XML foi referenciada para um objeto sem tipo.
ID do erro: BC31168
Confira também
Propriedades do eixo XML
XML
BC42319: a exceção de comentário XML
deve ter um atributo 'cref'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC42319
XML
<exception cref="member">description</exception>
Confira também
<exception>
Como criar documentação XML
Marcações de Comentário XML
BC31180: as referências de entidade XML
não são suportadas
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Uma referência de entidade (por exemplo, © ) que não está definida na especificação
XML 1.0 está incluída como um valor para um literal do XML. Somente as referências de
entidade XML & , " , < , > e ' têm suporte em literais do XML.
ID do erro: BC31180
Confira também
Especificação dos literais XML e do XML 1.0
Literais XML
XML
BC31200: Literais e propriedades de
XML não são suportados em código
inserido dentro do ASP.NET
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Uma propriedade do eixo XML literal ou XML é definida dentro do código inserido ( <%=
=> ) em um arquivo ASP.NET.
ID do Erro: BC31200
Confira também
Literais XML
Propriedades do eixo XML
XML
BC31183: URI de namespace de XML
http://www.w3.org/XML/1998/namespace ;
pode ser limitado somente a 'xmlns'
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
ID do erro: BC31183
Confira também
Instrução Imports (namespace XML)
Literais XML
XML
Referência (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Esta seção fornece links para informações de referência sobre vários aspectos da
programação do Visual Basic.
Nesta seção
Referência da linguagem Visual Basic
Esta seção fornece informações de referência para vários aspectos da linguagem Visual
Basic.
Fornece links para informações sobre o compilador de linha de comando, que fornece
uma alternativa para compilar programas de IDE do Visual Studio.
Fornece links para informações sobre como trabalhar com a biblioteca de classe do .NET
Framework.
Fornece links para a conclusão da especificação do idioma do Visual Basic, que contêm
informações detalhadas sobre todos os aspectos do idioma.
Seções relacionadas
Elementos gerais de interface do usuário (Visual Studio)
Fornece links para tópicos em várias ferramentas XML disponíveis em Visual Studio.
Nesta seção
Compilando da Linha de Comando
Descreve o compilador de linha de comando do Visual Basic, que é fornecido como uma
alternativa para compilar programas de dentro do IDE do Visual Studio.
Dica
Quando você compila arquivos de projeto usando o IDE do Visual Studio, você
pode exibir informações sobre o comando vbc associado e suas opções na janela
de saída. Para exibir essas informações, abra a caixa de diálogo Opções, Projetos e
Soluções, Compilar e Executar e, em seguida, defina o detalhamento da saída de
build do projeto do MSBuild como Normal ou um nível mais alto de
detalhamento. Para obter mais informações, consulte Como exibir, salvar e
configurar arquivos de log de build.
Nesta seção
Como: Invocar o compilador de linha de comando
Fornece uma lista de linhas de comando de exemplo que você pode modificar para seu
próprio uso.
Seções relacionadas
Compilador de linha de comando do Visual Basic
Compilação Condicional
7 Observação
Seu computador pode mostrar diferentes nomes ou locais para alguns dos
elementos de interface do usuário do Visual Studio nas instruções a seguir. A
edição do Visual Studio que você possui e as configurações que você usa
determinam esses elementos. Para obter mais informações, consulte
Personalizando o IDE.
2. Você pode usar o Prompt de Comando do Desenvolvedor para Visual Studio para
acessar o compilador de qualquer diretório no seu computador se o Visual Studio
estiver instalado.
Como alternativa para compilar programas do Visual Basic de dentro do Visual Studio,
você pode compilar a partir da linha de comando para produzir arquivos executáveis
(.exe) ou arquivos de biblioteca de vínculo dinâmico (.dll).
A tabela a seguir lista algumas linhas de comando de exemplo que você pode modificar
para seu próprio uso.
Para Use
Dica
Quando você compila um projeto usando o IDE do Visual Studio, você pode exibir
informações sobre o comando vbc associado e suas opções de compilador na
janela de saída. Para exibir essas informações, abra a caixa de diálogo Opções,
Projetos e Soluções, Compilar e Executar e, em seguida, defina o detalhamento da
saída de build do projeto do MSBuild como Normal ou um nível mais alto de
detalhamento.
Confira também
Compilador de linha de comando do Visual Basic
Compilação Condicional
Opções de compilador do Visual Basic
listadas em ordem alfabética
Artigo • 28/11/2022 • 4 minutos para o fim da leitura
Opção Finalidade
-analyzer Executar os analisadores com basse nesse assembly (forma abreviada: -a)
-bugreport Cria um arquivo que contém informações que tornam mais fácil relatar
um bug.
-errorreport Especifica como o compilador do Visual Basic deve relatar erros internos
do compilador.
-keyfile Especifica um arquivo que contém um par de chaves ou chave para dar
um nome forte a um assembly.
-main Especifica a classe que contém o procedimento Sub Main a ser usado na
inicialização.
-quiet Impede que o compilador exiba código para erros e avisos relacionados
à sintaxe.
-vbruntime Especifica que o compilador deve ser compilado sem uma referência à
Biblioteca de Runtime do Visual Basic ou com uma referência a uma
biblioteca de runtime específica.
Confira também
Opções de compilador do Visual Basic listadas por categoria
Gerenciar propriedades do projeto e da solução
@ (especificar arquivo de resposta)
(Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
@response_file
Argumentos
response_file
Comentários
O compilador processa as opções do compilador e os arquivos de código-fonte
especificados em um arquivo de resposta como se tivessem sido especificados na linha
de comando.
Console
@file1.rsp @file2.rsp
O Visual Basic fornece o arquivo Vbc.rsp, localizado no mesmo diretório que o arquivo
Vbc.exe. O arquivo Vbc.rsp é incluído por padrão, a menos que a opção -noconfig seja
usada. Para obter mais informações, confira -noconfig.
7 Observação
Exemplo 1
As linhas a seguir são de uma amostra de arquivo de resposta.
Console
-target:exe
-out:MyExe.exe
source1.vb
source2.vb
Exemplo 2
O exemplo a seguir demonstra como usar a opção @ com o arquivo de resposta
chamado File1.rsp .
Console
vbc @file1.rsp
Confira também
Compilador de linha de comando do Visual Basic
-noconfig
Linhas de Comando de Compilação de Exemplo
-addmodule
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-addmodule:fileList
Argumentos
fileList
Obrigatórios. Lista delimitada por vírgulas de arquivos que contêm metadados, mas não
manifestos de assembly. Os nomes de arquivo que contêm espaços devem ser cercados
por aspas (" ").
Comentários
Os arquivos listados pelo parâmetro fileList devem ser criados com a opção ou com a
opção -target:module ou com outro equivalente no compilador a -target:module .
Todos os módulos adicionados com -addmodule devem estar no mesmo diretório que o
arquivo de saída em tempo de execução. Ou seja, é possível especificar um módulo em
qualquer diretório em tempo de compilação, mas o módulo deve estar no diretório do
aplicativo em tempo de execução. Se não estiver, você receberá um erro
TypeLoadException.
Use -reference (Visual Basic) para importar metadados de um arquivo que contenha um
assembly.
7 Observação
Exemplo
O código a seguir cria um módulo.
VB
' t1.vb
Public i As Integer
End Class
VB
' t2.vb
Namespace NetmoduleTest
Module Module1
Sub Main()
Dim x As TestClass
x = New TestClass
x.i = 802
System.Console.WriteLine(x.i)
End Sub
End Module
End Namespace
Confira também
Compilador de linha de comando do Visual Basic
-target (Visual Basic)
-reference (Visual Basic)
Linhas de Comando de Compilação de Exemplo
-baseaddress
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Sintaxe
Console
-baseaddress:address
Argumentos
Termo Definição
address Obrigatórios. O endereço básico da DLL. Este endereço deve ser especificado como um
número hexadecimal.
Comentários
O endereço básico padrão de uma DLL é definido pelo Common Language Runtime do
.NET Framework.
Lembre-se de que a palavra de ordem inferior nesse endereço será arredondada. Por
exemplo, se 0x11110001 for especificado, será arredondado para 0x11110000.
3. Clique em Avançadas.
4. Modifique o valor no endereço base da DLL: caixa. Nota: O endereço base da DLL: a caixa é
somente leitura, a menos que o destino seja uma DLL.
Confira também
Compilador de linha de comando do Visual Basic
-target (Visual Basic)
Linhas de Comando de Compilação de Exemplo
Sn.exe (ferramenta Nome Forte))
-bugreport
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-bugreport:file
Argumentos
Termo Definição
file Obrigatórios. O nome do arquivo que conterá o relatório de bug. Coloque o nome do
arquivo entre aspas ("") se o nome conter um espaço.
Comentários
As seguintes informações são adicionadas a file :
Uma solicitação de como você acha que o problema deve ser corrigido.
Como uma cópia de todos os arquivos de código-fonte será colocada no file , talvez
seja desejável reproduzir o suposto defeito do código no programa mais curto possível.
) Importante
A -bugreport opção produz um arquivo que contém informações potencialmente
confidenciais. Isso inclui a hora atual, a versão do compilador, .NET Framework
versão, a versão do sistema operacional, o nome de usuário, os argumentos de
linha de comando com os quais o compilador foi executado, todo o código-fonte e
a forma binária de qualquer assembly referenciado. Essa opção pode ser acessada
especificando opções de linha de comando no arquivo Web.config para uma
compilação do lado do servidor de um aplicativo ASP.NET. Para evitar isso,
modifique o arquivo Machine.config para impedir que os usuários compilem no
servidor.
7 Observação
Exemplo
O exemplo a seguir compila t2.vb e coloca todas as informações de relatório de bugs no
arquivo Problem.txt.
Console
Confira também
Compilador de linha de comando do Visual Basic
-debug (Visual Basic)
-errorreport
Linhas de Comando de Compilação de Exemplo
Elemento trustLevel para securityPolicy (esquema de configurações ASP.NET)
/codepage (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-codepage:id
Argumentos
Termo Definição
Comentários
Para compilar o código-fonte salvo com uma codificação específica, você pode usar -
codepage para especificar qual página de código deve ser usada. A -codepage opção se
7 Observação
Syntax
Console
-debug[+ | -]
ou
Console
-debug:[full | pdbonly]
Argumentos
Termo Definição
Comentários
Use essa opção para criar builds de depuração. Se você não especificar -debug , -debug+
ou -debug:full , não será possível depurar o arquivo de saída do programa.
Por padrão, as informações de depuração não são emitidas ( -debug- ). Para emitir
informações de depuração, especifique -debug ou -debug+ .
Para obter informações sobre como configurar o desempenho de depuração de um
aplicativo, consulte Facilitando a depuração de uma imagem.
Exemplo
O exemplo a seguir coloca informações de depuração no arquivo de saída App.exe .
Console
Confira também
Compilador de linha de comando do Visual Basic
-bugreport
Linhas de Comando de Compilação de Exemplo
-define (Visual Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Syntax
Console
-define:["]symbol[=value][,symbol[=value]]["]
ou
Console
-d:["]symbol[=value][,symbol[=value]]["]
Argumentos
Termo Definição
value Opcional. O valor para atribuir symbol . Se value for uma cadeia de caracteres, ela
deverá ser colocada entre sequências de barra invertida/aspas (\"), em vez de aspas. Se
nenhum valor for especificado, será considerado como True.
Comentários
A opção -define tem um efeito semelhante a usar uma diretiva de pré-processador
#Const em seu arquivo de origem, exceto que as constantes definidas com -define são
Você pode usar símbolos criados por essa opção com a diretiva #If ... Then ... #Else para
compilar os arquivos de origem condicionalmente.
Você pode definir vários símbolos com -define usando uma vírgula para separar as
definições de símbolos.
Para configurar -define no ambiente de desenvolvimento integrado do Visual Studio
3. Clique em Avançadas.
Exemplo
O código a seguir define e usa duas constantes de compilador condicional.
VB
Sub mysub()
MsgBox("debug mode")
#Else
#End If
End Sub
Confira também
Compilador de linha de comando do Visual Basic
Diretivas #If...Then...#Else
Diretiva #Const
Linhas de Comando de Compilação de Exemplo
-delaysign
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-delaysign[+ | -]
Argumentos
+ | -
Comentários
A opção -delaysign não tem nenhum efeito a menos que seja usada com -keyfile ou -
keycontainer.
Confira também
Compilador de linha de comando do Visual Basic
-keyfile
-keycontainer
Linhas de Comando de Compilação de Exemplo
-deterministic
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Faz com que o compilador produza um assembly cuja saída byte a byte é idêntica entre
compilações para entradas idênticas.
Sintaxe
Console
-deterministic
Comentários
Por padrão, a saída do compilador de um determinado conjunto de entradas é
exclusiva, uma vez que o compilador adiciona um carimbo de data/hora e um GUID
gerado com base em números aleatórios. Use a opção -deterministic para produzir
um assembly determinística, cujo conteúdo binário seja idêntico entre compilações,
desde que a entrada permaneça a mesma.
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-doc
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Syntax
Console
-doc[+ | -]
ou
Console
-doc:file
Argumentos
Termo Definição
+ | - Opcional. Especificar +, ou apenas -doc , faz com que o compilador gere informações
sobre a documentação e as coloque em um arquivo XML. Especificar - é equivalente a
não especificar -doc , fazendo com que nenhuma informação de documentação seja
criada.
file Necessário se -doc: for usado. Especifica o arquivo XML de saída, que é preenchido
com os comentários dos arquivos de código-fonte da compilação. Se o nome do
arquivo contiver um espaço, coloque o nome entre aspas (" ").
Comentários
A opção -doc controla se o compilador gera um arquivo XML contendo os comentários
de documentação. Se você usar a sintaxe -doc:file , o parâmetro file especifica o
nome do arquivo XML. Se você usar -doc ou -doc+ , o compilador pega o nome do
arquivo XML do arquivo executável ou da biblioteca que o compilador está criando. Se
você usar -doc- ou não especificar a opção -doc , o compilador não criará um arquivo
XML.
Nos arquivos de código-fonte, os comentários de documentação podem preceder as
seguintes definições:
Para usar o arquivo XML gerado com o recurso IntelliSense do Visual Studio, deixe o
nome do arquivo XML ser o mesmo que o assembly para o qual você deseja dar
suporte. Certifique-se de que o arquivo XML esteja no mesmo diretório que o assembly
de modo que, ao referenciar o assembly no projeto do Visual Studio, o arquivo .xml
também seja encontrado. Os arquivos de documentação XML não são necessários para
o IntelliSense funcionar com o código dentro do projeto ou em projetos referenciados
por um projeto.
A menos que você compile com -target:module , o arquivo XML contém as marcações
<assembly></assembly> . Essas marcações especificam o nome do arquivo que contém o
Exemplo
Veja Como documentar o código com XML para obter um exemplo.
Confira também
Compilador de linha de comando do Visual Basic
Documentando o código com XML
-errorreport
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Especifica como o compilador do Visual Basic deve relatar erros internos do compilador.
Sintaxe
Console
Comentários
Essa opção fornece uma maneira conveniente de relatar um ICE (erro do compilador
interno) do Visual Basic para a equipe do Visual Basic na Microsoft. Por padrão, o
compilador não envia nenhuma informação para a Microsoft. No entanto, se você
encontrar um erro interno do compilador, essa opção permitirá que você relate o erro à
Microsoft. Essas informações ajudarão os engenheiros da Microsoft a identificar a causa
e podem ajudar a melhorar a próxima versão do Visual Basic.
Opção Comportamento
prompt Se ocorrer um erro interno do compilador, uma caixa de diálogo será exibida para que
você possa exibir os dados exatos coletados pelo compilador. Você pode determinar se
há informações confidenciais no relatório de erros e tomar uma decisão sobre se deseja
enviá-lo para a Microsoft. Se você decidir enviá-lo e as configurações de política do
computador e do usuário permitirem, o compilador enviará os dados para a Microsoft.
queue Enfileira o relatório de erros. Ao fazer logon com privilégios de administrador, você
pode relatar quaisquer falhas desde a última vez em que fez logon (não será solicitado
que você envie relatórios para falhas mais de uma vez a cada três dias). Esse é o
comportamento padrão quando a opção -errorreport não é especificada.
Opção Comportamento
none Se ocorrer um erro interno do compilador, ele não será coletado ou enviado para a
Microsoft.
O compilador envia dados que incluem a pilha no momento do erro, que geralmente
inclui algum código-fonte. Se -errorreport for usado com a opção -bugreport, todo o
arquivo de origem será enviado.
Essa opção é melhor usada com a opção -bugreport, pois permite que os engenheiros
da Microsoft reproduzam o erro com mais facilidade.
7 Observação
Exemplo
O código a seguir tenta compilar T2.vb e, se o compilador encontrar um erro interno do
compilador, ele solicitará que você envie o relatório de erro para a Microsoft.
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-bugreport
-filealign
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-filealign:number
Argumentos
number
Comentários
Você pode usar a opção -filealign para especificar o alinhamento das seções no
arquivo de saída. As seções são blocos de memória contígua em um arquivo PE (Portátil
Executável) que contém código ou dados. A -filealign opção permite compilar seu
aplicativo com um alinhamento não padrão; a maioria dos desenvolvedores não precisa
usar essa opção.
7 Observação
Syntax
Console
-help
ou
Console
-?
Comentários
Se essa opção for incluída em uma compilação, nenhum arquivo de saída será criado e
nenhuma compilação acontecerá.
7 Observação
Exemplo
O código a seguir exibe a ajuda da linha de comando.
Console
vbc -help
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-highentropyva (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-highentropyva[+ | -]
Argumentos
+ | -
Comentários
Se você especificar essa opção, versões compatíveis do kernel do Windows poderão
usar níveis maiores de entropia quando o kernel randomizar o layout de espaço de
endereço de um processo como parte do ASLR. Se o kernel usar níveis mais altos de
entropia, um número maior de endereços poderá ser alocado para regiões de memória
como pilhas e heaps. Como resultado, é mais difícil adivinhar a localização de uma
região específica da memória.
Quando a opção for atuvada, o executável de destino e todos os módulos dos quais ele
depende deverão ser capazes de manipular valores de ponteiro que sejam maiores que
4 GB (gigabytes) quando esses módulos estiverem em execução como um processo de
64 bits.
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-imports (Visual Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Sintaxe
Console
-imports:namespaceList
Argumentos
Termo Definição
Comentários
A opção -imports importa qualquer namespace definido dentro do conjunto atual de
arquivos de origem ou de qualquer assembly referenciado.
Exemplo
O código a seguir é compilado quando -imports:system.globalization é especificado.
Sem ela, a compilação bem-sucedida requer que uma instrução Imports
System.Globalization seja incluída no início do arquivo de código-fonte ou que a
propriedade seja totalmente qualificada como
System.Globalization.CultureInfo.CurrentCulture.Name .
VB
Module Example
End Sub
End Module
Confira também
Compilador de linha de comando do Visual Basic
Referências e a instrução Imports
Linhas de Comando de Compilação de Exemplo
-keycontainer
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Especifica um nome de contêiner de chave para um par de chaves para dar um nome
forte a um assembly.
Sintaxe
Console
-keycontainer:container
Argumentos
Termo Definição
container Obrigatórios. Arquivo de contêiner que contém a chave. Coloque o nome do arquivo
entre aspas ("") se o nome conter um espaço.
Comentários
O compilador cria um componente compartilhável inserindo uma chave pública no
manifesto do assembly e assinando o assembly final com a chave privada. Para gerar um
arquivo de chave, digite sn -k file na linha de comando. A opção -i instala o par de
chaves no contêiner. Para obter mais informações, consulte Sn.exe (Ferramenta de
Nome Forte).
Exemplo
O código a seguir compila o arquivo de origem Input.vb e especifica um contêiner de
chaves.
Console
Confira também
Assemblies no .NET
Compilador de linha de comando do Visual Basic
-keyfile
Linhas de Comando de Compilação de Exemplo
-keyfile
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Especifica um arquivo que contém uma chave ou um par de chaves para dar um nome
forte a um assembly.
Sintaxe
Console
-keyfile:file
Argumentos
file
Comentários
O compilador insere a chave pública no manifesto do assembly e, em seguida, assina o
assembly final com a chave privada. Para gerar um arquivo de chave, digite sn -k file
na linha de comando. Para obter mais informações, consulte Sn.exe (Ferramenta de
Nome Forte).
7 Observação
Exemplo
O código a seguir compila o arquivo Input.vb de origem e especifica um arquivo de
chave.
Console
Confira também
Assemblies no .NET
Compilador de linha de comando do Visual Basic
-reference (Visual Basic)
Linhas de Comando de Compilação de Exemplo
-langversion (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Faz com que o compilador aceite somente a sintaxe incluída na versão de linguagem
especificada em Visual Basic.
Sintaxe
Console
-langversion:version
Argumentos
version
Qualquer um dos números inteiros também pode ser especificado usando .0 como a
versão secundária, por exemplo, 11.0 .
Comentários
A opção -langversion especifica qual sintaxe o compilador aceita. Por exemplo, se você
especificar que a versão do idioma é 9.0, o compilador gerará erros de sintaxe válidos
somente na versão 10.0 e posterior.
Você pode usar essa opção ao desenvolver aplicativos direcionados a diferentes versões
de .NET Framework. Por exemplo, se você estiver direcionando .NET Framework 3.5,
poderá usar essa opção para garantir que não use a sintaxe do idioma versão 10.0.
Você só pode definir -langversion diretamente usando a linha de comando. Para obter
mais informações, consulte Definindo uma Versão Específica do .NET Framework como
Destino.
Exemplo
O código a seguir compila sample.vb para o Visual Basic 9.0.
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-libpath
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Sintaxe
Console
-libpath:dirList
Argumentos
Termo Definição
dirList Obrigatórios. Uma lista de diretórios delimitada por ponto e vírgula para o compilador
examinar se um assembly referenciado não foi encontrado no diretório de trabalho
atual (o diretório do qual você está invocando o compilador) ou no diretório de
sistema do CLR. Se o nome do diretório contém um espaço, coloque o nome entre
aspas (“ ”).
Comentários
A opção -libpath especifica o local dos assemblies referenciados pela opção -
reference.
Exemplo
O código a seguir compila T2.vb para criar um arquivo .exe. O compilador examina o
diretório de trabalho, no diretório raiz da unidade C: e no diretório Novos Assemblies da
unidade C: para referências de assembly.
Console
Confira também
Assemblies no .NET
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-link (Visual Basic)
Artigo • 22/02/2023 • 4 minutos para o fim da leitura
Faz com que o compilador disponibilize as informações de tipo COM nos assemblies
especificados para o projeto sendo compilado no momento.
Syntax
Console
-link:fileList
ou
Console
-l:fileList
Argumentos
Termo Definição
Comentários
A opção -link permite que você implante um aplicativo que inseriu informações de
tipo. O aplicativo pode usar tipos em um assembly de runtime que implementa as
informações de tipo inseridas sem a necessidade de uma referência ao assembly de
runtime. Se forem publicadas várias versões do assembly de runtime, o aplicativo que
contém as informações de tipo inseridas poderá trabalhar com as várias versões sem
precisar ser recompilado. Para obter um exemplo, consulte Instruções passo a passo:
Inserindo tipos de assemblies gerenciado.
Usar a opção -link é especialmente útil quando você está trabalhando com a
interoperabilidade COM. Você pode inserir tipos COM para que seu aplicativo não
precise mais de um PIA (assembly de interoperabilidade primário) no computador de
destino. A opção -link instrui o compilador a inserir as informações de tipo de COM do
assembly de interoperabilidade referenciado no código compilado resultante. O tipo
COM é identificado pelo valor CLSID (GUID). Como resultado, o aplicativo pode ser
executado em um computador de destino que tem os mesmos tipos COM instalados
com os mesmos valores CLSID. Os aplicativos que automatizam o Microsoft Office são
um bom exemplo. Como aplicativos como o Office normalmente mantêm o mesmo
valor CLSID entre diferentes versões, seu aplicativo pode usar os tipos COM
referenciados contanto que o .NET Framework 4 ou posterior esteja instalado no
computador de destino e seu aplicativo use métodos, propriedades ou eventos que
estão incluídos nos tipos COM referenciados.
7 Observação
Quando você cria uma instância de um tipo COM inserido no seu código, você
deve criar a instância usando a interface apropriada. Tentar criar uma instância de
um tipo COM inserido usando o CoClass causa um erro.
Para definir a opção -link em Visual Studio, adicione uma referência de assembly e
defina a propriedade Embed Interop Types como true. O valor padrão da propriedade
Embed Interop Types é false.
Use -libpath para especificar o diretório no qual uma ou mais das suas referências do
assembly estão localizadas.
Interfaces genéricas
As interfaces genéricas que são inseridas de um assembly de interoperabilidade não
podem ser usadas. Isso é mostrado no exemplo a seguir.
VB
VB
Imports System.Collections.Generic
Imports Microsoft.Office.Interop.Excel
Class Utility
' The following code causes an error when called by a client assembly.
VB
End Function
' The following code is valid for calls from a client assembly.
VB
End Function
End Class
VB
Module Client
End Sub
End Module
Exemplo
A linha de comando a seguir compila o arquivo de origem OfficeApp.vb e faz referência
aos assemblies de COMData1.dll e COMData2.dll para produzir OfficeApp.exe .
Console
Confira também
Compilador de linha de comando do Visual Basic
Instruções passo a passo: Inserindo tipos de assemblies gerenciados
-reference (Visual Basic)
-noconfig
-libpath
Linhas de Comando de Compilação de Exemplo
Introdução à Interoperabilidade COM
-linkresource (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Syntax
Console
-linkresource:filename[,identifier[,public|private]]
ou
Console
-linkres:filename[,identifier[,public|private]]
Argumentos
filename
identifier
Opcional. O nome lógico para o recurso. O nome que é usado para carregar o recurso.
O padrão é o nome do arquivo. Opcionalmente, você pode especificar se o arquivo é
público ou privado no manifesto do assembly, por exemplo: -
linkres:filename.res,myname.res,public . Por padrão, filename é público no assembly.
Comentários
A opção -linkresource não insere o arquivo de recurso no arquivo de saída; use a
opção -resource para fazer isso.
A opção -linkresource requer uma das opções -target que não seja -target:module .
Se filename for um arquivo de recurso do .NET Framework criado, por exemplo, pelo
Resgen.exe (Gerador de Arquivos de Recurso) ou no ambiente de desenvolvimento, ele
poderá ser acessado com membros no namespace System.Resources. (Para obter mais
informações, consulte ResourceManager.) Para acessar todos os outros recursos em
tempo de execução, use os métodos que começam com GetManifestResource na classe
Assembly.
O nome do arquivo pode ser qualquer formato de arquivo. Por exemplo, crie uma parte
DLL nativa do assembly de maneira que possa ser instalada no cache de assembly
global e acessado no código gerenciado no assembly.
7 Observação
Exemplo
O código a seguir compila in.vb e vincula ao arquivo de recurso rf.resource .
Console
Confira também
Compilador de linha de comando do Visual Basic
-target (Visual Basic)
-resource (Visual Basic)
Linhas de Comando de Compilação de Exemplo
-main
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-main:location
Argumentos
location
Obrigatórios. O nome da classe ou módulo que contém o procedimento Sub Main a ser
chamado quando o programa é iniciado. Isso pode estar no formulário -main:module
ou -main:namespace.module.
Comentários
Use essa opção ao criar um arquivo executável ou um programa executável do
Windows. Se a opção -main for omitida, o compilador procurará um Sub Main
compartilhado válido em todas as classes e módulos públicos.
Consulte Procedimento Principal no Visual Basic para uma discussão sobre as várias
formas do procedimento Main .
VB
Inherits System.Windows.Forms.Form
End Class
Exemplo
O código a seguir compila T2.vb e T3.vb , especificando que o procedimento Sub Main
será encontrado na classe Test2 .
Console
Confira também
Compilador de linha de comando do Visual Basic
-target (Visual Basic)
Linhas de Comando de Compilação de Exemplo
Procedimento principal no Visual Basic
-moduleassemblyname
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-moduleassemblyname:assembly_name
Argumentos
Termo Definição
Comentários
O compilador somente processará a opção -moduleassemblyname se a opção -
target:module tiver sido especificada. Isso faz com que o compilador crie um módulo. O
módulo criado pelo compilador é válido apenas para o assembly especificado com a
opção -moduleassemblyname . Se você colocar o módulo em um assembly diferente,
ocorrerão erros em tempo de execução.
Para obter mais informações sobre como criar um módulo, consulte -target (Visual
Basic). Para obter mais informações sobre assemblies amigáveis, consulte Assemblies
Amigáveis.
7 Observação
A opção -moduleassemblyname não está disponível dentro do ambiente de
desenvolvimento do Visual Studio; ela só está disponível ao compilar a partir de um
prompt de comando.
Confira também
Como Compilar um Assembly de Vários Arquivos
Compilador de linha de comando do Visual Basic
-target (Visual Basic)
-main
-reference (Visual Basic)
-addmodule
Assemblies no .NET
Linhas de Comando de Compilação de Exemplo
Assemblies Amigáveis
-netcf
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-netcf
Comentários
A -netcf opção faz com que o compilador do Visual Basic direcione o .NET Compact
Framework em vez do .NET Framework completo. A funcionalidade de linguagem
presente apenas na .NET Framework completa está desabilitada.
A -netcf opção foi projetada para ser usada com -sdkpath. Os recursos de linguagem
desabilitados são -netcf os mesmos recursos de linguagem que não estão presentes
nos arquivos direcionados. -sdkpath
7 Observação
VB
Module Module1
Sub Main()
End Sub
End Module
VB
Class LateBoundClass
Sub S1()
End Sub
Get
End Get
End Set
End Property
End Class
Module Module1
Sub Main()
Dim o1 As Object
Dim o2 As Object
Dim o3 As Object
o1 = New LateBoundClass
o2 = 1
o3 = IntArr
o1.S1()
o1.P1("member") = 1
o1!member = 1
LateBoundSub(o2)
o3(1) = 1
End Sub
End Sub
End Sub
End Module
compilação.
VB
Module Module1
End Module
Usar palavras-chave do Visual Basic 6.0 que foram removidas do Visual Basic gera
um erro diferente quando -netcf é usado. Isso afeta as mensagens de erro para as
seguintes palavras-chave:
Open
Close
Put
Write
Input
Lock
Unlock
Seek
Width
Name
FreeFile
EOF
Loc
LOF
Line
Exemplo
O código a seguir compila Myfile.vb com o .NET Compact Framework, usando as
versões de mscorlib.dll e Microsoft.VisualBasic.dll encontradas no diretório de instalação
padrão do .NET Compact Framework na unidade C. Normalmente, você usaria a versão
mais recente do .NET Compact Framework.
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-sdkpath
-noconfig
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-noconfig
Comentários
A opção -noconfig informa que o compilador não deve compilar com o arquivo
Vbc.rsp, localizado no mesmo diretório que o arquivo Vbc.exe. O arquivo Vbc.rsp faz
referência aos assemblies de .NET Framework comumente usados e importa os
namespaces System e Microsoft.VisualBasic . O compilador referencia implicitamente o
assembly System.dll, a menos que a opção -nostdlib seja especificada. A opção -
nostdlib informa ao compilador que não deve compilar com Vbc.rsp ou referenciar
7 Observação
Você pode modificar o arquivo Vbc.rsp para especificar opções de compilador adicionais
que devem ser incluídas em cada compilação do arquivo Vbc.exe (exceto ao especificar
a opção -noconfig ). Para obter mais informações, confira @ (Especificar de arquivo de
resposta).
O compilador processa as opções passadas para o comando vbc pela última vez.
Portanto, qualquer opção na linha de comando substitui a configuração da mesma
opção no arquivo Vbc.rsp.
7 Observação
A opção -noconfig não está disponível no ambiente de desenvolvimento do Visual
Studio; ela só está disponível quando se compila na linha de comando.
Confira também
-nostdlib (Visual Basic)
Compilador de linha de comando do Visual Basic
@ (especificar arquivo de resposta)
-reference (Visual Basic)
-nologo (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-nologo
Comentários
Se você especificar -nologo , o compilador não exibirá uma faixa de direitos autorais. Por
padrão, -nologo não está em vigor.
7 Observação
Exemplo
O código a seguir compila T2.vb e não exibe uma faixa de direitos autorais.
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-nostdlib (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-nostdlib
Comentários
A opção -nostdlib remove a referência automática ao assembly System.dll e impede
que o compilador leia o arquivo Vbc.rsp. O arquivo Vbc.rsp, localizado no mesmo
diretório que o arquivo Vbc.exe, faz referência aos assemblies do .NET Framework
comumente usados e importa os namespaces System e Microsoft.VisualBasic .
7 Observação
7 Observação
Exemplo
O código a seguir compila T2.vb sem referenciar as bibliotecas padrão. Você deve
definir a constante de compilação condicional _MYTYPE para a cadeia de caracteres
"Empty" para remover o objeto My .
Console
Confira também
-noconfig
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
Como personalizar quais objetos estão disponíveis em My
-nowarn
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Sintaxe
Console
-nowarn[:numberList]
Argumentos
Termo Definição
numberList Opcional. Lista delimitada por vírgulas dos números de ID de aviso que o
compilador deve suprimir. Se as IDs de aviso não forem especificadas, serão
suprimidos todos os avisos.
Comentários
A opção -nowarn faz com que o compilador não gere avisos. Para suprimir um aviso
individual, forneça a ID de aviso para a opção -nowarn após os dois pontos. Separe
vários números de aviso com vírgulas.
3. Selecione a caixa de seleção Desabilitar todos os avisos para desabilitar todos os avisos.
- ou -
Para desabilitar um aviso específico, clique em Nenhum na lista suspensa adjacente ao aviso.
Exemplo 1
O código a seguir compila T2.vb e não exibe nenhum aviso.
Console
Exemplo 2
O código a seguir compila T2.vb e não exibe os avisos para variáveis locais não usadas
(42024).
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
Configurando avisos no Visual Basic
-nowin32manifest (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-nowin32manifest
Comentários
Quando essa opção for usada, o aplicativo estará sujeito à virtualização no Windows
Vista, a menos que você forneça um manifesto do aplicativo em um arquivo de recurso
Win32 ou durante uma etapa de build posterior. Para saber mais sobre virtualização,
confira Implantação do ClickOnce no Windows Vista.
Para saber mais sobre a criação do manifesto, confira -win32manifest (Visual Basic).
Confira também
Compilador de linha de comando do Visual Basic
Página de Aplicativo, Designer de Projeto (Visual Basic)
-optimize
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Sintaxe
Console
-optimize[ + | - ]
Argumentos
Termo Definição
Comentários
Otimizações do compilador tornam o arquivo de saída menor, mais rápido e mais
eficiente. No entanto, como as otimizações resultam na reorganização de código no
arquivo de saída, -optimize+ pode dificultar a depuração.
Exemplo
O código a seguir compila T2.vb e habilita otimizações do compilador.
Console
Confira também
Compilador de linha de comando do Visual Basic
-debug (Visual Basic)
Linhas de Comando de Compilação de Exemplo
-target (Visual Basic)
-optioncompare
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-optioncompare:{binary | text}
Comentários
Você pode especificar -optioncompare em uma das duas formas: -optioncompare:binary
para usar comparações de cadeia de caracteres binárias e -optioncompare:text para
usar comparações de cadeia de caracteres de texto. Por padrão, o compilador usa -
optioncompare:binary .
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Exemplo
O código a seguir compila ProjFile.vb e usa comparações de cadeia de caracteres
binárias.
Console
Confira também
Compilador de linha de comando do Visual Basic
-optionexplicit
-optionstrict
-optioninfer
Linhas de Comando de Compilação de Exemplo
Instrução Option Compare
Caixa de diálogo Padrões do Visual Basic, Projetos, Opções
-optionexplicit
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Isso faz o compilador relatar erros se variáveis não forem declaradas antes de serem
usadas.
Sintaxe
Console
-optionexplicit[+ | -]
Argumentos
+ | -
Comentários
Se o arquivo de código-fonte tiver uma instrução Option Explicit, a instrução substituirá
a configuração do compilador de linha de comando -optionexplicit .
Exemplo
O código a seguir é compilado quando -optionexplicit- é usada.
VB
Module Module1
Sub Main()
i = 99
System.Console.WriteLine(i)
End Sub
End Module
Confira também
Compilador de linha de comando do Visual Basic
-optioncompare
-optionstrict
-optioninfer
Linhas de Comando de Compilação de Exemplo
Instrução Option Explicit
Caixa de diálogo Padrões do Visual Basic, Projetos, Opções
-optioninfer
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-optioninfer[+ | -]
Argumentos
Termo Definição
7 Observação
Você pode usar a opção -noconfig para manter os padrões internos do compilador
em vez dos especificados no vbc.rsp. O padrão do compilador para essa opção é -
optioninfer- .
Comentários
Se o arquivo de código-fonte tiver uma instrução Option Explicit, a instrução substituirá
a configuração do compilador de linha de comando -optioninfer .
Console
Confira também
Compilador de linha de comando do Visual Basic
-optioncompare
-optionexplicit
-optionstrict
Linhas de Comando de Compilação de Exemplo
Instrução Option Infer
Inferência de Tipo de Variável Local
Caixa de diálogo Padrões do Visual Basic, Projetos, Opções
Página de Compilação, Designer de Projeto (Visual Basic)
-noconfig
Compilando da Linha de Comando
-optionstrict
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-optionstrict[+ | -]
-optionstrict[:custom]
Argumentos
+ | -
custom
Comentários
Quando -optionstrict+ estiver em vigor, somente conversões de tipo de ampliação
podem ser feitas implicitamente. Conversões implícitas de tipo de estreitamento, como
atribuir um objeto de tipo Decimal a um objeto de tipo inteiro, são relatadas como
erros.
Exemplo
O código a seguir compila Test.vb usando semântica de tipo estrito.
Console
Confira também
Compilador de linha de comando do Visual Basic
-optioncompare
-optionexplicit
-optioninfer
-nowarn
-warnaserror (Visual Basic)
Linhas de Comando de Compilação de Exemplo
Instrução Option Strict
Caixa de diálogo Padrões do Visual Basic, Projetos, Opções
-out (Visual Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Sintaxe
Console
-out:filename
Argumentos
Termo Definição
Comentários
Especifique o nome completo e a extensão do arquivo que você deseja criar. Se você
não fizer isso, o arquivo .exe usará seu nome do arquivo de código-fonte que contém o
Sub Main procedimento e o arquivo .dll usará seu nome do primeiro arquivo de código-
fonte.
Se você especificar um nome de arquivo sem uma extensão .exe ou .dll, o compilador
adicionará automaticamente a extensão para você, dependendo do valor especificado
para a opção do -target compilador.
Exemplo
O código a seguir compila T2.vb e cria o arquivo T2.exe de saída.
Console
Confira também
Compilador de linha de comando do Visual Basic
-target (Visual Basic)
Linhas de Comando de Compilação de Exemplo
-platform (Visual Basic)
Artigo • 22/02/2023 • 3 minutos para o fim da leitura
Especifica qual versão de plataforma do common language runtime (CLR) pode executar
o arquivo de saída.
Sintaxe
Console
Argumentos
Termo Definição
x86 Compila o assembly para ser executado pelo CLR compatível com x86, de
32 bits.
Comentários
Use a opção -platform para especificar o tipo de processador direcionada pelo arquivo
de saída.
Em geral, os assemblies do .NET Framework gravados no Visual Basic serão executados
da mesma maneira, independentemente da plataforma. No entanto, existem alguns
casos em que se comportam de formas diferentes em plataformas distintas. Esses casos
comuns são:
A opção -platform reduzirá alguns problemas se você souber que fez suposições sobre
a arquitetura na qual seu código será executado. Especificamente:
Uma DLL compilada com o -platform:anycpu será executada no mesmo CLR que o
processo no qual foi carregado.
Para obter mais informações sobre como desenvolver um aplicativo para ser executado
em uma versão de 64 bits do Windows, confira Aplicativos de 64 bits.
Para definir -platform no IDE do Visual Studio
1. No Gerenciador de Soluções, escolha o projeto, abra o menu Projeto e, em
seguida, clique em Propriedades.
Para obter mais informações, confira Página Compilar, Designer de Projeto (Visual
Basic).
Exemplo
O exemplo a seguir mostra como usar a opção do compilador -platform .
Console
Confira também
-target (Visual Basic)
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-quiet
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Impede que o compilador exiba código para erros e avisos relacionados à sintaxe.
Sintaxe
Console
-quiet
Comentários
Por padrão, -quiet não está em vigor. Quando o compilador relata um erro ou aviso
relacionado à sintaxe, gera também a linha do código-fonte. Para aplicativos que
analisam a saída do compilador, pode ser mais conveniente para o compilador gerar
apenas o texto do diagnóstico.
VB
Module Module1
Sub Main()
x()
End Sub
End Module
Saída:
Console
x()
Console
E:\test\t2.vb(3) : error BC30451: Name 'x' is not declared.
7 Observação
Exemplo
O código a seguir compila T2.vb e não exibe código para diagnóstico de compilador
relacionado à sintaxe:
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-recurse
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-recurse:[dir\]file
Argumentos
dir
Opcional. O diretório no qual você deseja que a pesquisa comece. Se ele não for
especificado, a pesquisa começará no diretório do projeto.
file
Comentários
É possível usar curingas em um nome de arquivo para compilar todos os arquivos
correspondentes no diretório do projeto sem usar -recurse . Se nenhum nome de
arquivo de saída for especificado, o compilador baseá o nome do arquivo de saída no
primeiro arquivo de entrada processado. Geralmente, esse é o primeiro arquivo na lista
de arquivos compilados quando exibidos em ordem alfabética. Por esse motivo, é
melhor especificar um arquivo de saída usando a opção -out .
7 Observação
Exemplo
O comando a seguir compila todos os arquivos do Visual Basic no diretório atual.
Console
vbc *.vb
Console
Confira também
Compilador de linha de comando do Visual Basic
-out (Visual Basic)
Linhas de Comando de Compilação de Exemplo
-reference (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Syntax
Console
-reference:fileList
ou
Console
-r:fileList
Argumentos
Termo Definição
Comentários
Os arquivos importados devem conter metadados de assembly. Somente tipos públicos
são visíveis fora do assembly. A opção -addmodule importa metadados de um módulo.
Para o compilador reconhecer um tipo em um assembly (não um módulo), ele deve ser
forçado a resolver o tipo. Um exemplo de como você pode fazer isso é definir uma
instância do tipo. Outras maneiras estão disponíveis para resolver nomes de tipo em um
assembly para o compilador. Por exemplo, se você herdar de um tipo em um assembly,
o nome do tipo se tornará conhecido pelo compilador.
O arquivo de resposta Vbc.rsp, que referencia assemblies .NET Framework usados com
frequência, é usado por padrão. Use -noconfig se você não quiser que o compilador
use Vbc.rsp.
Exemplo
A linha de comando a seguir compila o arquivo de origem Input.vb e faz referência aos
assemblies de Metad1.dll e Metad2.dll para produzir Out.exe .
Console
Confira também
Compilador de linha de comando do Visual Basic
-noconfig
-target (Visual Basic)
Público
Linhas de Comando de Compilação de Exemplo
-refonly (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
A opção -refonly indica que uma saída primária da compilação deve ser um assembly
de referência em vez de um assembly implementação. O parâmetro -refonly
silenciosamente desabilita a geração de PDBs, uma vez que assemblies de referência
não podem ser executados.
Sintaxe
Console
-refonly
Comentários
O Visual Basic dá suporte à opção -refonly começando com a versão 15.3.
Confira também
-refout
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-refout (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-refout:filepath
Argumentos
filepath
Comentários
O Visual Basic dá suporte à opção -refout começando com a versão 15.3.
Sintaxe
Console
-removeintchecks[+ | -]
Argumentos
Termo Definição
Exemplo
O código a seguir compila Test.vb e desativa a verificação de erro de estouro inteiro.
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-resource (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-resource:filename[,identifier[,public|private]]
ou
Console
-res:filename[,identifier[,public|private]]
Argumentos
Termo Definição
filename Obrigatórios. O nome do arquivo de recurso a ser inserido no arquivo de saída. Por
padrão, filename é público no assembly. Coloque o nome do arquivo entre aspas
("") se o nome conter um espaço.
identifier Opcional. O nome lógico do recurso é o nome usado para carregá-lo. O padrão é o
nome do arquivo. Opcionalmente, você pode especificar se o recurso é público ou
privado no manifesto do assembly, como no seguinte: -res:filename.res,
myname.res, public
Comentários
Use -linkresource para vincular um recurso a um assembly sem colocar o arquivo de
recurso no arquivo de saída.
Se filename for um arquivo de recurso do .NET Framework criado, por exemplo, pelo
Resgen.exe (Gerador de Arquivos de Recurso) ou no ambiente de desenvolvimento, ele
poderá ser acessado com membros no namespace System.Resources (confira
ResourceManager para mais informações). Para acessar todos os outros recursos em
tempo de execução, use um dos seguintes métodos: GetManifestResourceInfo,
GetManifestResourceNamesou GetManifestResourceStream.
Para obter informações sobre como definir -resource no IDE do Visual Studio, consulte
Gerenciamento de Recursos de Aplicativo (.NET).
Exemplo
O código a seguir compila In.vb e anexa o arquivo Rf.resource de recurso.
Console
Confira também
Compilador de linha de comando do Visual Basic
-win32resource
-linkresource (Visual Basic)
-target (Visual Basic)
Linhas de Comando de Compilação de Exemplo
-rootnamespace
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Sintaxe
Console
-rootnamespace:namespace
Argumentos
Termo Definição
namespace O nome do namespace no qual incluir todas as declarações de tipo para o projeto
atual.
Comentários
Se você usar o arquivo executável do Visual Studio (Devenv.exe) para compilar um
projeto criado no ambiente de desenvolvimento integrado do Visual Studio, use -
rootnamespace para especificar o valor da propriedade RootNamespace. Consulte
Exemplo
O código a seguir compila In.vb e inclui todas as declarações de tipo no namespace
mynamespace .
Console
Confira também
Compilador de linha de comando do Visual Basic
Ildasm.exe (IL Disassembler)
Linhas de Comando de Compilação de Exemplo
-sdkpath
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-sdkpath:path
Argumentos
path
Comentários
Essa opção informa ao compilador do Visual Basic para carregar os arquivos mscorlib.dll
e Microsoft.VisualBasic.dll de um local não padrão. A opção -sdkpath foi projetada para
ser usada com -netcf. O .NET Compact Framework usa versões diferentes dessas
bibliotecas de suporte para evitar o uso de tipos e recursos de linguagem não
encontrados nos dispositivos.
7 Observação
Você pode especificar que o compilador deve ser compilado sem uma referência à
Biblioteca de Runtime do Visual Basic usando a opção do compilador -vbruntime . Para
obter mais informações, confira -vbruntime.
Exemplo
O código a seguir compila Myfile.vb com o .NET Compact Framework, usando as
versões de Mscorlib.dll e Microsoft.VisualBasic.dll encontradas no diretório de instalação
padrão do .NET Compact Framework na unidade C. Normalmente, você usaria a versão
mais recente do .NET Compact Framework.
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-netcf
-vbruntime
-target (Visual Basic)
Artigo • 28/11/2022 • 4 minutos para o fim da leitura
Sintaxe
Console
Comentários
A tabela a seguir resume os efeitos da opção -target .
Opção Comportamento
-target:library Faz com que o compilador crie uma DLL (biblioteca de vínculo
dinâmico).
-target:module Faz com que o compilador gere um módulo que pode ser adicionado a
um assembly.
-target:winmdobj Faz com que o compilador crie um arquivo intermediário que você
pode converter em um arquivo binário Windows Runtime (.winmd). O
arquivo .winmd pode ser consumido por programas JavaScript e C++,
bem como programas de linguagem gerenciada.
O arquivo .winmdobj foi projetado para ser usado como entrada para a
ferramenta de exportação WinMDExppara produzir um arquivo WinMD
(metadados do Windows). O arquivo WinMD tem uma extensão
.winmd e contém o código da biblioteca original e as definições do
WinMD que JavaScript, C++ e o Windows Runtime usam.
A menos que você especifique -target:module , -target faz com que um manifesto do
assembly .NET Framework seja colocado em um arquivo de saída.
Cada instância de Vbc.exe produz, no máximo, um arquivo de saída. Se você especificar
uma opção de compilador, como -out ou -target mais de uma vez, a última
processada pelo compilador será colocada em vigor. As informações sobre todos os
arquivos em uma compilação são adicionadas ao manifesto. Todos os arquivos de saída,
exceto os criados com -target:module podem conter metadados do assembly no
manifesto. Use Ildasm.exe (IL Disassembler) para exibir os metadados em um arquivo de
saída.
Exemplo
O código a seguir compila in.vb , criando in.dll :
Console
Confira também
Compilador de linha de comando do Visual Basic
-main
-out (Visual Basic)
-reference (Visual Basic)
-addmodule
-moduleassemblyname
Assemblies no .NET
Linhas de Comando de Compilação de Exemplo
-subsystemversion (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Especifica a versão mínima do subsistema no qual o arquivo executável gerado pode ser
executado, determinando assim as versões do Windows em que o arquivo executável
pode ser executado. Normalmente, essa opção garante que o arquivo executável possa
tirar proveito de determinados recursos de segurança que não estão disponíveis com
versões mais antigas do Windows.
7 Observação
Sintaxe
VB
-subsystemversion:major.minor
Parâmetros
major.minor
Zeros à esquerda na versão minor não alteram a versão, mas zeros à direita alteram. Por
exemplo, 6.1 e 6.01 se referem à mesma versão, mas 6.10 se refere a uma versão
diferente. É recomendável expressar a versão secundária como dois dígitos para evitar
confusão.
Comentários
A seguinte tabela lista as versões de subsistema comuns do Windows.
Versão do Windows Versão do subsistema
Windows 7 6.01
Windows 8 6.02
Valores padrão
O valor padrão da opção do compilador -subsystemversion depende das condições na
lista a seguir:
-target:appcontainerexe
-target:winmdobj
-platform:arm
O valor padrão será 6.00 se você estiver usando o MSBuild, se tiver como destino o
.NET Framework 4.5 e se não definiu nenhuma das opções de compilador que
foram especificadas anteriormente na lista.
Confira também
Compilador de linha de comando do Visual Basic
Propriedades MSBuild
-utf8output (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-utf8output[+ | -]
Argumentos
+ | -
Opcional. O padrão para essa opção é -utf8output- , o que significa que a saída do
compilador não usa a codificação UTF-8. Especificar -utf8output é o mesmo que
especificar -utf8output+ .
Comentários
Em algumas configurações internacionais, a saída do compilador não pode ser exibida
corretamente no console. Nessas situações, use -utf8output e redirecione a saída do
compilador para um arquivo.
7 Observação
Exemplo
O código a seguir compila In.vb e direciona o compilador para exibir a saída usando a
codificação UTF-8.
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-vbruntime
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Especifica que o compilador deve ser compilado sem uma referência à Biblioteca de
Runtime do Visual Basic ou com uma referência a uma biblioteca de runtime específica.
Sintaxe
Console
-vbruntime:{ - | + | * | path }
Argumentos
-
path
Comentários
A opção do compilador -vbruntime permite que você especifique que o compilador
deve ser compilado sem uma referência à Biblioteca de Runtime do Visual Basic. Se você
compilar sem uma referência à Biblioteca de Runtime do Visual Basic, erros ou avisos
serão registrados em código ou constructos de linguagem que geram uma chamada
para um auxiliar de runtime do Visual Basic. (Um auxiliar de runtime do Visual Basic é
uma função definida em Microsoft.VisualBasic.dll que é chamada em tempo de
execução para executar uma semântica de linguagem específica.)
A maioria dos objetos do tipo My não está disponível quando você usa as opções -
vbruntime- ou -vbruntime:path .
Classe Conversions
Método AscW(Char)
Método AscW(String)
Método ChrW(Int32)
Constante vbBack
Constante vbCr
Constante vbCrLf
Constante vbFormFeed
Constante vbLf
Constante vbNewLine
Constante vbNullChar
Constante vbNullString
Constante vbTab
Constante vbVerticalTab
Se o valor do argumento path for um caminho totalmente qualificado para uma DLL, o
compilador usará esse arquivo como a biblioteca de runtime. Se o valor do argumento
path não for um caminho totalmente qualificado para uma DLL, o compilador do Visual
Basic pesquisará a DLL identificada na pasta atual primeiro. Em seguida, ele pesquisará
no caminho especificado usando a opção do compilador -sdkpath. Se a opção do
compilador -sdkpath não for usada, o compilador pesquisará a DLL identificada na
pasta .NET Framework ( %systemroot%\Microsoft.NET\Framework\versionNumber ).
Exemplo
O exemplo a seguir mostra como usar a opção -vbruntime para compilar com uma
referência a uma biblioteca personalizada.
Console
vbc -vbruntime:C:\VBLibraries\CustomVBLibrary.dll
Confira também
Visual Basic Core – Novo modo de compilação no Visual Studio 2010 SP1
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-sdkpath
-verbose
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-verbose[+ | -]
Argumentos
+ | -
Opcional. Especificar -verbose é o mesmo que especificar -verbose+ e faz com que o
compilador emita mensagens detalhadas. O padrão dessa opção é -verbose- .
Comentários
A opção -verbose exibe informações sobre o número total de erros emitidos pelo
compilador, relata quais assemblies estão sendo carregados por um módulo e exibe
quais arquivos estão sendo compilados no momento.
7 Observação
Exemplo
O código a seguir compila In.vb e direciona o compilador para exibir informações de
status detalhadas.
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-warnaserror (Visual Basic)
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Faz com que o compilador trate a primeira ocorrência de um aviso como um erro.
Sintaxe
Console
-warnaserror[+ | -][:numberList]
Argumentos
Termo Definição
+|- Opcional. Por padrão, -warnaserror- está em vigor; os avisos não impedem que o
compilador produza um arquivo de saída. A opção -warnaserror , que é o mesmo
que -warnaserror+ , faz com que os avisos sejam tratados como erros.
numberList Opcional. A lista delimitada por vírgulas dos números de identificação do aviso aos
quais se aplica a opção -warnaserror . Se nenhuma identificação de aviso for
especificada, a opção -warnaserror se aplica a todos os avisos.
Comentários
A opção -warnaserror trata todos os avisos como erros. Quaisquer mensagens que
normalmente seriam relatadas como avisos são, em vez disso, relatadas como erros. O
compilador relatará as ocorrências subsequentes do mesmo aviso como avisos.
Por padrão, -warnaserror- está em vigor, o que faz com que os avisos sejam apenas
informativos. A opção -warnaserror , que é o mesmo que -warnaserror+ , faz com que
os avisos sejam tratados como erros.
Se você deseja que apenas avisos específicos sejam tratados como erros, pode
especificar uma lista separada por vírgulas de números de aviso para serem tratados
como erros.
7 Observação
A opção -warnaserror não controla como os avisos são exibidos. Use a opção -
nowarn para desativar os avisos.
Para definir -warnaserror para tratar todos os avisos como erros no IDE do Visual Studio
Para definir -warnaserror para tratar avisos específicos como erros no IDE do Visual Studio
4. Verifique se a caixa de seleção Tratar todos os avisos como erros está desmarcada.
5. Selecione Erro na coluna Notificação adjacente ao aviso que deve ser tratado como um erro.
Exemplo 1
O código a seguir compila In.vb e direciona o compilador para exibir um erro para a
primeira ocorrência de cada aviso que ele encontre.
Console
Exemplo 2
O código a seguir compila T2.vb e trata apenas o aviso de variáveis locais não utilizadas
(42024) como um erro.
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
Configurando avisos no Visual Basic
-win32icon
Artigo • 28/11/2022 • 2 minutos para o fim da leitura
Insere um arquivo .ico no arquivo de saída. Esse arquivo .ico representa o arquivo de
saída no File Explorer.
Sintaxe
Console
-win32icon:filename
Argumentos
Termo Definição
filename O arquivo .ico para adicionar ao seu arquivo de saída. Coloque o nome do arquivo
entre aspas ("") se o nome conter um espaço.
Comentários
Você pode criar um arquivo .ico com o RC (Compilador de Recursos do Microsoft
Windows). O Compilador de Recurso é invocado quando você compila um programa do
Visual C++; um arquivo .ico é criado com base no arquivo .rc. As opções -win32icon e -
win32resource são mutualmente exclusivas.
Consulte -linkresource (Visual Basic) para fazer referência a um arquivo de recurso .NET
Framework ou -resource (Visual Basic) para anexar um arquivo de recurso .NET
Framework. Consulte -win32resource para importar um arquivo .res.
Exemplo
O código a seguir compila In.vb e anexa um arquivo .ico Rf.ico .
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-win32manifest (Visual Basic)
Artigo • 07/04/2023 • 2 minutos para o fim da leitura
Identifica um arquivo de manifesto do aplicativo Win32 definido pelo usuário para ser
inserido em um arquivo PE de um projeto.
Sintaxe
Console
-win32manifest: fileName
Argumentos
Termo Definição
Comentários
Por padrão, o compilador do Visual Basic insere um manifesto do aplicativo que
especifica o nível de execução solicitado asInvoker. Ele cria o manifesto na mesma pasta
em que o arquivo executável é compilado, normalmente a pasta bin\Debug ou
bin\Release quando você usa o Visual Studio. Se você quiser fornecer um manifesto
personalizado, por exemplo, para especificar um nível de execução solicitado de
highestAvailable ou requireAdministrator, use esta opção para especificar o nome do
arquivo.
7 Observação
Um aplicativo que não tem nenhum manifesto do aplicativo que especifica que um nível
de execução solicitado estará sujeito à virtualização de arquivos/Registro sob o recurso
de Controle de Conta de Usuário no Windows Vista. Para saber mais sobre virtualização,
confira Implantação do ClickOnce no Windows Vista.
Seu aplicativo estará sujeito à virtualização se alguma das condições a seguir for
verdadeira:
Exemplo
O exemplo a seguir mostra o manifesto padrão que o Compilador do Visual Basic insere
em um PE.
7 Observação
XML
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Confira também
Compilador de linha de comando do Visual Basic
-nowin32manifest (Visual Basic)
-win32resource
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Sintaxe
Console
-win32resource:filename
Argumentos
filename
O arquivo de recurso que você deseja adicionar ao seu arquivo de saída. Coloque o
nome do arquivo entre aspas ("") se o nome conter um espaço.
Comentários
Você pode criar um arquivo de recurso Win32 com o RC (Microsoft Windows Resource
Compiler).
Consulte -linkresource (Visual Basic) para fazer referência a um arquivo de recurso .NET
Framework ou -resource (Visual Basic) para anexar um arquivo de recurso .NET
Framework.
7 Observação
Exemplo
O código a seguir compila In.vb e anexa um arquivo de recurso Win32: Rf.res
Console
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
Opções de compilador do Visual Basic
listadas por categoria
Artigo • 28/11/2022 • 4 minutos para o fim da leitura
Saída do compilador
Opção Finalidade
Otimização
Opção Finalidade
Arquivos de saída
Opção Finalidade
- Faz com que o compilador gere um assembly de conteúdo binário idêntico entre
deterministic compilações se as entradas são idênticas.
Assemblies .NET
Opção Finalidade
-keyfile Especifica um arquivo que contém uma chave ou um par de chaves para
dar um nome forte a um assembly.
-analyzer Executar os analisadores com basse nesse assembly (forma abreviada: -a)
Verificação de depuração/erros
Opção Finalidade
-bugreport Cria um arquivo que contém informações que tornam mais fácil relatar um
bug.
-quiet Impede que o compilador exiba código para erros e avisos relacionados à
sintaxe.
Ajuda
Opção Finalidade
ajuda Exibe as opções do compilador. Esse comando é o mesmo que especificar a opção -? .
Nenhuma compilação ocorre.
Idioma
Opção Finalidade
Pré-processador
Opção Finalidade
Recursos
Opção Finalidade
Diversos
Opção Finalidade
-errorreport Especifica como o compilador do Visual Basic deve relatar erros internos do
compilador.
-main Especifica a classe que contém o procedimento Sub Main a ser usado na
inicialização.
-vbruntime Especifica que o compilador deve ser compilado sem uma referência à
Biblioteca de Runtime do Visual Basic ou com uma referência a uma
biblioteca de runtime específica.
Confira também
Opções do compilador do Visual Basic listadas em ordem alfabética
Gerenciar propriedades do projeto e da solução
Informações de referência do .NET
Framework (Visual Basic)
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
Este tópico fornece links para informações sobre como trabalhar com a biblioteca de
classes do .NET Framework.
Seções relacionadas
Introdução
Fornece uma visão geral abrangente do .NET Framework e links para recursos adicionais.
Guia de desenvolvimento
Ferramentas
Descreve as ferramentas que você pode usar para desenvolver, configurar e implantar
aplicativos usando tecnologias do .NET Framework.
Este site contém a especificação Visual Basic 11. Ela é criada de arquivos Markdown
contidos no repositório do GitHub dotnet/vblang .
Confira também
Referência da linguagem Visual Basic
Próximo
Instruções passo a passo da linguagem
Visual Basic
Artigo • 22/02/2023 • 2 minutos para o fim da leitura
O passo a passo fornece instruções detalhadas para cenários comuns, o que os torna
um bom local para começar a aprender sobre o produto ou uma área de recurso
específica.
Manipulando eventos
Definindo classes
Este passo a passo demonstra como você pode usar os recursos de linguagem do
Visual Basic para gravar expressões de consulta LINQ (Consulta Integrada à
Linguagem).
Demonstra como criar objetos COM em Visual Basic, com e sem o modelo de
classe COM.
Demonstra como usar o Visual Basic 6.0 para criar um objeto COM contendo uma
classe e, em seguida, usá-la como uma classe base em Visual Basic.
Descreve como criar um assembly e um programa cliente que incorpora tipos dele.
Demonstra como usar funções do Visual Basic para determinar informações sobre
um arquivo, procurar uma cadeia de caracteres em um arquivo e gravar em um
arquivo.