Visual Basic Documentation
Visual Basic Documentation
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
Para novos recursos, consulte Visual Basic 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
Para novos recursos, consulte Visual Basic 16.0.
Visual Basic 15.5/Visual Studio 2017 versão 15.5
Para novos recursos, consulte Visual Basic 15.5.
Visual Basic 15.3 /Visual Studio 2017 versão 15.3
Para novos recursos, consulte Visual Basic 15.3.
Visual Basic 15/Visual Studio 2017
Para novos recursos, consulte Visual Basic 2017.
Visual Basic/Visual Studio 2015
Para novos recursos, consulte Visual Basic 14.
Visual Basic/Visual Studio 2013
Visualizações de tecnologia do .NET Compiler Platform ("Roslyn")
Visual Basic/Visual Studio 2012
palavras-chave Async e await , iteradores, atributos de informações do chamador
Visual Basic, Visual Studio 2010
Propriedades autoimplementadas, inicializadores de coleção, continuação de linha implícita,
covariância/contravariância genérica, acesso ao namespace global
Visual Basic/Visual Studio 2008
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
Visual Basic/Visual Studio 2005
O tipo My e tipos auxiliares (acesso ao aplicativo, computador, sistema de arquivos, rede)
Visual Basic/Visual Studio .NET 2003
Operadores bit shift, declaração de variável de loop
Visual Basic/Visual Studio .NET 2002
A primeira versão do Visual Basic .NET
Visual Basic 16.9
Visual Basic 16.9 permite o consumo de propriedades somente de init.
Para usar o caractere de sublinhado como um separador à esquerda, você deve adicionar o seguinte elemento
ao arquivo de projeto (*.vbproj) do Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
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:
Defina um tipo personalizado (uma Class ou Structure ). Esta é uma solução pesada.
Definir um ou mais parâmetros ByRef , além de retornar um valor do método.
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.
Imports [Link]
O chamador pode então chamar o método e manipular a tupla retornada com o código semelhante ao seguinte.
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.
Supor te para valores retornados por referência em C#
Começando com o C# 7.0, o C# é compatível com valores retornados de referência. Isto é, quando o método de
chamada recebe um valor retornado por referência, ele pode alterar o valor da referência. O Visual Basic não
permite a criação de métodos com valores retornados de referência, mas isso não permite o consumo e a
modificação de valores de retorno de referência.
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 .
using System;
return [Link]();
}
}
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.
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.
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.
Module Example
Public Sub Main()
Dim sentence As New Sentence("A time to see the world is now.")
Dim found = False
Dim returns = RefHelper([Link]("A", found), "A good", found)
[Link]([Link]())
End Sub
Visual Basic 14
NameOf
Você pode obter o nome da cadeia de caracteres não qualificada de um tipo ou de um membro para uso em
uma mensagem de erro sem realizar hard-coding de uma cadeia de caracteres. Isso permite que seu código
permaneça correto ao refatorar. Esse recurso também é útil para conectar links MVC do tipo modelo-exibição-
controlador e acionar eventos de alteração de propriedade.
Interpolação de cadeia de caracteres
Você pode usar expressões de interpolação de cadeia de caracteres para construir cadeias de caracteres. Uma
expressão de cadeia de caracteres interpolada parece com uma cadeia de caracteres de modelo que contém
expressões. Uma cadeia de caracteres interpolada é mais fácil de entender, em relação a argumentos, do que a
formatação composta.
Acesso de membro nulo condicional e indexação
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.
Literais de cadeia multilinha
Literais de cadeia de caracteres podem conter sequências de nova linha. Você não precisa da solução alternativa
antiga de usar <xml><![CDATA[...text with newlines...]]></xml>.Value
Comentários
É possível colocar comentários após continuações de linha implícitas em expressões inicializadora e entre
termos de expressão LINQ.
Resolução de nome totalmente qualificado mais inteligente
Dado um código como [Link](1000) , o Visual Basic pesquisava o namespace "Threading",
descobria que ele era ambíguo entre [Link] e [Link] e, então, relatava um erro.
Agora, o Visual Basic considera os dois namespaces possíveis juntos. Se você mostrar a lista de conclusão, o
editor do Visual Studio listará membros dos dois tipos na lista de conclusão.
Literais de data com o ano primeiro
Você pode ter literais de data no formato aaaa-mm-dd, #2015-03-17 16:10 PM# .
Propriedades de interface readonly
Você pode implementar propriedades de interface readonly usando uma propriedade readwrite. A interface
garante a funcionalidade mínima e não impede que uma classe de implementação permita que a propriedade
seja definida.
TypeOf <expr> IsNot <type>
Para facilitar a leitura do seu código, agora você pode usar TypeOf com IsNot .
#Disable aviso <ID> e #Enable aviso <ID>
É possível desabilitar e habilitar avisos específicos para regiões dentro de um arquivo de origem.
Melhorias no comentário da documentação XML
Ao escrever comentários de documento, você obtém o editor inteligente e suporte de build para validar nomes
de parâmetro, tratamento adequado de crefs (genéricos, operadores etc.), coloração e refatoração.
Definições de interfaces e módulos parciais
Além das classes e structs, você pode declarar interfaces e módulos parciais.
As diretivas #Region dentro de corpos de método
Você pode colocar delimitadores #Region...#End Region em qualquer lugar em um arquivo, dentro de funções e
até mesmo estendê-los por corpos de função.
Definições de substituição são implicitamente sobrecargas
Se você adicionar o modificador Overrides a uma definição, o compilador adicionará implicitamente
Overloads , para que você possa digitar menos código em casos comuns.
Interface ICustomer
Sub GetDetails(x As Integer)
End Interface
Interface ITime
Sub GetDetails(x As String)
End Interface
Agora, o compilador usará regras de resolução de sobrecarga normais para escolher o GetDetails mais
apropriado a ser chamado e você pode declarar relações de interface no Visual Basic, como aquelas mostradas
no exemplo.
Confira também
Novidades no Visual Studio 2017
Novidades no Visual Studio 2019
Saiba mais sobre alterações interruptivas no
compilador de Visual Basic
27/09/2021 • 2 minutes to read
A equipe da Roslyn mantém uma lista de alterações interruptivas nos compiladores do C# e do Visual Basic.
você pode encontrar informações sobre essas alterações nesses links em seu repositório de GitHub:
Alterações interruptivas no VS2019 Atualização 1 e posteriores em comparação com o VS2019
Alterações interruptivas desde o VS2017 (VB 15)
Alterações interruptivas no Roslyn 3.0 (VS2019) do Roslyn 2.* (VS2017)
Alterações interruptivas no Roslyn 1.0 (VS2015) do compilador nativo C# (VS2013 e anterior).
Membros de enumeração conflitantes
Introdução ao Visual Basic
27/09/2021 • 2 minutes to read
Esta seção da documentação ajuda você a começar o desenvolvimento de aplicativos do Visual Basic.
Informações adicionais
Novidades da Visual Basic Lista novos recursos em cada uma das versões do Visual Basic .NET.
Recursos adicionais para Visual Basic programadores Fornece uma lista de sites e grupos de notícias que
podem ajudá-lo a encontrar respostas para problemas comuns.
Confira também
Obter Visual Basic Fornece links de download para Visual Studio versões que vêm com Visual Basic
suporte, incluindo versões gratuitas.
Programação orientada a objetos Fornece links para páginas que apresentam a programação orientada a
objeto e descrevem como criar seus próprios objetos e usar objetos para simplificar a codificação.
Exemplos Fornece links para código de exemplo no Visual Basic.
Instruções Fornece uma lista de páginas de Ajuda que demonstram aspectos da linguagem do Visual
Basic.
Opções de comentários para Visual Studio Aborda como receber suporte e fazer comentários.
Visual Studio Fornece links para a documentação do Visual Studio.
C# Fornece links para a documentação sobre desenvolvimento de aplicativos com o Visual C#.
Visual C++ Fornece links para a documentação do Visual C++.
Desenvolvimento do Office e do SharePoint Fornece informações sobre como usar o Microsoft Office e o
Visual Studio como parte de um aplicativo de negócios.
Recursos adicionais
27/09/2021 • 2 minutes to read
Os sites a seguir fornecem orientações e podem ajudar a encontrar respostas para problemas comuns.
Recursos da Microsoft
Na Web
URL DESC RIÇ Ã O
Design de linguagem Visual Basic .NET Repositório oficial no GitHub para design de linguagem
Visual Basic .NET.
Blog da equipe do Microsoft Visual Basic Fornece acesso ao blog da equipe do Visual Basic.
Exemplos de código
URL DESC RIÇ Ã O
Fóruns
URL DESC RIÇ Ã O
Vídeos e webcasts
URL DESC RIÇ Ã O
Suporte
URL DESC RIÇ Ã O
Perguntas sobre o Visual Studio Permite arquivar bugs ou fornecer sugestões à Microsoft
sobre o .NET e o Visual Studio. Você também pode relatar
um bug selecionando Ajuda > para Enviar Comentários
Relatar > um Problema Visual Studio.
Recursos de terceiros
URL DESC RIÇ Ã O
Tutlane Tutlane fornece tutoriais para aprender Visual Basic, C#, etc.
Confira também
Introdução ao Visual Basic
Opções de comentários do Visual Studio
Desenvolvendo aplicativos com o Visual Basic
27/09/2021 • 2 minutes to read
Nesta seção
Programando no Visual Basic
Abrange uma variedade de assuntos de programação.
Desenvolvimento com My
Discute um novo recurso chamado My , que fornece acesso a informações e a instâncias de objetos padrão que
são relacionadas a um aplicativo e seu ambiente de tempo de execução.
Acessando dados em aplicativos Visual Basic aplicativos
Contém ajuda para acessar os dados do Visual Basic.
Criando e usando componentes no Visual Basic
Define o termo componente e discute como e quando criar componentes.
Noções básicas de Aplicativo do Windows Forms
Fornece informações sobre como criar aplicativos do Windows Forms usando o Visual Studio.
Personalizando projetos e estendendo My
Descreve como você pode personalizar modelos de projeto para fornecer mais objetos My .
Seções relacionadas
Guia de programação do Visual Basic
Percorre os elementos essenciais de programação com o Visual Basic.
Visual Basic Referência de linguagem
Contém documentação de referência para a linguagem do Visual Basic.
Programando no Visual Basic
27/09/2021 • 2 minutes to read
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 como usar o objeto [Link] para acessar informações sobre o computador
no qual um aplicativo será executado e como controlar o computador.
Registrando informações em log a partir do aplicativo
Contém documentação sobre como registrar informações de seu aplicativo usando os objetos
[Link] e [Link] e como estender recursos de registro em log do aplicativo.
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)
27/09/2021 • 2 minutes to read
Nesta seção
Executando sons
Lista tarefas associadas a [Link] , como reproduzir um som em segundo plano.
Armazenar dados e ler da área de transferência
Lista tarefas associadas a [Link] , como leitura ou gravação de dados na Área de Transferência.
Obter informações sobre o computador
Lista tarefas associadas a [Link] , como determinar o nome completo ou endereços IP do
computador.
Acessar o teclado
Lista tarefas associadas a [Link] , como determinar se CAPS LOCK está ativado.
Acessar o mouse
Lista tarefas associadas a [Link] , como determinar se um mouse está presente.
Realizar operações de rede
Lista tarefas associadas a [Link] , como carregar ou baixar arquivos.
Acessar as portas do computador
Lista tarefas associadas a [Link] , como mostrar as portas seriais disponíveis ou enviar cadeias de
caracteres a portas seriais.
Ler e gravar no Registro
Lista tarefas associadas a [Link] , como leitura ou gravação de dados em chaves do Registro.
Registrando informações em log a partir do
aplicativo (Visual Basic)
27/09/2021 • 2 minutes to read
Esta seção contém tópicos que abordam como registrar informações em log do aplicativo usando os objetos
[Link] ou [Link] 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 [Link]á disponível somente para aplicativos do [Link]. Para aplicativos cliente, use
[Link] . Para obter mais informações, consulte Log.
Tarefas
PA RA C O N SULT E
Gravar informações de rastreamento em logs do aplicativo Como: registrar mensagens em log quando o aplicativo é
quando o aplicativo for inicializado e desligado. iniciado ou encerrado
Configure [Link] para gravar informações Como: gravar informações de evento em um arquivo de
em um arquivo de texto. texto
Configure [Link] para gravar informações Como: gravar em um Log de Eventos do Aplicativo
em um log de eventos.
Altere o local em que [Link] grava as Passo a passo: alterar o local no qual [Link]
informações. grava informações
Determine o local em que [Link] grava as Passo a passo: determinar o local no qual [Link]
informações. grava informações
Crie um ouvinte de log personalizado para Passo a passo: criar ouvintes de log personalizados
[Link] .
Filtre a saída dos logs [Link] . Passo a passo: filtrar a saída de [Link]
Confira também
[Link]
Trabalhar com logs do aplicativo
Solução de problemas: ouvintes de log
Acessando dados do usuário (Visual Basic)
28/09/2021 • 2 minutes to read
Esta seção contém tópicos que lidam com o objeto [Link] e com as tarefas que você pode realizar com ele.
O objeto [Link] fornece acesso a informações sobre o usuário conectado, retornando um objeto que
implementa a interface IPrincipal.
Tarefas
PA RA C O N SULT E
Confira também
User
Acessando formulários de aplicativo (Visual Basic)
27/09/2021 • 2 minutes to read
O objeto [Link] 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 [Link] 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.
PA RA C O N SULT E
Confira também
OpenForms
SplashScreen
Objeto [Link]
Acessando serviços Web do aplicativo (Visual Basic)
27/09/2021 • 2 minutes to read
O objeto [Link] 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 [Link] . 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.
PA RA C O N SULT E
Chamar um serviço Web de forma assíncrona e manipular Como: Chamar um serviço Web de forma assíncrona
um evento quando ele for concluído
Confira também
Objeto [Link]
Como chamar um serviço Web de forma assíncrona
(Visual Basic)
27/09/2021 • 2 minutes to read
Este exemplo conecta um manipulador a um evento de manipulador assíncrono do serviço Web, para que ele
possa recuperar o resultado de uma chamada de método assíncrono. Este exemplo usou o serviço Web
DemoTemperatureService em [Link] .
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 [Link] , 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.
NOTE
Esse código não funciona em aplicativos Web, pois o [Link] não oferece suporte ao objeto [Link] .
[Link]
NOTE
Você não pode usar a instrução Handles para associar um manipulador de eventos aos eventos do objeto
[Link] .
3. Adicione um campo para acompanhar se o manipulador de eventos tiver sido adicionado ao evento
getTempCompleted :
Para chamar o método Web getTemp de forma assíncrona, chame o método CallGetTempAsync . Quando
o método Web for concluído, seu valor retornado será transmitido ao manipulador de eventos
getTempCompletedHandler .
Confira também
Como acessar serviços Web de aplicativo
Objeto [Link]
Acessando configurações de aplicativo (Visual Basic)
27/09/2021 • 2 minutes to read
Esta seção contém tópicos que descrevem o objeto [Link] e as tarefas que ele permite que você realize.
[Link]
As propriedades do objeto [Link] fornecem acesso às configurações do seu aplicativo. Para adicionar ou
remover configurações, use o painel Configurações do Designer de Projeto .
Os métodos do objeto [Link] permitem que você salve as configurações do usuário atual ou reverta as
configurações do usuário para os últimos valores salvos.
Tarefas
A tabela a seguir lista exemplos que mostram como acessar os formulários de um aplicativo.
PA RA C O N SULT E
Atualizar o valor de uma configuração de usuário Como alterar configurações do usuário no Visual Basic
Exibir configurações de aplicativo e de usuário em uma grade Como criar grades de propriedades para configurações de
de propriedades usuário no Visual Basic
Salvar valores atualizados de configuração de usuário Como persistir configurações de usuário no Visual Basic
Determinar os valores das configurações de usuário Como ler configurações do aplicativo no Visual Basic
Confira também
Gerenciando configurações de aplicativo (.NET)
Objeto [Link]
Processando unidades, diretórios e arquivos (Visual
Basic)
27/09/2021 • 2 minutes to read
Você pode usar o Visual Basic para processar unidades, pastas e arquivos com o objeto [Link] ,
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
Discute como usar o objeto [Link] para trabalhar com arquivos, unidades e pastas.
Noções básicas de E/S de arquivo do .NET Framework e o sistema de arquivos (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.
Passo a passo: manipular arquivos usando métodos do .NET Framework
Demonstra como usar o .NET Framework para manipular arquivos e pastas.
Instruções passo a passo: manipulando arquivos e diretórios no Visual Basic
Demonstra como usar o objeto [Link] para manipular arquivos e pastas.
Seções relacionadas
Estrutura do programa e convenções de código
Fornece diretrizes para a estrutura física e a aparência dos programas.
FileSystem
Documentação de referência do objeto [Link] e seus membros.
Desenvolvimento com My (Visual Basic)
27/09/2021 • 2 minutes to read
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 [Link], [Link] e [Link]
Descreve os três objetos My centrais [Link] , [Link] e [Link] , que fornecem acesso a
informações e funcionalidade
Instâncias de objeto padrão fornecidas por [Link] e [Link]
Descreve os objetos [Link] e [Link] , que fornecem acesso a formulários, fontes de dados e
serviços Web XML usados por seu aplicativo.
Método RAD com [Link] e [Link]
Descreve os objetos [Link] e [Link] , que fornecem acesso a recursos e configurações de um
aplicativo.
Visão geral do modelo de aplicativo do Visual Basic
descreve o modelo de inicialização/desligamento do aplicativo Visual Basic.
Como My depende do tipo de projeto
Fornece detalhes sobre quais os recursos My que estão disponíveis em diferentes tipos de projeto.
Confira também
ApplicationBase
Computer
User
Objeto [Link]
Objeto [Link]
Como My depende do tipo de projeto
Executando tarefas com [Link],
[Link] e [Link] (Visual Basic)
27/09/2021 • 2 minutes to read
Os três Myobjetos centrais que fornecem acesso às informações e à funcionalidade comumente usada são
[Link] ( ApplicationBase ), [Link] ( Computer ) e [Link] ( User ). Você pode usar esses objetos
para acessar informações relacionadas ao aplicativo atual, ao computador em que o aplicativo está instalado ou
ao usuário atual do aplicativo, respectivamente.
' Displays a message box that shows the full command line for the
' application.
Dim args As String = ""
For Each arg As String In [Link]
args &= arg & " "
Next
MsgBox(args)
Além de recuperar informações, os membros expostos por meio desses três objetos também permitem executar
métodos relacionados a esse objeto. Por exemplo, você pode acessar uma variedade de métodos para
manipular arquivos ou atualizar o registro por meio do [Link] .
A e/s de arquivo é significativamente mais fácil e rápida com My o, que inclui uma variedade de métodos e
propriedades para manipular arquivos, diretórios e unidades. O TextFieldParser objeto permite que você leia de
grandes arquivos estruturados que têm campos delimitados ou de largura fixa. Este exemplo abre o
TextFieldParser reader e o usa para ler C:\TestFolder1\[Link] .
Dim reader =
[Link]("C:\TestFolder1\[Link]")
[Link] = [Link]
[Link] = New String() {","}
Dim currentRow As String()
While Not [Link]
Try
currentRow = [Link]()
Dim currentField As String
For Each currentField In currentRow
MsgBox(currentField)
Next
Catch ex As [Link]
MsgBox("Line " & [Link] &
"is not valid and will be skipped.")
End Try
End While
[Link] que você altere a cultura do seu aplicativo. O exemplo a seguir demonstra como esse
método pode ser chamado.
' Changes the current culture for the application to Jamaican English.
[Link]("en-JM")
Confira também
ApplicationBase
Computer
User
Como My depende do tipo de projeto
Instâncias de objeto padrão fornecidas por
[Link] e [Link] (Visual Basic)
28/09/2021 • 2 minutes to read
Os objetos My. Forms e My. WebServices fornecem acesso a formulários, fontes de dados e Web Services XML
usados pelo seu aplicativo. Eles fornecem acesso por meio de coleções de instâncias padrão de cada um desses
objetos.
Instâncias padrão
Uma instância padrão é uma instância da classe fornecida pelo tempo de execução e não precisa ser declarada e
instanciada usando as Dim New instruções e. O exemplo a seguir demonstra como você pode ter declarado e
instanciado uma instância de uma Form classe chamada Form1 e como agora é possível obter uma instância
padrão dessa Form classe por meio de [Link] .
' With [Link], you can directly call methods on the default
' instance()
[Link]()
O [Link] objeto retorna uma coleção de instâncias padrão para cada Form classe que existe em seu projeto.
Da mesma forma, [Link] o 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 [Link]
Objeto [Link]
Como My depende do tipo de projeto
Desenvolvimento de aplicativo rápido com
[Link] e [Link] (Visual Basic)
27/09/2021 • 2 minutes to read
O objeto fornece acesso aos recursos do aplicativo e permite que [Link] você recupere dinamicamente
recursos para seu aplicativo.
Recuperando recursos
Vários recursos, como arquivos de áudio, ícones, imagens e cadeias de caracteres, podem ser recuperados por
meio do [Link] objeto . Por exemplo, você pode acessar os arquivos de recurso específicos da cultura do
aplicativo. O exemplo a seguir define o ícone do formulário para o ícone chamado Form1Icon armazenado no
arquivo de recurso do aplicativo.
Sub SetFormIcon()
[Link] = [Link].Form1Icon
End Sub
O [Link] objeto expõe apenas recursos globais. Ele não fornece acesso aos arquivos de recurso
associados aos formulários. Acesse os recursos do formulário.
Da mesma forma, o objeto fornece acesso às configurações do aplicativo e permite que você armazene e
recupere dinamicamente as configurações de propriedade e outras informações [Link] para seu
aplicativo. Para obter mais informações, consulte Objeto [Link] e Objeto [Link]ções.
Confira também
Objeto [Link]
Objeto [Link]
Acessando configurações de aplicativo
Visão geral do modelo de aplicativo do Visual Basic
28/09/2021 • 3 minutes to read
Visual Basic fornece um modelo bem definido para controlar o comportamento de aplicativos Windows Forms:
o modelo de aplicativo Visual Basic. Esse modelo inclui eventos para manipular a inicialização e o desligamento
do aplicativo, bem como eventos para capturar exceções sem tratamento. Ele também oferece suporte para o
desenvolvimento de aplicativos de instância única. O modelo de aplicativo é extensível, de modo que os
desenvolvedores que precisam de mais controle podem personalizar seus métodos substituíveis.
Ao manipular o StartupNextInstance evento, você pode controlar como seu aplicativo de instância única se
comporta. por exemplo, o Microsoft Outlook normalmente é executado como um aplicativo de instância única;
quando Outlook estiver em execução e você tentar iniciar Outlook novamente, o foco mudará para a instância
original, mas outra instância não abrirá.
Disponibilidade
por padrão, o modelo de aplicativo Visual Basic está disponível para projetos Windows Forms. Se você
configurar o aplicativo para usar um objeto de inicialização diferente ou iniciar o código do aplicativo com um
personalizado Sub Main , então esse objeto ou classe pode precisar fornecer uma implementação da
WindowsFormsApplicationBase classe para usar o modelo de aplicativo. para obter informações sobre como
alterar o objeto de inicialização, consulte página do aplicativo, Designer de Project (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)
28/09/2021 • 2 minutes to read
My expõe apenas os objetos exigidos por um tipo de projeto específico. Por exemplo, o objeto está disponível
em um aplicativo Windows Forms, mas [Link] não está disponível em um aplicativo de console. Este tópico
descreve quais objetos My estão disponíveis em diferentes tipos de projeto.
Em um projeto de site, expõe objetos relevantes para um desenvolvedor da Web (como os objetos e ) ao
suprimir objetos que não são My relevantes [Link] [Link] (como o [Link] objeto ). A imagem a
seguir mostra o My modelo de objeto em um projeto de site da Web:
Detalhes do projeto
A tabela a seguir mostra quais objetos são habilitados por padrão para oito tipos de projeto: aplicativo
Windows, biblioteca de classes, aplicativo de console, biblioteca de controle Windows, biblioteca de controle da
Web, serviço Windows, vazio e My site.
Há três versões do objeto , duas versões do objeto e duas versões do objeto ; os detalhes sobre essas versões
são dados nas notas [Link] [Link] de [Link] rodapé após a tabela.
W IN DO W
S B IB L IOT E
A P L IC AT I B IB L IOT E C A DE SERVIÇ O
VO DO B IB L IOT E A P L IC AT I C A DE C O N T RO DO
M EU W IN DO W C A DE VO DO C O N T RO L E DA W IN DO W
O B JETO S C L A SSES C O N SO L E LE W EB S VA Z IO SIT E
Sim 1
[Link] Sim 2 Sim 3 Sim 2 No Sim 3 Não Não
Sim
[Link] Sim Sim Sim Sim Sim Não Não
1 Windows Forms versão do [Link] . Deriva da versão do console (consulte a observação 3); adiciona
suporte para interação com as janelas do aplicativo e fornece o modelo de aplicativo Visual Basic.
2 versão da biblioteca do [Link]
. Fornece a funcionalidade básica necessária para um aplicativo:
fornece membros para gravar no log do aplicativo e acessar informações do aplicativo.
3 versão do console do [Link] . deriva da versão da biblioteca (consulte a observação 2) e adiciona
membros adicionais para acessar os argumentos de linha de comando do aplicativo e ClickOnce informações de
implantação.
4 Windows versão do [Link] . Deriva da versão do servidor (consulte a observação 5) e fornece acesso a
objetos úteis em um computador cliente, como o teclado, a tela e o mouse.
5 versão do servidor do [Link] . Fornece informações básicas sobre o computador, como o nome, o
acesso ao relógio e assim por diante.
6 Windows versão do [Link] . Esse objeto é associado à identidade atual do thread.
7 versão da Web do [Link] . Esse objeto é 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
-definir (Visual Basic)
Objeto [Link]
Objeto [Link]
Objeto [Link]
Objeto [Link]
Acessando dados em aplicativos do Visual Basic
27/09/2021 • 2 minutes to read
O Visual Basic inclui vários novos recursos para ajudar no desenvolvimento de aplicativos que acessam dados.
Formulários de associação de dados para aplicativos do Windows são criados arrastando itens da janela Fontes
de Dados para um formulário. Associe controles a dados arrastando itens da janela Fontes de Dados para os
controles existentes.
Seções relacionadas
Acesso a dados no Visual Studio
Fornece links para páginas que discutem a incorporação da funcionalidade de acesso a dados aos seus
aplicativos.
Ferramentas de dados do Visual Studio para .NET
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 informações sobre LINQ to SQL. Inclui exemplos de programação.
Ferramentas LINQ to SQL no Visual Studio
Fornece links para tópicos sobre como criar um modelo de objeto LINQ to SQL em aplicativos.
Trabalhar com conjuntos de dados em aplicativos de n camadas
Fornece links para tópicos sobre como criar aplicativos de dados multicamadas.
Adicionar novas conexões
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 [Link].
Ferramentas de conjuntos de dados no Visual Studio
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.
Editar dados em conjuntos de dados
Fornece links para páginas que descrevem como manipular os dados nas tabelas de dados de um conjunto de
dados.
Validar dados em conjuntos 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.
Salvar dados novamente no banco de dados
Fornece links para páginas que explicam como enviar dados atualizados de um aplicativo para o banco de
dados.
[Link]
Descreve as classes [Link], que expõem serviços de acesso a dados ao programador do .NET Framework.
Dados em soluções do Office
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
27/09/2021 • 2 minutes to read
Classes de componentes
O namespace [Link] 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.
As classes de componente principais são:
Component. Uma implementação base para a interface IComponent. Essa classe habilita o
compartilhamento de objeto entre aplicativos.
MarshalByValueComponent. Uma implementação base para a interface IComponent.
Container. A implementação base para a interface IContainer. Essa classe encapsula zero ou mais
componentes.
Algumas das classes usadas para licenciamento de componentes são:
License. A classe base abstrata para todas as licenças. Uma licença é concedida a uma instância específica
de um componente.
LicenseManager. Fornece propriedades e métodos para adicionar uma licença a um componente e
gerenciar um LicenseProvider.
LicenseProvider. A classe base abstrata para implementar um provedor de licença.
LicenseProviderAttribute. Especifica a classe LicenseProvider a ser usada com uma classe.
Classes normalmente usadas para descrever e persistir componentes.
TypeDescriptor. Fornece informações sobre as características de um componente, como atributos,
propriedades e eventos.
EventDescriptor. Fornece informações sobre um evento.
PropertyDescriptor. Fornece informações sobre uma propriedade.
Seções relacionadas
Solução de problemas de criação de controle e de componente
Explica como corrigir problemas comuns.
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)
27/09/2021 • 7 minutes to read
Uma parte importante do Visual Basic é a capacidade de criar aplicativos Windows Forms que são executados
localmente nos computadores dos usuários. Você pode usar Visual Studio para criar o aplicativo e a interface do
usuário usando Windows Forms. Um Windows Forms é criado com base em classes do [Link]
namespace .
PA RA C O N SULT E
Criar um novo aplicativo Windows Forms com Visual Studio Tutorial 1: Criar um visualizador de imagens
PA RA C O N SULT E
Trabalhar com [Link] de dados Como: Classificar e filtrar dados [Link] com o
componente BindingSource do Windows Forms
Usar a janela Fontes de Dados Passo a passo: exibindo dados em um Windows Form
PA RA C O N SULT E
Implantar um aplicativo com ClickOnce Como publicar um Aplicativo ClickOnce usando o Assistente
de Publicação
Atualizar uma implantação ClickOnce implantação Como gerenciar atualizações para um aplicativo ClickOnce
aplicativo
Saiba mais sobre a segurança dos Windows Forms Visão geral da Segurança do Windows Forms
Confira também
WindowsFormsApplicationBase
Visão geral dos Windows Forms
Objeto [Link]
Personalizando projetos e estendendo My com o
Visual Basic
27/09/2021 • 2 minutes to read
Você pode personalizar modelos de projeto para fornecer My objetos adicionais. Isso facilita para outros
desenvolvedores a localização e o uso de seus objetos.
Nesta seção
Estendendo o Meu Namespace no Visual Basic
Descreve como adicionar membros e valores personalizados ao My namespace no Visual Basic.
Como empacotar e implantar extensões personalizadas de My
descreve como publicar extensões de My namespace personalizadas usando modelos de Visual Studio.
Estendendo o modelo de aplicativo do Visual Basic
Descreve como especificar suas próprias extensões para o modelo de aplicativo, substituindo os membros da
WindowsFormsApplicationBase classe.
Como personalizar quais objetos estão disponíveis em My
Descreve como controlar quais My objetos são habilitados definindo a _ constante de compilação
condicional com MyType do seu projeto.
Seções relacionadas
Desenvolvimento com My
Descreve quais My objetos estão disponíveis em diferentes tipos de projeto por padrão.
Visão geral do modelo de aplicativo do Visual Basic
descreve o modelo de Visual Basic para controlar o comportamento de aplicativos Windows Forms.
Como My depende do tipo de projeto
Descreve quais My objetos estão disponíveis em diferentes tipos de projeto por padrão.
Compilação condicional
Discute como o compilador usa a compilação condicional para selecionar seções específicas de código para
compilar e excluir outras seções.
ApplicationBase
Descreve o My objeto que fornece propriedades, métodos e eventos relacionados ao aplicativo atual.
Confira também
Desenvolvendo aplicativos com o Visual Basic
Estendendo o My namespace no Visual Basic
27/09/2021 • 9 minutes to read
o My namespace no Visual Basic expõe propriedades e métodos que permitem que você aproveite facilmente o
poder do .NET Framework. O My namespace simplifica problemas comuns de programação, o que geralmente
reduz uma tarefa difícil para uma única linha de código. Além disso, o My namespace é totalmente extensível
para que você possa personalizar o comportamento do My e adicionar novos serviços à sua hierarquia para
adaptar-se às necessidades específicas do aplicativo. Este tópico discute como personalizar Membros existentes
do My namespace e como adicionar suas próprias classes personalizadas ao My namespace.
[Link] = CustomPrincipal
Definir a CurrentPrincipal propriedade no [Link] objeto altera a identidade sob a qual o aplicativo é
executado. O [Link] objeto, por sua vez, retorna informações sobre o usuário especificado recentemente.
Namespace My
Return dnsAddressList
End Get
End Property
End Class
End Namespace
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Para adicionar membros ao My namespace, adicione propriedades conforme necessário ao módulo. Para cada
propriedade adicionada ao My namespace, adicione um campo particular do tipo
ThreadSafeObjectProvider(Of T) , em que o tipo é o tipo retornado por sua propriedade personalizada. Esse
campo é usado para criar instâncias de objeto thread-safe a serem retornadas pela propriedade chamando o
GetInstance método. Como resultado, cada thread que está acessando a propriedade estendida recebe sua
própria instância do tipo retornado. O exemplo a seguir adiciona uma propriedade chamada SampleExtension
que é do tipo SampleExtension ao My namespace:
Namespace My
<HideModuleName()>
Module MyCustomExtensions
Private _extension As New ThreadSafeObjectProvider(Of SampleExtension)
Friend ReadOnly Property SampleExtension() As SampleExtension
Get
Return _extension.GetInstance()
End Get
End Property
End Module
End Namespace
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Você pode adicionar manipuladores de eventos para seus My objetos personalizados adicionando
manipuladores de eventos personalizados à MyApplication classe. Os eventos personalizados permitem que
você adicione o código que será executado quando um manipulador de eventos for adicionado, removido ou o
evento for gerado. Observe que o AddHandler código de um evento personalizado será executado somente se o
código for adicionado por um usuário para manipular o evento. Por exemplo, considere que o SampleExtension
objeto da seção anterior tem um Load evento para o qual você deseja adicionar um manipulador de eventos
personalizado. O exemplo de código a seguir mostra um manipulador de eventos personalizado chamado
SampleExtensionLoad que será invocado quando o [Link] evento ocorrer. Quando o código é
adicionado para manipular o novo [Link] evento, a AddHandler parte desse código de evento
personalizado é executada. O MyApplication_SampleExtensionLoad método é incluído no exemplo de código para
mostrar um exemplo de um manipulador de eventos que manipula o [Link] evento. Observe
que o SampleExtensionLoad evento estará disponível quando você selecionar a opção meus eventos de
aplicativo na lista suspensa à esquerda acima do editor de código ao editar o arquivo ApplicationEvents. vb .
Namespace My
End Sub
End Class
End Namespace
Diretrizes de design
Ao desenvolver extensões para o My namespace, use as diretrizes a seguir para ajudar a minimizar os custos de
manutenção de seus componentes de extensão:
Inclua apenas a lógica de extensão. A lógica incluída na My extensão do namespace deve incluir apenas
o código necessário para expor a funcionalidade necessária no My namespace. Como sua extensão residirá
em projetos de usuário como código-fonte, a atualização do componente de extensão incorrerá em um custo
de manutenção alto e deverá ser evitada, se possível.
Minimize as suposições do projeto. Quando você cria suas extensões do My namespace, não assuma
um conjunto de referências, importações no nível do projeto ou configurações específicas do compilador
(por exemplo, Option Strict desativado). Em vez disso, minimize as dependências e qualifique totalmente
todas as referências de tipo usando a Global palavra-chave. Além disso, certifique-se de que a extensão seja
compilada com Option Strict on para minimizar erros na extensão.
Isole o código de extensão. colocar o código em um único arquivo torna sua extensão facilmente
implantável como um modelo de item Visual Studio. Para obter mais informações, consulte "empacotando e
implantando extensões", mais adiante neste tópico. Colocar todo o My código de extensão de namespace
em um único arquivo ou em uma pasta separada em um projeto também ajudará os usuários a localizar a
My extensão do namespace.
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)
28/09/2021 • 4 minutes to read
Visual Basic fornece uma maneira fácil de implantar suas My extensões de namespace personalizadas usando
modelos de Visual Studio. Se você estiver criando um modelo de projeto para o qual suas My extensões são
parte integrante do novo tipo de projeto, você pode apenas incluir o My código de extensão personalizado com
o projeto ao exportar o modelo. para obter mais informações sobre como exportar modelos de projeto,
consulte como: criar modelos de Project.
se sua My extensão personalizada estiver em um único arquivo de código, você poderá exportar o arquivo
como um modelo de item que os usuários podem adicionar a qualquer tipo de projeto de Visual Basic. em
seguida, você pode personalizar o modelo de item para habilitar recursos adicionais e comportamento para sua
My extensão personalizada em um projeto Visual Basic. Esses recursos incluem o seguinte:
permitir que os usuários gerenciem sua My extensão personalizada na página minhas extensões do
Visual Basic Project Designer.
Adicionar automaticamente sua My extensão personalizada quando uma referência a um assembly
especificado é adicionada a um projeto.
Ocultando o My modelo de item de extensão na caixa de diálogo Adicionar item para que ele não seja
incluído na lista de itens de projeto.
este tópico discute como empacotar uma extensão personalizada My como um modelo de item oculto que
pode ser gerenciado na página minhas extensões do Designer de Project de Visual Basic. A My extensão
personalizada também pode ser adicionada automaticamente quando uma referência a um assembly
especificado é adicionada a um projeto.
NOTE
Se a My extensão do namespace tiver uma dependência em um assembly específico, você poderá personalizar seu
modelo de item para instalar automaticamente a My extensão do namespace quando uma referência a esse assembly for
adicionada. como resultado, você desejará excluir essa referência de assembly ao exportar o arquivo de código como um
modelo de item de Visual Studio.
<VBMyExtensionTemplate
ID="[Link]"
Version="[Link]"
AssemblyFullName="[Link]"
/>
O arquivo CustomData contém um VBMyExtensionTemplate> elemento <que tem atributos, conforme listado na
tabela a seguir.
<CustomDataSignature>[Link]</CustomDataSignature>
Você não pode modificar os arquivos em uma pasta compactada (.zip arquivo) diretamente. Você deve copiar o
arquivo. vstemplate da pasta compactada, modificá-lo e, em seguida, substituir o arquivo. vstemplate na pasta
compactada por sua cópia atualizada.
O exemplo a seguir mostra o conteúdo de um arquivo. vstemplate que tem o <CustomDataSignature> elemento
adicionado.
Instalar o modelo
para instalar o modelo, você pode copiar a pasta compactada (.zip arquivo) para a pasta de modelos de item de
Visual Basic. por padrão, os modelos de item de 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 de 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
28/09/2021 • 5 minutes to read
Configurando o aplicativo
como parte do modelo de aplicativo Visual Basic, a WindowsFormsApplicationBase classe fornece propriedades
protegidas que configuram o aplicativo. Essas propriedades devem ser definidas no construtor da classe de
implementação.
em um projeto de Windows Forms padrão, o Designer de Project cria o código para definir as propriedades
com as configurações de Designer. As propriedades são usadas somente quando o aplicativo está sendo
iniciado; configurá-los depois que o aplicativo é iniciado não tem nenhum efeito.
C O N F IGURA Ç Ã O N O PA IN EL DE
A P L IC AT IVO DO DESIGN ER DE
P RO P RIEDA DE VERIF IC A P RO JEC T
EnableVisualStyles se o aplicativo usará estilos visuais que Caixa de seleção Habilitar estilos
correspondem ao Windows XP. visuais do XP
ShutdownStyle O que faz com que o aplicativo seja Lista de modo de desligamento
encerrado, como quando o formulário
de inicialização é 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)
27/09/2021 • 2 minutes to read
Este tópico descreve como você pode controlar quais objetos estão habilitados definindo a My _MYTYPE
constante de compilação condicional do projeto. O Visual Studio IDE (Ambiente de Desenvolvimento Integrado)
mantém a constante de compilação condicional para um projeto em sincronia com o _MYTYPE tipo do projeto.
/define:_MYTYPE=\"WindowsForms\"
Esta tabela mostra como a _MYTYPE constante de compilação condicional é definida como para vários tipos de
projeto.
T IP O DE P RO JETO _VA LO R DE M Y T Y P E
Web "Web"
Vazio "Vazio"
NOTE
Todas as comparações de cadeia de caracteres de compilação condicional são sensíveis a minúsculas, independentemente
de como a Option Compare instrução é definida.
_M YA P P L IC AT IO _M Y C O M P UT ERT _M Y W EB SERVIC E
_M Y T Y P E NT YPE YPE _M Y F O RM S _M Y USERT Y P E S
Por padrão, constantes de compilação condicional indefinidas são resolvidas como FALSE . Você pode
especificar valores para as constantes indefinidas ao compilar seu projeto para substituir o comportamento
padrão.
NOTE
Quando _MYTYPE é definido como "Personalizado", o projeto contém o My namespace , mas não contém objetos. No
entanto, _MYTYPE definir como "Vazio" impede que o compilador adicione o My namespace e seus objetos.
Esta tabela descreve os efeitos dos valores predefinidos das _MY constantes de compilação.
C O N STA N T E SIGN IF IC A DO
Confira também
ApplicationBase
Computer
Log
User
Como My depende do tipo de projeto
Compilação condicional
-definir (Visual Basic)
Objeto [Link]
Objeto [Link]
Objeto [Link]
Objeto [Link]
Conceitos de Programação (Visual Basic)
28/09/2021 • 2 minutes to read
Nesta seção
T ÍT ULO DESC RIÇ Ã O
Programação assíncrona com Async e Await (Visual Basic) Descreve como criar soluções assíncronas usando palavras-
chave Async e Await. Inclui um passo a passo.
Visão geral de atributos (Visual Basic) Discute como fornecer informações adicionais sobre como
programar elementos como tipos, campos, métodos e
propriedades por meio de atributos.
Informações do chamador (Visual Basic) Descreve como obter informações sobre o chamador de um
método. Essas informações incluem o caminho do arquivo e
o número de linha do código-fonte e o nome do membro
do chamador.
Coleções (Visual Basic) Descreve alguns dos tipos de coleções fornecidos pelo .NET
Framework. Demonstra como usar coleções simples e
coleções de pares chave/valor.
Covariância e contravariância (Visual Basic) Mostra como habilitar a conversão implícita de parâmetros
de tipo genérico em interfaces e delegados.
Árvores de expressão (Visual Basic) Explica como você pode usar árvores de expressão para
habilitar a modificação dinâmica de código executável.
Iteradores (Visual Basic) Descreve os iteradores, que são usados para percorrer
coleções e retornar elementos um por vez.
LINQ (consulta integrada à linguagem) (Visual Basic) Discute os recursos avançados de consulta na sintaxe de
linguagem do Visual Basic e o modelo para consultar bancos
de dados relacionais, documentos XML, conjuntos de dados
e coleções na memória.
Programação orientada a objeto (Visual Basic) Descreve os conceitos comuns orientados a objetos,
incluindo encapsulamento, herança e polimorfismo.
Reflexão (Visual Basic) Explica como 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ções relacionadas
A RT IGO DESC RIÇ Ã O
É possível evitar gargalos de desempenho e aprimorar a resposta geral do seu aplicativo usando a programação
assíncrona. No entanto, as técnicas tradicionais para escrever aplicativos assíncronos podem ser complicadas,
dificultando sua escrita, depuração e manutenção.
O Visual Studio 2012 apresenta uma abordagem simplificada, programação assíncrona, que aproveita o suporte
assíncrono no .NET Framework 4.5 e superior, bem como no Windows Runtime. O compilador faz o trabalho
difícil que o desenvolvedor costumava fazer, e seu aplicativo mantém a estrutura lógica que se assemelha ao
código síncrono. Como resultado, você obtém todas as vantagens da programação assíncrona com uma fração
do esforço.
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.
A assincronia é especialmente importante para aplicativos que acessam o thread de interface de usuário porque
todas as atividades relacionadas à interface do usuário normalmente compartilham um único thread. Se um
processo for bloqueado em um aplicativo síncrono, todos serão bloqueados. Seu aplicativo para de responder, o
que poderia levar você a concluir que ele falhou quando, na verdade, está apenas aguardando.
Quando você usa métodos assíncronos, o aplicativo continua a responder à interface do usuário. Você poderá
redimensionar ou minimizar uma janela, por exemplo, ou fechar o aplicativo se você não desejar aguardar sua
conclusão.
A abordagem baseada em assincronia adiciona o equivalente de uma transmissão automática à lista de opções
disponíveis para escolha ao criar operações assíncronas. Ou seja, você obtém todos os benefícios da
programação assíncrona tradicional, mas com muito menos esforço do desenvolvedor.
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 esperar na instrução única a seguir.
GetStringAsync retorna uma Task(Of TResult) em que TResult é uma cadeia de caracteres e atribui a
AccessTheWebAsync tarefa à variável . A tarefa representa o processo contínuo para a
getStringTask
chamada a GetStringAsync , com um compromisso de produzir um valor de cadeia de caracteres real
quando o trabalho estiver concluído.
4. Como o getStringTask ainda não foi esperado, AccessTheWebAsync pode continuar com outro trabalho
que não depende do resultado final de GetStringAsync . O trabalho é representado por uma chamada ao
método síncrono DoIndependentWork .
5. DoIndependentWork é um método síncrono que faz seu trabalho e retorna ao seu chamador.
6. AccessTheWebAsync está sem trabalho que ele possa executar sem um resultado de getStringTask . Em
seguida, AccessTheWebAsync deseja calcular e retornar o comprimento da cadeia de caracteres baixada,
mas o método não poderá calcular o valor enquanto o método tiver a cadeia de caracteres.
Portanto, AccessTheWebAsync usa um operador await para suspender seu andamento e para transferir o
controle para o método que chamou AccessTheWebAsync . AccessTheWebAsync retorna um
Task(Of Integer) ao chamador. A tarefa representa uma promessa de produzir um resultado inteiro que
é o comprimento da cadeia de caracteres baixada.
NOTE
Se GetStringAsync (e portanto getStringTask ) for concluído antes que AccessTheWebAsync o espere, o
controle permanecerá em AccessTheWebAsync . A despesa de suspender e então retornar para
AccessTheWebAsync seria desperdiçada caso o processo assíncrono chamado ( getStringTask ) já tivesse sido
concluído e AccessTheWebSync não tivesse que aguardar o resultado final.
Tópicos
Os métodos assíncronos destinam-se a ser operações não causadoras de bloqueios. Uma Await expressão 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 multi-threading porque um método assíncrono não é executado em seu 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 [Link] 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.
A abordagem baseada em async para a programação assíncrona é preferível às abordagens existentes em
quase todos os casos. Em particular, essa abordagem é melhor do que para operações vinculadas a E/S porque
o código é mais simples e você não precisa se proteger contra BackgroundWorker condições de corrida. Em
combinação com [Link], a programação async é melhor do que BackgroundWorker para operações
associadas à CPU porque a programação async separa os detalhes de coordenação da execução do seu código
do trabalho que [Link] transfere ao threadpool.
Async e Await
Se você especificar que um método é um método assíncrono usando um modificador Async, habilita os dois
recursos a seguir.
O método assíncrono marcado pode usar Await para designar pontos de suspensão. O operador await
informa ao compilador que o método assíncrono não poderá continuar além daquele ponto até que o
processo assíncrono aguardado seja concluído. Enquanto isso, o controle retorna para o chamador do
método assíncrono.
A suspensão de um método assíncrono em uma expressão não constitui uma saída do método e os
blocos Await Finally não são executados.
O método assíncrono marcado pode ele próprio ser aguardado por métodos que o chamam.
Um método assíncrono normalmente contém uma ou mais ocorrências de um operador, mas a ausência de
expressões não Await causa um erro do Await compilador. Se um método assíncrono não usar um operador
para marcar um ponto de suspensão, o método será executado como um método síncrono, apesar Await do
Async modificador. O compilador emite um aviso para esses métodos.
Async e Await são palavras-chave contextuais. Para obter mais informações e exemplos, consulte os seguintes
tópicos:
Async
Operador Await
' . . .
' The method has no return statement.
End Function
Cada tarefa retornada representa um trabalho em andamento. Uma tarefa encapsula informações sobre o
estado do processo assíncrono e, consequentemente, o resultado final do processo ou a exceção que o processo
apresenta quando não é bem-sucedido.
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.
Um método assíncrono que é um procedimento não pode ser aguardado e o chamador não pode capturar
exceções que o Sub método lança.
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.
As APIs assíncronas na programação do Windows Runtime têm um dos seguintes tipos de retorno, que são
semelhantes às tarefas:
IAsyncOperation(Of TResult), que corresponde a Task(Of TResult)
IAsyncAction, que corresponde a Task
IAsyncActionWithProgress(Of TProgress)
IAsyncOperationWithProgress(Of TResult, TProgress)
Para obter mais informações e um exemplo, consulte Chamar APIs assíncronas em C# ou Visual Basic.
Convenção de nomenu
Por convenção, deve-se acrescentar "Async" aos nomes dos métodos que têm um modificador Async .
É possível ignorar a convenção quando um evento, uma classe base ou um contrato de interface sugere um
nome diferente. Por exemplo, você não deve renomear manipuladores de eventos comuns, como
Button1_Click .
Instruções passo a passo: acessando a Mostra como converter uma solução Exemplo assíncrono: programação
Web usando Async e Await (Visual síncrona do WPF em uma solução assíncrona com Async e Await (Visual
Basic) assíncrona do WPF. O aplicativo baixa Basic)
uma série de sites.
Como fazer várias solicitações da Web Demonstra como iniciar várias tarefas Exemplo de assincronia: fazer várias
em paralelo usando Async e Await ao mesmo tempo. solicitações da Web paralelamente
(Visual Basic)
Ajustando seu aplicativo assíncrono Mostra como adicionar a seguinte Exemplo assíncrono: ajuste fino de seu
(Visual Basic) funcionalidade à sua solução aplicativo
assíncrona:
WhenAny: ponte entre o .NET Mostra como criar uma ponte entre Exemplo de assincronia: ponte entre o
Framework e o Windows Runtime tipos Task no .NET Framework e .NET e o Windows Runtime (AsTask e
IAsyncOperations no Windows WhenAny)
Runtime para que você possa usar
WhenAny com um método do
Windows Runtime.
Cancelamento assíncrono: ponte entre Mostra como criar uma ponte entre Exemplo de assincronia: ponte entre o
o .NET Framework e o Windows tipos Task no .NET Framework e .NET e o Windows Runtime (AsTask e
Runtime IAsyncOperations no Windows Cancellation)
Runtime para que você possa usar
CancellationTokenSource com um
método do Windows Runtime.
Exemplo completo
O código a seguir é o arquivo [Link] 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”.
Imports [Link]
' Example that demonstrates Asynchronous Progamming with Async and Await.
' It uses [Link] to download the contents of a website.
' Sample Output:
' Working . . . . . . .
'
' Length of the downloaded string: 39678.
Class MainWindow
' Mark the event handler with Async so you can use Await in it.
Private Async Sub StartButton_Click(sender As Object, e As RoutedEventArgs)
End Sub
' You can do other work here that doesn't rely on the string from GetStringAsync.
DoIndependentWork()
End Using
End Function
Sub DoIndependentWork()
[Link] &= $"Working . . . . . . .{vbCrLf}"
End Sub
End Class
Confira também
Operador Await
Async
Visão geral de atributos (Visual Basic)
28/09/2021 • 4 minutes to read
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 é incluído entre colchetes
angulares ( < > ). Ele deverá aparecer imediatamente antes do elemento ao qual ele é aplicado, na mesma linha.
Neste exemplo, o atributo SerializableAttribute é usado para aplicar uma característica específica a uma classe:
Imports [Link]
<[Link]("[Link]")>
Sub SampleMethod()
End Sub
Imports [Link]
Sub MethodA(<[In](), Out()> ByVal x As Double)
End Sub
Sub MethodB(<Out(), [In]()> ByVal x As Double)
End Sub
Alguns atributos podem ser especificados mais de uma vez para uma determinada entidade. Um exemplo de
um atributo multiuso é ConditionalAttribute:
<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub
NOTE
Por convenção, todos os nomes de atributo terminam com a palavra "Atributo" para distingui-los de outros itens no .NET
Framework. No entanto, você não precisa especificar o sufixo de atributo ao usar atributos no código. Por exemplo,
[DllImport] é equivalente a [DllImportAttribute] , mas DllImportAttribute é o nome do atributo real no .NET
Framework.
Parâmetros de atributo
Muitos atributos têm parâmetros, que podem ser nomeados, sem nome ou posicionais. Quaisquer parâmetros
posicionais devem ser especificados em uma determinada ordem e não podem ser omitidos. Os parâmetros
nomeados são opcionais e podem ser especificados em qualquer ordem. Os parâmetros posicionais são
especificados primeiro. Por exemplo, esses três atributos são equivalentes:
<DllImport("[Link]")>
<DllImport("[Link]", SetLastError:=False, ExactSpelling:=False)>
<DllImport("[Link]", ExactSpelling:=False, SetLastError:=False)>
O primeiro parâmetro, o nome da DLL, é posicional e sempre vir em primeiro lugar; os outros são nomeados.
Nesse caso, ambos os parâmetros nomeados são padronizados como false e, portanto, podem ser omitidos.
Consulte a documentação do atributo individual para obter informações sobre valores de parâmetro padrão.
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.
Para identificar explicitamente um atributo de destino, use a seguinte sintaxe:
<target : attribute-list>
VA LO R DE DEST IN O A P L IC A - SE A
Imports [Link]
<Assembly: AssemblyTitleAttribute("Production assembly 4"),
Module: CLSCompliant(True)>
Seções relacionadas
Para obter mais informações, consulte:
Criando atributos personalizados (Visual Basic)
Acessando atributos usando reflexão (Visual Basic)
Como criar uma união do C/C++ usando atributos (Visual Basic)
Atributos comuns (Visual Basic)
Informações do chamador (Visual Basic)
Confira também
Guia de programação do Visual Basic
Reflexão (Visual Basic)
Atributos
Informações do chamador (Visual Basic)
28/09/2021 • 3 minutes to read
Ao usar atributos de informações do chamador, você pode obter informações sobre o chamador de um método.
Você pode obter o caminho do arquivo do código-fonte, o número da linha no código-fonte e o nome do
membro do chamador. Essas informações são úteis para fins de rastreamento, depuração e criação de
ferramentas de diagnóstico.
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 [Link]:
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.
A S C H A M A DA S O C O RREM EM RESULTA DO DE N O M E DE M EM B RO
Operadores usuário ou conversões definidos pelo usuário O nome gerado para o membro, por exemplo, “op_Addition”.
Nenhum membro contentor (por exemplo, nível de assembly O valor padrão do parâmetro opcional.
ou atributos que são aplicadas aos tipos)
Confira também
Atributos (Visual Basic)
Atributos comuns (Visual Basic)
Parâmetros Opcionais
Conceitos de Programação (Visual Basic)
Coleções (Visual Basic)
27/09/2021 • 15 minutes to read
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
[Link]. 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.
NOTE
Para os exemplos neste tópico, inclua instruções Imports para [Link] os [Link]
namespaces e .
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.
O exemplo a seguir é igual ao exemplo anterior, exceto que um inicializador de coleção é usado para adicionar
elementos à coleção.
Você pode usar um Para... Próxima instrução em vez For Each de uma instrução para iterar por 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 .
O exemplo a seguir remove elementos de uma lista genérica. Em vez de For Each uma instrução, um For... A
próxima instrução que itera em ordem decrescente é usada. Isso é feito porque o método RemoveAt faz com
que os elementos após um elemento removido tenham um valor de índice menor.
Dim numbers As New List(Of Integer) From
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
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.
' Output:
' Tadpole 400
' Pinwheel 25
' Milky Way 0
' Andromeda 3
End Sub
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.
Algumas das classes de coleção comuns são descritas nesta seção:
Classes [Link]
Classes [Link]
Classes [Link]
Collection Visual Basic Classe
Classes [Link]
Você pode criar uma coleção genérica usando uma das classes no namespace [Link]. 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.
A tabela a seguir lista algumas das classes frequentemente usadas do namespace [Link]:
Para obter informações adicionais, consulte Tipos de coleção comumente usados, Selecionando uma classe de
coleção e [Link].
Classes [Link]
No .NET Framework 4 ou mais recente, as coleções no namespace [Link] fornecem
operações thread-safe eficientes para acessar itens da coleção de vários threads.
As classes no namespace [Link] deverão ser usadas em vez dos tipos correspondentes
nos namespaces [Link] e [Link] sempre que vários threads estiverem
acessando a coleção simultaneamente. Para obter mais informações, veja Coleções thread-safe e
[Link].
Algumas classes incluídas no namespace [Link] são BlockingCollection<T>,
ConcurrentDictionary<TKey,TValue>, ConcurrentQueue<T> e ConcurrentStack<T>.
Classes [Link]
As classes no namespace [Link] não armazenam elementos como objetos especificamente tipados,
mas como objetos do tipo Object .
Sempre que possível, você deve usar as coleções genéricas no namespace [Link] ou no
[Link] em vez dos tipos herdados no namespace [Link] .
A tabela a seguir lista algumas das classes frequentemente usadas no namespace [Link] :
C L A SSE DESC RIÇ Ã O
Return elements
End Function
[Link] = symbol
[Link] = name
[Link] = atomicNumber
[Link](Key:=[Link], value:=theElement)
End Sub
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.
O exemplo a seguir usa o método ContainsKey e a propriedade Item[] de Dictionary para localizar
rapidamente um item por chave. A Item propriedade permite que você acesse um item na coleção usando o
código em elements elements(symbol) Visual Basic.
Private Sub FindInDictionary(ByVal symbol As String)
Dim elements As Dictionary(Of String, Element) = BuildDictionary()
O exemplo a seguir usa o método TryGetValue para localizar rapidamente um item por chave.
' Output:
' Calcium 20
' Potassium 19
' Scandium 21
End Sub
' Output:
' blue 50 car4
' blue 30 car5
' blue 20 car1
' green 50 car7
' green 10 car3
' red 60 car6
' red 50 car2
End Sub
Return compare
End Function
End Class
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)
27/09/2021 • 3 minutes to read
No Visual Basic, a covariância e a contravariância habilitam a conversão de referência implícita para tipos de
matriz, tipos delegados e argumentos de tipo genérico. A covariância preserva a compatibilidade de atribuição,
e a contravariância reverte.
O código a seguir demonstra a diferença entre a compatibilidade da atribuição, a covariância e a
contravariância.
' Covariance.
Dim strings As IEnumerable(Of String) = New List(Of String)()
' An object that is instantiated with a more derived type argument
' is assigned to an object instantiated with a less derived type argument.
' Assignment compatibility is preserved.
Dim objects As IEnumerable(Of Object) = strings
' Contravariance.
' Assume that there is the following method in the class:
' Shared Sub SetObject(ByVal o As Object)
' End Sub
Dim actObject As Action(Of Object) = AddressOf SetObject
A covariância para matrizes permite a conversão implícita de uma matriz de um tipo mais derivado para uma
matriz de um tipo menos derivado. Mas essa operação não é fortemente tipada, conforme mostrado no
exemplo de código a seguir.
End Sub
Uma interface ou delegado genérico será chamado variante se seus parâmetros genéricos forem declarados
covariantes ou contravariantes. O Visual Basic permite que você crie suas próprias interfaces variantes e
delegados. Para obter mais informações, consulte Criando interfaces genéricas variantes (Visual Basic) e
Variação em delegados (Visual Basic).
Tópicos Relacionados
T ÍT ULO DESC RIÇ Ã O
Criando interfaces genéricas variantes (Visual Basic) Mostra como criar interfaces variantes personalizadas.
Usando variação em interfaces para coleções genéricas Mostra como o suporte de covariância e contravariância nas
(Visual Basic) interfaces IEnumerable<T> e IComparable<T> pode ajudar
na reutilização do código.
Usando variação em delegados (Visual Basic) Mostra como usar o suporte de covariância e
contravariância em delegados não genéricos para
corresponder às assinaturas de método com tipos
delegados.
Usando variação para delegados genéricos Func e Action Mostra como o suporte de covariância e contravariância nos
(Visual Basic) delegados Func e Action pode ajudar na reutilização do
código.
Árvores de expressão (Visual Basic)
27/09/2021 • 4 minutes to read
Árvores de expressão representam código em uma estrutura de dados de árvore, onde cada nó é, por exemplo,
uma expressão, uma chamada de método ou uma operação binária como x < y .
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).
Árvores de expressão também são usadas no runtime de linguagem dinâmica (DLR) para fornecer
interoperabilidade entre linguagens dinâmicas e o .NET Framework e permitir que gravadores compiladores
emitam árvores de expressão em vez de Microsoft intermediate language (MSIL). Para obter mais informações
sobre o DLR, consulte Visão geral do Dynamic Language Runtime.
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
[Link].
' Manually build the expression tree for the lambda expression num => num < 5.
Dim numParam As ParameterExpression = [Link](GetType(Integer), "num")
Dim five As ConstantExpression = [Link](5, GetType(Integer))
Dim numLessThanFive As BinaryExpression = [Link](numParam, five)
Dim lambda1 As Expression(Of Func(Of Integer, Boolean)) =
[Link](Of Func(Of Integer, Boolean))(
numLessThanFive,
New ParameterExpression() {numParam})
[Link](factorial)
' Prints 120.
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.
' Invoking the delegate and writing the result to the console.
[Link](result(4))
Para obter mais informações, consulte Como executar árvores de expressão (Visual Basic).
Confira também
[Link]
Como executar árvores de expressão (Visual Basic)
Como modificar árvores de expressão (Visual Basic)
Expressões lambda
Visão geral do tempo de execução de linguagem dinâmica
Conceitos de Programação (Visual Basic)
Iteradores (Visual Basic)
27/09/2021 • 10 minutes to read
Um iterador pode ser usado para percorrer coleções, como listas e matrizes.
Um método iterador ou um acessador get realiza uma iteração personalizada em uma coleção. Um método de
iterador usa a instrução Yield para retornar cada elemento um 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ê consome um iterador do código do cliente usando um For Each... Próxima instrução ou usando uma
consulta LINQ.
No exemplo a seguir, a primeira iteração do loop For Each faz 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.
Sub Main()
For Each number As Integer In SomeNumbers()
[Link](number & " ")
Next
' Output: 3 5 8
[Link]()
End Sub
O tipo de retorno de um método iterador ou acessador get pode ser IEnumerable, IEnumerable<T>,
IEnumerator ou IEnumerator<T>.
Você pode usar uma Exit Function Return instrução ou para encerrar a iteração.
Uma Visual Basic função de iterador ou declaração de acessador get inclui um modificador Iterador.
Os iteradores foram introduzidos no Visual Basic em Visual Studio 2012.
Neste tópico
Iterador simples
Criando uma classe de coleção
Experimentar blocos
Métodos anônimos
Usando iteradores com uma lista genérica
Informações de sintaxe
Implementação técnica
Uso de iteradores
NOTE
Para todos os exemplos no tópico, exceto o exemplo de Iterador Simples, inclua instruções Imports para os
[Link] [Link] namespaces e .
Iterador simples
O exemplo a seguir tem uma única Yield instrução que está dentro de um For... Próximo loop. 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 .
Sub Main()
For Each number As Integer In EvenSequence(5, 18)
[Link](number & " ")
Next
' Output: 6 8 10 12 14 16 18
[Link]()
End Sub
Public days =
New String() {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}
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 .
Sub Main()
Dim theZoo As New Zoo()
[Link]("Whale")
[Link]("Rhinoceros")
[Link]("Penguin")
[Link]("Warbler")
[Link]()
End Sub
Experimentar blocos
Visual Basic permite uma Yield instrução no Try bloco de um Try... Pegar... Instrução Finally. Um Try bloco
que tem uma Yield instrução pode ter Catch blocos e pode ter um bloco Finally .
O exemplo a seguir inclui Try blocos Catch , e em uma função Finally de iterador. O Finally bloco na
função de iterador é executado antes que a For Each iteração seja finalada.
Sub Main()
For Each number As Integer In Test()
[Link](number)
Next
[Link]("For Each is done.")
' Output:
' 3
' 4
' Something happened. Yields are done.
' Finally is called.
' For Each is done.
[Link]()
End Sub
Uma Yield instrução não pode estar dentro Catch de um bloco ou um Finally bloco.
Se o corpo (em vez do método iterador) lançar uma exceção, um bloco na função de iterador não será
executado, mas um bloco na função For Each Catch de Finally iterador será executado. Um Catch bloco
dentro de uma função de iterador captura apenas exceções que ocorrem dentro da função de iterador.
Métodos anônimos
No Visual Basic, uma função anônima pode ser uma função de iterador. O exemplo a seguir ilustra essa situação.
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.
Sub Main()
For Each number As Integer In GetSequence(5, 10)
[Link](number & " ")
Next
' Output: 5 6 7 8 9 10
[Link]()
End Sub
Se a validação estiver dentro da função de iterador, a validação não poderá ser executada até o início da
primeira iteração do For Each corpo.
Sub Main()
Dim theStack As New Stack(Of Integer)
[Link]()
End Sub
Yield GetEnumerator()
End Function
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, um método iterador não pode ter ByRef parâmetros.
No Visual Basic, "Yield" não é uma palavra reservada e tem significado especial somente quando é usado em
um método Iterator get ou acessador.
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 [Link] para exibir o código Microsoft
Intermediate Language que é gerado para um método iterador.
Ao criar um iterador para uma classe ou struct, você não precisa implementar a IEnumerator interface inteira.
Quando o compilador detecta o iterador, ele gera automaticamente os métodos Current , MoveNext e Dispose
da interface IEnumerator ou IEnumerator<T>.
A cada iteração sucessiva do loop For Each…Next (ou a chamada direta ao [Link] ), o próximo
corpo de código do iterador continua, depois da instrução Yield anterior. Em seguida, ele continua para a
próxima instrução até que o final do corpo do iterador seja atingido ou até que Yield uma Exit Function
instrução ou Return seja encontrada.
Iteradores não são suportados pelo [Link] método . Para iterar novamente desde o início, você deve
obter um novo iterador.
Para obter informações adicionais, consulte a Visual Basic de linguagem .
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:
Modificar a sequência de lista após a primeira iteração de loop For Each .
Evitar o carregamento completo de uma grande lista antes da primeira iteração de um loop For Each .
Um exemplo é uma busca paginada para carregar um lote de linhas da tabela. Outro exemplo é o método
EnumerateFiles, que implementa os iteradores dentro do .NET Framework.
Encapsular a criação da lista no iterador. No método iterador, você pode criar a lista e, em seguida, gerar
cada resultado em um loop.
Confira também
[Link]
IEnumerable<T>
Instrução For Each...Next
Instrução Yield
Iterador
LINQ (consulta integrada à linguagem) (Visual
Basic)
28/09/2021 • 2 minutes to read
O LINQ é um conjunto de recursos que estende os recursos avançados de consulta à sintaxe das linguagens do
Visual Basic. O LINQ apresenta padrões com aprendizado facilitado para consultar e atualizar dados, e a
tecnologia pode ser estendida para dar suporte a, potencialmente, qualquer tipo de armazenamento de dados.
O NET Framework inclui assemblies de provedor LINQ que permitem o uso do LINQ com coleções do .NET
Framework, bancos de dados do SQL Server, conjuntos de dados [Link] e documentos XML.
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.
Introdução a LINQ no Visual Basic
Descreve os fatos básicos que você deve saber para entender a documentação do Visual Basic e exemplos.
Suporte do Visual Studio IDE e ferramentas para LINQ (Visual Basic)
Descreve o Object Relational Designer do Visual Studio, suporte do depurador para consultas e outros recursos
do IDE relacionados ao LINQ.
Visão geral de operadores de consulta padrão (Visual Basic)
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.
LINQ to Objects (Visual Basic)
Inclui links para tópicos que explicam como usar o LINQ to Objects para acessar estruturas de dados na
memória.
LINQ to XML (Visual Basic)
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.
LINQ to [Link] (página do portal)
Fornece um ponto de entrada para a documentação sobre LINQ to DataSet, LINQ to SQL e LINQ to Entities. O
LINQ to DataSet permite que você crie recursos mais sofisticados de consulta no DataSet usando a mesma
funcionalidade de consultas que está disponível para outras fontes de dados. O LINQ to SQL fornece uma
infraestrutura em tempo de execução para gerenciar dados relacionais como objetos. O LINQ to Entities permite
que os desenvolvedores escrevam consultas no modelo conceitual de Entity Framework usando C #.
Habilitando uma fonte de dados para consulta LINQ
Fornece uma introdução aos provedores LINQ personalizados, a árvores de expressões de LINQ e a outras
formas de estender o LINQ.
Programação orientada a objeto (Visual Basic)
27/09/2021 • 10 minutes to read
Visual Basic dá suporte completo para programação orientada a objeto, incluindo encapsulamento, herança e
polimorfismo.
Encapsulamento significa que um grupo de propriedades, métodos e outros membros relacionados é tratado
como uma única unidade ou objeto.
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.
Esta seção descreve os seguintes conceitos:
Classes e objetos
Membros de classe
Propriedades e campos
Métodos
Construtores
Destruidores
Eventos
Classes aninhadas
Modificadores de acesso e níveis de acesso
Instando 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.
Para definir uma classe:
Class SampleClass
End Class
Visual Basic também fornece uma versão leve de classes chamadas estruturas que são úteis quando você
precisa criar uma grande matriz de objetos e não deseja consumir muita memória para isso.
Para definir uma estrutura:
Structure SampleStructure
End Structure
Class SampleClass
Public SampleField As String
End Class
As propriedades têm procedimentos de obter e definir, que oferecem mais controle sobre como os valores são
definidos ou retornados.
Visual Basic permite que você crie um campo privado para armazenar o valor da propriedade ou use as
chamadas propriedades auto-implementadas que criam esse campo automaticamente nos bastidores e
fornecem a lógica básica para os procedimentos de propriedade.
Para definir uma propriedade autoimplementada:
Class SampleClass
Public Property SampleProperty as String
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:
Class SampleClass
Private m_Sample As String
Public Property Sample() As String
Get
' Return the value stored in the field.
Return m_Sample
End Get
Set(ByVal Value As String)
' Store the value in the field.
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 as ReadOnly WriteOnly palavras-chave e . No entanto,
propriedades autoimplementadas não podem ser somente leitura ou somente gravação.
Para obter mais informações, consulte:
Instrução Property
Instrução Get
Instrução Set
ReadOnly (somente-leitura)
WriteOnly
Métodos
Um método é uma ação que um objeto pode executar.
NOTE
No Visual Basic, há duas maneiras de criar um método: a instrução será usada se o método não retornar um valor; a
instrução será usada se um método retornar Sub Function um valor.
Class SampleClass
Public Function SampleFunc(ByVal SampleParam As String)
' Add code here
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.
Para sobrecarregar um método:
Na maioria dos casos, você declara um método dentro de uma definição de classe. No entanto, Visual Basic
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.
Para definir um construtor para uma classe:
Class SampleClass
Sub New(ByVal s As String)
// Add code here.
End Sub
End Class
Para obter mais informações, consulte: 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.
Para obter mais informações sobre os destruidores e a coleta de lixo no .NET Framework, consulte Coleta de
lixo.
Eventos
Eventos permitem que uma classe ou objeto notifique outras classes ou objetos quando algo interessante
ocorrer. A classe que envia (ou gera) o evento é chamada de publicador e as classes que recebem (ou lidam) o
evento são chamadas de assinantes. Para obter mais informações sobre os eventos e como eles são gerados e
manipulados, consulte Eventos.
Para declarar eventos, use a Instrução event.
Para auar eventos, use a Instrução RaiseEvent.
Para especificar manipuladores de eventos usando uma maneira declarativa, use a instrução WithEvents
e a cláusula Handles.
Para poder adicionar, remover e alterar dinamicamente o manipulador de eventos associado a um
evento, use a instrução AddHandler e a instrução RemoveHandler junto com o operador AddressOf.
Classes aninhadas
Uma classe definida dentro de outra classe é chamada de aninhada. Por padrão, a classe aninhada é particular.
Class Container
Class Nested
' Add code here.
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:
Protected Friend O tipo ou membro pode ser acessado por qualquer código
no mesmo assembly ou por qualquer classe derivada em
outro assembly.
Após instanciar uma classe, você pode atribuir valores às propriedades e campos da instância e invocar
métodos da classe.
Para atribuir valores a propriedades durante o processo de instanciação de classe, use os inicializadores de
objeto:
Class SampleClass
Public Shared SampleString As String = "Sample String"
End Class
Para acessar o membro compartilhado, use o nome da classe sem criar um objeto desta classe:
MsgBox([Link])
os módulos compartilhados no Visual Basic têm somente membros compartilhados e não podem ser
instanciados. Membros compartilhados também não podem acessar propriedades, campos ou métodos não
compartilhados
Para obter mais informações, consulte:
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.
Para criar uma instância de um tipo anônimo:
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 Visual Basic herdam implicitamente da
Object classe que dá suporte à hierarquia de classes .net e fornecem serviços de nível baixo a todas as classes.
NOTE
Visual Basic não dá suporte a várias heranças. Ou seja, você pode especificar apenas uma classe base para uma classe
derivada.
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:
Para especificar que uma classe pode ser usada apenas como classe base e não pode ser instanciada:
MustInherit Class BaseClass
End Class
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.
Para definir uma interface:
Class SampleClass
Implements ISampleInterface
Sub DoSomething
' Method implementation.
End Sub
End Class
Para obter mais informações, consulte:
Interfaces
Instrução Interface
Instrução Implements
Genéricos
Classes, estruturas, interfaces e métodos no .NET podem incluir parâmetros de tipo que definem tipos de
objetos que eles 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.
Para definir uma classe genérica:
Class SampleGeneric(Of T)
Public Field As T
End Class
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.
NOTE
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.
Para criar uma referência a um método que corresponde à assinatura especificada pelo delegado:
Class SampleClass
' Method that matches the SampleDelegate signature.
Sub SampleSub(ByVal str As String)
' Add code here.
End Sub
' Method that instantiates the delegate.
Sub SampleDelegateSub()
Dim sd As SampleDelegate = AddressOf SampleSub
sd("Sample string")
End Sub
End Class
Confira também
Guia de programação do Visual Basic
Reflexão (Visual Basic)
27/09/2021 • 2 minutes to read
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:
A saída é:
System.Int32
O exemplo a seguir usa a reflexão para obter o nome completo do assembly carregado.
A saída é:
mscorlib, Version=[Link], Culture=neutral, PublicKeyToken=b77a5c561934e089
Seções relacionadas
Para mais informações:
Reflexão
Exibindo informações de tipo
Reflexão e tipos genéricos
[Link]
Recuperando informações armazenadas em atributos
Confira também
Guia de programação do Visual Basic
Assemblies no .NET
Serialização (Visual Basic)
27/09/2021 • 4 minutes to read
A serialização é o processo de converter um objeto em um fluxo de bytes para armazenar o objeto ou transmiti-
los na memória, um banco de dados ou um arquivo. Sua finalidade principal é salvar o estado de um objeto
para recriá-lo quando necessário. O processo inverso é chamado desserialização.
O objeto é serializado em um fluxo, que transporta não apenas os dados, mas informações sobre o tipo de
objeto, como sua versão, cultura e nome do assembly. Desse fluxo, ele pode ser armazenado em um banco de
dados, um arquivo ou uma memória.
Usos para serialização
A serialização permite que o desenvolvedor salve o estado de um objeto e recrie conforme necessário,
fornecendo o armazenamento dos objetos, bem como a troca de dados. Pela serialização, um desenvolvedor
pode executar ações como enviar o objeto para um aplicativo remoto por meio de um serviço Web, passando
um objeto de um domínio para outro, passando um objeto por um firewall como uma cadeia de caracteres XML
ou mantendo a segurança ou as informações específicas de usuários entre aplicativos.
Tornando um objeto serializável
Para serializar um objeto, é necessário que ele esteja serializado, um fluxo contenha o objeto serializado e um
Formatter. O [Link] contém as classes necessárias para serializar e desserializar objetos.
Aplique o atributo SerializableAttribute a um tipo para indicar que as instâncias desse tipo podem ser
serializadas. Uma exceção de SerializationException será gerada se você tentar serializar, mas o tipo não tiver o
atributo SerializableAttribute.
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 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.
Esta seção apresenta a estrutura Visual Basic do programa de Visual Basic, fornece um programa de Visual Basic
simples, "Olá, Mundo" e discute Visual Basic de código. As convenções de código são sugestões que se
concentram não na lógica de um programa, mas em sua estrutura física e aparência. Segui-los facilita a leitura, a
compreensão e a manutenção do código. As convenções de código podem incluir, entre outros:
Formatos padronizados para rotular e comentar código.
Diretrizes para espaçamento, formatação e recuo de código.
Convenções de nomen por objetos, variáveis e procedimentos.
Os tópicos a seguir apresentam um conjunto de diretrizes de programação para Visual Basic programas,
juntamente com exemplos de bom uso.
Nesta seção
Estrutura de um programa Visual Basic
Fornece uma visão geral dos elementos que comem um Visual Basic programa.
Procedimento principal no Visual Basic
Discute o procedimento que serve como o ponto de partida e o controle geral para seu aplicativo.
Referências e a instrução Imports
Discute como referenciar objetos em outros assemblies.
Namespaces no Visual Basic
Descreve como os namespaces organizam objetos em assemblies.
Convenções de nomenclatura do Visual Basic
Inclui diretrizes gerais para procedimentos de nomeação, constantes, variáveis, argumentos e objetos.
Convenções de codificação do Visual Basic
Revisa as diretrizes usadas no desenvolvimento dos exemplos nesta documentação.
Compilação condicional
Descreve como compilar blocos específicos de código seletivamente ao direcionar o compilador para ignorar
outras pessoas.
Como: Quebrar e combinar instruções no código
Mostra como dividir instruções longas em várias linhas e combinar instruções curtas em uma linha.
Como: Recolher e ocultar seções do código
Mostra como ressuar e ocultar seções de código no editor Visual Basic código.
Como: Rotular instruções
Mostra como marcar uma linha de código para identificá-la para uso com instruções como On Error Goto .
Caracteres especiais no código
Mostra como e onde usar caracteres não numéricos e não alfabéticos.
Comentários no código
Discute como adicionar comentários descritivos ao seu código.
Palavras-chave como nomes de elemento no código
Descreve como usar colchetes ( ) para delimitar nomes de variáveis que também são [] Visual Basic palavras-
chave.
Me, My, MyBase e MyClass
Descreve várias maneiras de se referir aos elementos de um Visual Basic programa.
Limitações do Visual Basic
Discute a remoção de limites de codificação conhecidos em Visual Basic.
Seções relacionadas
Convenções tipográficas e de código
Fornece convenções de codificação padrão para Visual Basic.
Escrevendo código
Descreve os recursos que facilitam a gravação e o gerenciamento do código.
Estrutura de um programa Visual Basic
27/09/2021 • 3 minutes to read
um programa de Visual Basic é criado A partir dos blocos de construção padrão. Uma solução consiste em um
ou mais projetos. Um projeto , por sua vez, pode conter um ou mais assemblies. Cada assembly é compilado de
um ou mais arquivos de origem. Um arquivo de origem fornece a definição e a implementação de classes,
estruturas, módulos e interfaces, que, por fim, contêm todo o seu código.
para obter mais informações sobre esses blocos de construção de um programa de Visual Basic, consulte
soluções e projetos e Assemblies no .net.
Instruções Imports
Você pode incluir uma instrução Imports (namespace e tipo do .net) para importar nomes definidos fora do seu
projeto. Uma Imports instrução permite que seu código faça referência a classes e a outros tipos definidos no
namespace importado, sem precisar qualificá-los. Você pode usar tantas Imports instruções quantas forem
apropriadas. Para obter mais informações, consulte References e a instrução Imports.
Instruções de namespace
Os 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ções de compilação condicional
As instruções de compilação condicional podem aparecer quase em qualquer lugar no arquivo de origem. Elas
fazem com que partes do seu código sejam incluídas ou excluídas no tempo de compilação, dependendo de
determinadas condições. Você também pode usá-los para depurar seu aplicativo, pois o código condicional é
executado somente no modo de depuração. Para obter mais informações, consulte compilação condicional.
Elementos de programação de Namespace-Level
Classes, estruturas e módulos contêm todo o código em seu arquivo de origem. Eles são elementos de nível de
namespace , que podem aparecer em um namespace ou no nível do arquivo de origem. Eles mantêm as
declarações de todos os outros elementos de programação. Interfaces, que definem as assinaturas de elemento,
mas não fornecem nenhuma implementação, também aparecem no nível de módulo. Para obter mais
informações sobre os elementos de nível de módulo, consulte o seguinte:
Instrução Class
Instrução Structure
Instrução Module
Instrução Interface
Os elementos de dados no nível de namespace são enumerações e delegados.
O procedimento principal
O Main procedimento é o primeiro código a ser executado quando seu aplicativo tiver sido carregado. Main
serve como o ponto de partida e o controle geral para seu aplicativo. Há quatro variedades de Main :
Sub Main()
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
28/09/2021 • 3 minutes to read
cada aplicativo de Visual Basic deve conter um procedimento chamado Main . Esse procedimento serve como o
ponto de partida e o controle geral para seu aplicativo. o .NET Framework chama o Main procedimento quando
ele carregou seu aplicativo e está pronto para passar o controle para ele. a menos que você esteja criando um
aplicativo Windows Forms, você deve escrever o Main procedimento para aplicativos que são executados por
conta própria.
Main contém o código que é executado primeiro. No Main , você pode determinar qual formulário deve ser
carregado primeiro quando o programa for iniciado, descobrir se uma cópia do seu aplicativo já está em
execução no sistema, estabelecer um conjunto de variáveis para seu aplicativo ou abrir um banco de dados que
o aplicativo requer.
NOTE
Se você declarar Main em uma classe, deverá usar a Shared palavra-chave. Em um módulo, Main não precisa ser
Shared .
A maneira mais simples é declarar um Sub procedimento que não use argumentos nem retornar um
valor.
Module mainModule
Sub Main()
MsgBox("The Main procedure is starting the application.")
' Insert call to appropriate starting place in your code.
MsgBox("The application is terminating.")
End Sub
End Module
Main também pode retornar um Integer valor, que o sistema operacional usa como o código de saída
para seu programa. outros programas podem testar esse código examinando o valor de Windows
ERRORLEVEL. Para retornar um código de saída, você deve declarar Main como um Function
procedimento em vez de um Sub procedimento.
Module mainModule
Function Main() As Integer
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' Insert call to appropriate starting place in your code.
' On return, assign appropriate value to returnValue.
' 0 usually means successful completion.
MsgBox("The application is terminating with error level " &
CStr(returnValue) & ".")
Return returnValue
End Function
End Module
Main também pode pegar uma String matriz como um argumento. Cada cadeia de caracteres na
matriz contém um dos argumentos de linha de comando usados para invocar seu programa. Você pode
executar ações diferentes dependendo de seus valores.
Module mainModule
Function Main(ByVal cmdArgs() As String) As Integer
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' See if there are any arguments.
If [Link] > 0 Then
For argNum As Integer = 0 To UBound(cmdArgs, 1)
' Insert code to examine cmdArgs(argNum) and take
' appropriate action based on its value.
Next
End If
' Insert call to appropriate starting place in your code.
' On return, assign appropriate value to returnValue.
' 0 usually means successful completion.
MsgBox("The application is terminating with error level " &
CStr(returnValue) & ".")
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.
Module mainModule
Sub Main(ByVal cmdArgs() As String)
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' See if there are any arguments.
If [Link] > 0 Then
For argNum As Integer = 0 To UBound(cmdArgs, 1)
' Insert code to examine cmdArgs(argNum) and take
' appropriate action based on its value.
Next
End If
' Insert call to appropriate starting place in your code.
MsgBox("The application is terminating.")
End Sub
End Module
Confira também
MsgBox
Length
UBound
Estrutura de um programa Visual Basic
-principal
Compartilhado
Instrução Sub
Instrução Function
Tipo de dados Integer
Tipo de dados String
Referências e a instrução Imports (Visual Basic)
27/09/2021 • 2 minutes to read
Você pode disponibilizar objetos externos para seu projeto escolhendo o comando Adicionar Referência no
menu Project. 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 a um módulo que controla a visibilidade dos Imports namespaces desse
assembly dentro do módulo. A instrução fornece um contexto de scoping que permite usar apenas a parte do
Imports namespace necessária para fornecer uma referência exclusiva.
Aliasname refere-se a um nome curto que você pode usar no código para se referir a um namespace
importado. Namespace é um namespace disponível por meio de uma referência de projeto, por meio de uma
definição dentro do projeto ou por meio de uma Imports instrução anterior.
Um módulo pode conter qualquer número de Imports instruções. Eles devem aparecer após quaisquer Option
instruções, se presentes, mas antes de qualquer outro código.
NOTE
Não confunda referências de projeto com a Imports instrução ou a Declare instrução . Project referências
disponibilizam objetos externos, como objetos em assemblies, para Visual Basic projetos. A Imports instrução é usada
para simplificar o acesso a referências de projeto, mas não fornece acesso a esses objetos. A Declare instrução é usada
para declarar uma referência a um procedimento externo em uma DLL (biblioteca de vínculo dinâmico).
Imports As instruções sempre devem ser as primeiras linhas imediatamente após as Option instruções em um
módulo. O fragmento de código a seguir mostra como importar e atribuir um alias ao
[Link] módulo:
Se uma instrução não incluir um nome de alias, os elementos definidos dentro do namespace importado
poderão Imports ser usados no módulo sem qualificação. Se o nome do alias for especificado, ele deverá ser
usado como um qualificador para nomes contidos nesse namespace.
Confira também
ControlChars
[Link]
Namespaces no Visual Basic
Assemblies no .NET
Instrução Imports (tipo e namespace .NET)
Namespaces no Visual Basic
27/09/2021 • 6 minutes to read
A ilustração a seguir mostra duas hierarquias de namespace, ambas contendo um objeto chamado ListBox :
Por padrão, cada arquivo executável criado com Visual Basic contém um namespace com o mesmo nome do
projeto. Por exemplo, se você definir um objeto dentro de um projeto chamado , o ListBoxProject arquivo
executável [Link] conterá um namespace chamado ListBoxProject .
Vários assemblies podem usar o mesmo namespace. Visual Basic os trata como um único conjunto de nomes.
Por exemplo, você pode definir classes para um namespace chamado em um assembly chamado e definir
classes adicionais para o mesmo namespace de SomeNameSpace Assemb1 um assembly chamado Assemb2 .
Nomes totalmente qualificados impedem conflitos de nomeação porque possibilitam que o compilador
determine qual objeto está sendo usado. No entanto, os próprios nomes podem ficar longos e complicados.
Para fazer isso, você pode usar a instrução para definir um alias – um nome abreviado que pode ser usado no
lugar de Imports um nome totalmente qualificado. Por exemplo, o exemplo de código a seguir cria aliases para
dois nomes totalmente qualificados e usa esses aliases para definir dois objetos.
Se você usar a instrução sem um alias, poderá usar todos os nomes nesse namespace sem qualificação, desde
que sejam exclusivos Imports do projeto. Se o projeto contiver instruções para namespaces que contêm itens
com o mesmo nome, você deverá qualificar totalmente esse nome Imports ao usá-lo. Suponha, por exemplo,
que seu projeto continha as duas instruções a Imports seguir:
Se você tentar usar Class1 sem qualificá-lo totalmente, Visual Basic produzirá um erro informando que o nome
é Class1 ambíguo.
Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As System.Int32
Dim n As System.Int32
Return n
End Function
End Class
End Namespace
End Namespace
Como resultado, o Visual Basic compilador não pode resolver com êxito a referência a , porque System.Int32
[Link] 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 .NET Framework classe. Isso permite que você especifique o
System namespace ou qualquer outro namespace na biblioteca de classes. O exemplo a seguir ilustra essa
situação.
Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As [Link].Int32
Dim n As [Link].Int32
Return n
End Function
End Class
End Namespace
End Namespace
Você pode usar para acessar outros namespaces de nível raiz, como e qualquer Global [Link]
namespace associado ao seu projeto.
Namespace [Link]
End Namespace
Namespace Global
Namespace Magnetosphere
End Namespace
End Namespace
Em uma declaração de namespace, Global não pode ser aninhado em outro namespace.
Você pode usar a Página do Aplicativo, Project Designer (Visual Basic) para exibir e modificar o Namespace
raiz do projeto. Para novos projetos, o Namespace Raiz assume como padrão o nome do projeto. Para fazer
com que seja o namespace de nível superior, você pode limpar a entrada Global namespace raiz para que a
caixa seja vazia. A limpeza do namespace raiz remove a necessidade da Global palavra-chave em
declarações de namespace.
Se uma instrução declarar um nome que também seja um namespace no .NET Framework, o namespace .NET
Framework ficará indisponível se a palavra-chave não for usada em um nome totalmente Namespace Global
qualificado. Para habilitar o acesso .NET Framework namespace sem usar a palavra-chave , você pode incluir a
Global Global palavra-chave na Namespace instrução .
O exemplo a seguir tem a Global palavra-chave na declaração [Link] de namespace.
Se a Global palavra-chave não estava presente na declaração de namespace, StringBuilder não foi possível
acessar sem especificar [Link] . Para um projeto chamado , as referências a
acessariam se a ConsoleApplication1 [Link] [Link] Global palavra-chave não
fosse usada.
Module Module1
Sub Main()
Dim encoding As New [Link]
Namespace [Link]
Class TitanEncoding
End Class
End Namespace
Confira também
ListBox
[Link]
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
27/09/2021 • 2 minutes to read
Quando você nomeia um elemento em seu Visual Basic, o primeiro caractere desse nome deve ser um caractere
alfabético ou um sublinhado. Observe, no entanto, que os nomes que começam com um sublinhado não estão
em conformidade com o CLS (Language Independent e Language-Independent Components).
As sugestões a seguir se aplicam ao nome.
Comece 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 de substantivo,
como ou com um adjetivo que descreve o comportamento da IComponent interface, como IPersistable
. Não use o sublinhado e use abreviações com moderação, pois abreviações podem causar confusão.
Inicie nomes de manipulador de eventos com um substantivo que descreve o tipo de evento seguido
pelo EventHandler sufixo " " , como em MouseEventHandler " ".
Em nomes de classes de argumento de evento, inclua o EventArgs sufixo " ".
Se um evento tiver um conceito de "antes" ou "depois", use um sufixo no tempo presente ou no passado,
como em " ControlAdd " ou ControlAdded " ".
Para termos longos ou usados com frequência, use abreviações para manter os comprimentos de nome
razoáveis, por exemplo, "HTML", em vez de "linguagem HTML". Em geral, nomes de variáveis maiores
que 32 caracteres são difíceis de ler em um monitor definido como uma resolução baixa. Além disso,
certifique-se de que suas abreviações sejam consistentes em todo o aplicativo. Alternar aleatoriamente
em um projeto entre "HTML" e "linguagem HTML" pode levar a confusão.
Evite usar nomes em um escopo interno que sejam iguais aos nomes em um escopo externo. Erros
poderão resultar se a variável errada for acessada. Se ocorrer um conflito entre uma variável e a palavra-
chave de mesmo nome, você deverá identificar a palavra-chave precedendo-a com a biblioteca de tipos
apropriada. Por exemplo, se você tiver uma variável chamada , poderá usar a Date função Date
intrínseca apenas chamando [Link] .
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
27/09/2021 • 6 minutes to read
A Microsoft desenvolve exemplos e documentação que seguem as diretrizes neste tópico. Se você seguir as
mesmas convenções de codificação, poderá obter os seguintes benefícios:
Seu código terá uma aparência consistente, para que os leitores possam se concentrar melhor no
conteúdo, não no layout.
Os leitores entendem seu código mais rapidamente porque podem fazer suposições com base na
experiência anterior.
Você pode copiar, alterar e manter o código com mais facilidade.
Você ajuda a garantir que seu código demonstre "práticas recomendadas" para Visual Basic.
Convenções de nomenclatura
Para obter informações sobre diretrizes de nomen entre as diretrizes, consulte o tópico Diretrizes de
nomenu.
Não use "My" ou "my" como parte de um nome de variável. Essa prática cria confusão com os My
objetos .
Você não precisa alterar os nomes dos objetos no código gerado automaticamente para fazer com que
eles se ajustem às diretrizes.
Convenções de Layout
Insira guias como espaços e use recuo inteligente com recuos de quatro espaços.
Use a listagem Pretty (reformatação) do código para reformatar seu código no editor de códigos.
Para obter mais informações, consulte Opções, Editor de Texto, Básico (Visual Basic).
Use apenas uma instrução por linha. Não use o caractere separador Visual Basic linha (:).
Evite usar o caractere de continuação de linha explícito "_" em favor da continuação de linha implícita
sempre que o idioma permitir.
Use apenas uma declaração por linha.
Se a listagem de pretty (reformatação) do código não formatar linhas de continuação
automaticamente, as linhas de continuação de recuo manualmente uma parada de tabulação. No entanto,
sempre alinhe os itens à esquerda em uma lista.
a As Integer,
b As Integer
Adicione pelo menos uma linha em branco entre definições de método e propriedade.
Comentando Convenções
Coloque comentários em uma linha separada em vez de no final de uma linha de código.
Inicie o texto do comentário com uma letra maiúscula e termine o texto do comentário com um ponto
final.
Insira um espaço entre o nome do comentário (') e o texto do comentário.
Estrutura do programa
Ao usar o método , use o constructo padrão para novos aplicativos Main de console e use para My
argumentos de linha de comando.
Sub Main()
For Each argument As String In [Link]
' Add code here to use the string variable.
Next
End Sub
Diretrizes de Linguagem
Tipo de dados da cadeia de caracteres
Use a interpolação de cadeia de caracteres para concatenar cadeias de caracteres curtas, como é
mostrado no código a seguir.
MsgBox($"hello{vbCrLf}goodbye")
Coloque o designador de matriz no tipo, não na variável . Por exemplo, use a seguinte sintaxe:
Use a sintaxe { } ao declarar e inicializar matrizes de tipos de dados básicos. Por exemplo, use a seguinte
sintaxe:
With orderLog
.Log = "Application"
.Source = "Application Name"
.MachineName = "Computer Name"
End With
Tratamento de Evento
Use Handles em vez de AddHandler :
Não verifique se um evento é Nothing (nulo) antes de chamar o RaiseEvent método . RaiseEvent
verifica antes Nothing que ele aumente o evento.
Usando membros compartilhados
Chame Shared membros usando o nome da classe, não de uma variável de instância.
Usar literais XML
Literais XML simplificam as tarefas mais comuns que você encontra ao trabalhar com XML (por exemplo,
carregar, consultar e transformar). Ao desenvolver com XML, siga estas diretrizes:
Use literais XML para criar documentos XML e fragmentos em vez de chamar APIs XML diretamente.
Importe namespaces XML no nível de arquivo ou projeto para aproveitar as otimizações de desempenho
para literais XML.
Use as propriedades do eixo XML para acessar elementos e atributos em um documento XML.
Use expressões inseridas para incluir valores e para criar XML de valores existentes em vez de usar
chamadas à API, como o Add método :
Private Function GetHtmlDocument(
ByVal items As IEnumerable(Of XElement)) As String
Return [Link]()
End Function
Consultas LINQ
Use nomes significativos para variáveis de consulta:
Forneça nomes para elementos em uma consulta para garantir que os nomes de propriedade de tipos
anônimos sejam corretamente capitalizados usando o uso de maiúsculas e depois maiúsculas:
Renomeie propriedades quando os nomes de propriedades no resultado forem ambíguos. Por exemplo,
se a consulta retornar um nome de cliente e uma ID de pedido, renomeie-os em vez de deixá-los como
Name ID e no resultado:
Use a Join cláusula para definir explicitamente uma operação de junção em vez de usar a cláusula para
definir Where implicitamente uma operação de junção:
Confira também
Diretrizes de codificação segura
Compilação condicional no Visual Basic
27/09/2021 • 2 minutes to read
Se você definir o valor da constante de compilação condicional como em tempo de compilação, o código
condicional para a FrenchVersion versão em francês será True compilado. Se você definir o valor da constante
GermanVersion como True , o compilador usará a versão em alemão. Se nenhum dos dois estiver definido
como True , o código no último bloco será Else executado.
NOTE
O compilação automática não funcionará ao editar o código e usar diretivas de compilação condicional se o código não
for parte do branch atual.
- Antes de criar seu arquivo executável, de definir constantes no designer Project seguindo as etapas fornecidas em
Gerenciando Project propriedades da solução.
PA RA DEF IN IR C O N STA N T ES N A L IN H A DE C O M A N DO
- Use a opção -d para inserir constantes de compilação condicional, como no exemplo a seguir:
vbc [Link] /d:conFrenchVersion=–1:conANSI=0
Nenhum espaço é necessário entre a opção -d e a primeira constante. Para obter mais informações, consulte -define (Visual
Basic).
As declarações de linha de comando substituem as declarações inseridas no designer Project , mas não as apagam. Os
argumentos definidos no Project Designer permanecem em vigor para compilações subsequentes.
Ao escrever constantes no próprio código, não há regras estritas sobre seu posicionamento, pois seu escopo é todo o módulo
no qual elas são declaradas.
– Coloque as constantes no bloco de declaração do módulo no qual elas são usadas. Isso ajuda a manter seu código
organizado e mais fácil de ler.
Tópicos Relacionados
T ÍT ULO DESC RIÇ Ã O
Estrutura do programa e convenções de código Fornece sugestões para facilitar a leitura e a manutenção do
código.
Referência
Diretiva #Const de #Const
#If... Diretivas then...#Else
-define (Visual Basic)
Como quebrar e combinar instruções no código
(Visual Basic)
27/09/2021 • 2 minutes to read
Ao escrever seu código, às vezes você pode criar instruções longas que exigem rolagem horizontal no Editor de
Códigos. Embora isso não afete a maneira como seu código é executado, torna difícil para você ou qualquer
outra pessoa ler o código como ele aparece no monitor. Nesses casos, você deve considerar a quebra da única
instrução longa em várias linhas.
NOTE
Em alguns casos, se você omitir o caractere de continuação de linha, o Visual Basic compilador continuará implicitamente
a instrução na próxima linha de código. Para ver uma lista de elementos de sintaxe para os quais você pode omitir o
caractere de continuação de linha, consulte "Continuação implícita de linha" em Instruções.
No exemplo a seguir, a instrução é dividida em quatro linhas com caracteres de continuação de linha encerrando
todos, menos a última linha.
[Link] = _
"SELECT * FROM Titles JOIN Publishers " _
& "ON [Link] = [Link] " _
& "WHERE [Link] = 'CA'"
Usar essa sequência facilita a leitura do código, tanto online quanto quando impresso.
O caractere de continuação de linha deve ser o último caractere em uma linha. Você não pode segui-lo com
nada mais na mesma linha.
Existem algumas limitações em que 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.
Não é possível continuar um comentário usando um caractere de continuação de linha. O compilador não
examina os caracteres em um comentário para um significado especial. Para um comentário de várias linhas,
repita o símbolo de comentário ( ' ) em cada linha.
Embora colocar cada instrução em uma linha separada seja o método recomendado, Visual Basic também
permite que você coloque várias instruções na mesma linha.
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)
28/09/2021 • 2 minutes to read
a #Region diretiva permite que você recolha e oculte seções de código em arquivos Visual Basic. a #Region
diretiva permite especificar um bloco de código que você pode expandir ou recolher ao usar o editor de código
Visual Studio. A capacidade de ocultar o código seletivamente torna os arquivos mais gerenciáveis e fáceis de
ler. Para obter mais informações, consulte Estrutura de tópicos.
#Region as diretivas dão suporte à semântica de bloco de código, como #If...#End If . Isso significa que eles
não podem começar em um bloco e terminar em outro; o início e o fim devem estar no mesmo bloco. #Region
Não há suporte para diretivas em funções.
O #Region bloco pode ser usado várias vezes em um arquivo de código; assim, os usuários podem definir seus
próprios blocos de procedimentos e classes que podem, por sua vez, ser recolhidos. #Region os blocos também
podem ser aninhados dentro de outros #Region blocos.
NOTE
Ocultar o código não impede que ele seja compilado e não afeta as #If...#End If instruções.
Confira também
Compilação condicional
#Region diretiva
#If... Diretivas then... #Else
Estrutura de tópicos
Como rotular instruções (Visual Basic)
27/09/2021 • 2 minutes to read
Blocos de instrução são feitos de 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 como. 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 Visual Basic identificadores válidos, 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.
O compilador identifica rótulos verificando se o início da linha corresponde a qualquer identificador já definido.
Se isso não acontecer, o compilador assumirá que é um rótulo.
Os rótulos têm seu próprio espaço de declaração e não interferem em outros identificadores. O escopo de um
rótulo é o corpo do método. A declaração de rótulo tem precedência em qualquer situação ambígua.
NOTE
Os rótulos podem ser usados somente em instruções executáveis dentro de métodos.
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)
28/09/2021 • 3 minutes to read
Às vezes, você precisa usar caracteres especiais em seu código, ou seja, caracteres que não são alfabéticos ou
numéricos. A pontuação e os caracteres especiais no conjunto de caracteres Visual Basic têm vários usos, desde
organizar o texto do programa até definir as tarefas que o compilador ou o programa compilado executa. Eles
não especificam uma operação a ser executada.
Parênteses
Use parênteses ao definir um procedimento, como Sub um ou Function . Você deve incluir todas as listas de
argumentos de procedimento entre 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.
Dim a, b, c, d, e As Double
a = 3.2
b = 7.6
c = 2
d = b + c / a
e = (b + c) / a
Após a execução do código anterior, o valor de d é 8,225 e o valor e de é 3. O cálculo de d usa a precedência
padrão de / over e é equivalente a + d = b + (c / a) . Os parênteses no cálculo para e substituir a
precedência padrão.
Separadores
Separadores fazem o que seu 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 capacidade de leitura do seu código. O exemplo
a seguir mostra três instruções separadas por dois-pontos.
a = 3.2 : b = 7.6 : c = 2
Para obter mais informações, consulte Como quebrar e combinar instruções no código.
O caractere colon ( : ) também é usado para identificar um rótulo de instrução. Para obter mais informações,
consulte Como rotular instruções.
Concatenação
Use o & operador para concatenação ou vincular cadeias de caracteres. Não confunda-o com o + operador ,
que adiciona valores numéricos. Se você usar o + operador para concatenar ao operar em valores numéricos,
poderá obter resultados incorretos. O exemplo a seguir demonstra isso.
var1 = "10.01"
var2 = 11
resultA = var1 + var2
resultB = var1 & var2
Após a execução do código anterior, o valor de é 21,01 e o valor de resultA resultB é "10.0111".
As três linhas de saída de MsgBox todas exibem o valor 32856 . A primeira linha usa o acesso tradicional à
propriedade , a segunda usa o fato de que é a propriedade padrão da classe e a terceira usa o acesso de
dicionário index index à classe hasDefault .
Observe que o segundo operador deve ser um identificador Visual Basic válido não entre aspas ! duplas (
" " ). Em outras palavras, você não pode usar um literal de cadeia de caracteres ou uma variável de cadeia de
caracteres. A alteração a seguir para a última linha da chamada gera um erro porque é um literal de cadeia
MsgBox "X" de caracteres delimitada.
Confira também
Estrutura do programa e convenções de código
Caracteres de tipo
Comentários no código (Visual Basic)
27/09/2021 • 2 minutes to read
À medida que você lê os exemplos de código, você encontra geralmente o símbolo de comentário ( ' ). esse
símbolo informa o compilador de Visual Basic para ignorar o texto que o segue ou o comentário. Os
comentários são uma breve explicação e/ou anotações adicionadas ao código para o benefício de quem os lê.
É uma prática de programação recomendável iniciar todos os procedimentos com um breve comentário
descrevendo as características do procedimento e sua funcionalidade (o que ele faz). Isso é um benefício para o
programador e é vantajoso para qualquer pessoa que examinar o código. Você deve separar os detalhes de
implementação (como o procedimento faz isso) dos comentários que descrevem as características funcionais.
Quando você incluir detalhes da implementação na descrição, lembre-se de atualizá-los quando você atualizar a
função.
Comentários podem seguir uma instrução na mesma linha ou ocupar uma linha inteira. Ambos são ilustrados
no código a seguir.
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.
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. Essas são sugestões; 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.
NOTE
Você também pode adicionar comentários ao código precedendo o texto com a palavra-chave REM . No entanto, o '
símbolo e os botões de desmarcação de Comentário / são mais fáceis de usar e exigem menos espaço e memória.
Confira também
Instintos básicos – documentando seu código com comentários 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)
27/09/2021 • 2 minutes to read
Qualquer elemento Program, como uma variável, uma classe ou um membro, pode ter o mesmo nome que
uma palavra-chave restrita. Por exemplo, você pode criar uma variável chamada Loop . No entanto, para se
referir à sua versão dele — que tem o mesmo nome que a Loop palavra-chave Restricted — você deve
precedê-la com uma cadeia de caracteres de qualificação completa ou colocá-la entre colchetes ( [ ] ), como
mostra o exemplo a seguir.
' The following statement precedes Loop with a full qualification string.
[Link] = True
' The following statement encloses Loop in square brackets.
[Loop].Visible = True
se você não fizer isso, o Visual Basic assumirá o uso da Loop palavra-chave intrínseca e produzirá um erro,
como no exemplo a seguir:
' The following statement causes a compiler error.
[Link] = True
Você pode usar colchetes ao fazer referência a formulários e controles e ao declarar uma variável ou definir um
procedimento com o mesmo nome de uma palavra-chave restrita. Pode ser fácil esquecer de qualificar nomes
ou incluir colchetes e, portanto, introduzir erros em seu código e torná-lo mais difícil de ler. Por esse motivo,
recomendamos que você não use palavras-chave restritas como os nomes dos elementos do programa. no
entanto, se uma versão futura do Visual Basic definir uma nova palavra-chave que esteja em conflito com um
formulário ou nome de controle existente, você poderá usar essa técnica ao atualizar seu código para trabalhar
com a nova versão.
NOTE
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 em relação a eles fará com que Visual Basic
interpretá-los como seus 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
27/09/2021 • 2 minutes to read
Me , My , e no Visual Basic têm nomes MyBase MyClass semelhantes, mas finalidades diferentes. Este tópico
descreve cada uma dessas entidades para diferenciá-las.
Eu
A palavra-chave fornece uma maneira de se referir à instância específica de uma classe ou estrutura na qual o
Me código está em execução no momento. Me comporta-se como uma variável de objeto ou uma variável de
estrutura que se refere à instância atual. Usar é particularmente útil para passar informações sobre a instância
em execução no momento de uma classe ou estrutura para um procedimento em outra Me classe, estrutura ou
módulo.
Por exemplo, suponha que você tenha o procedimento a seguir em um módulo.
Você pode chamar esse procedimento e passar a instância atual da classe como um Form argumento usando a
instrução a seguir.
ChangeFormColor(Me)
Meu
O recurso fornece acesso fácil e intuitivo a várias classes .NET Framework, permitindo que o usuário Visual Basic
interaja com o computador, o aplicativo, as configurações, os recursos e assim My por diante.
MyBase
A MyBase palavra-chave se comporta como uma variável de objeto que se refere à classe base da instância
atual de uma classe. MyBase normalmente é usado para acessar membros de classe base que são substituídos
ou sombreados em uma classe derivada. [Link] é usado para chamar explicitamente um construtor de
classe base de um construtor de classe derivada.
MyClass
A MyClass palavra-chave se comporta como uma variável de objeto que se refere à instância atual de uma
classe como implementada 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
28/09/2021 • 2 minutes to read
Versões anteriores Visual Basic limites impostos no código, como o comprimento dos nomes de variáveis, o
número de variáveis permitidas em módulos e o tamanho do módulo. No Visual Basic .NET, essas restrições
foram flexibiladas, dando a você maior liberdade ao escrever e organizar seu código.
Os limites físicos dependem mais da memória de tempo de run do que das considerações de tempo de
compilação. Se você usar práticas de programação císticas e dividir aplicativos grandes em várias classes e
módulos, haverá muito pouca chance de encontrar uma limitação de Visual Basic interna.
Veja a seguir algumas limitações que você pode encontrar em casos extremos:
Comprimento do Nome. Há um número máximo de caracteres para o nome de cada elemento de
programação declarado. Esse máximo se aplica a uma cadeia de caracteres de qualificação inteira se o
nome do elemento for qualificado. Consulte Nomes de elemento declarados.
Comprimento da linha. Há um máximo de 65535 caracteres em uma linha física de código-fonte. A
linha de código-fonte lógica poderá ser mais longa se você usar caracteres de continuação de linha.
Consulte Como: quebrar e combinar instruções no código.
Dimensões de matriz. Há um número máximo de dimensões que você pode declarar para uma matriz.
Isso limita quantos índices você pode usar para especificar um elemento de matriz. Consulte Dimensões
de matriz no Visual Basic.
Comprimento da cadeia de caracteres. Há um número máximo de caracteres Unicode que você
pode armazenar em uma única cadeia de caracteres. Consulte Tipo de dados de cadeia de caracteres.
Comprimento da cadeia de caracteres de ambiente. Há um máximo de 32768 caracteres para
qualquer cadeia de caracteres de ambiente usada como um argumento de linha de comando. Essa é uma
limitação em todas as plataformas.
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
27/09/2021 • 2 minutes to read
os tópicos a seguir apresentam e discutem os componentes essenciais do Visual Basic, uma linguagem de
programação orientada a objeto. Depois de criar a interface do usuário para o seu aplicativo usando formulários
e controles, você precisa escrever o código que define o comportamento do aplicativo. assim como acontece
com qualquer linguagem de programação moderna, o Visual Basic dá suporte a várias construções de
programação e elementos de linguagem comuns.
Se você já programou em outras linguagens, grande parte do material abordado nesta seção poderá parecer
familiar. embora a maioria das construções seja semelhante àquelas em outras linguagens, a natureza
controlada por evento do Visual Basic apresenta algumas diferenças sutis.
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 entender as noções básicas, você pode criar aplicativos
poderosos usando o 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
Discute o armazenamento de valores sem variação para uso repetido, inclusive conjuntos de valores constantes
relacionados.
Fluxo de Controle
Mostra como regular o fluxo de execução do programa.
Data Types
Descreve quais tipos de dados um elemento de programação pode armazenar e como esses dados são
armazenados.
Elementos declarados
Aborda a programação de elementos que você pode declarar, seus nomes e características e como o compilador
resolve referências para eles.
Representantes
Fornece uma introdução aos delegados e como eles são usados no Visual Basic.
Associação antecipada e tardia
Descreve a vinculação, que é executada pelo compilador quando um objeto é atribuído a uma variável de objeto
e as diferenças entre objetos com associação inicial e tardia.
Tipos de erro
Fornece uma visão geral dos erros de sintaxe, erros de tempo de execução e erros lógicos.
Eventos
Mostra como declarar e usar eventos.
Interfaces
Descreve o que são as interfaces e como usá-las em seus aplicativos.
LINQ
Fornece links para tópicos que introduzem recursos e programação do Language-Integrated Query (LINQ).
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
Descreve os elementos de código que manipulam elementos contendo valores, como usá-los com eficiência e
como combiná-los para gerar novos valores.
Procedimentos
Descreve os procedimentos Sub , Function , Property e Operator , bem como tópicos avançados como
procedimentos recursivos e sobrecarregados.
Instruções
Descreve as instruções de declaração e executável.
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
Apresenta as variáveis e descreve como usá-las no Visual Basic.
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.
Visual Basic Referência de linguagem
fornece informações de referência sobre vários aspectos da programação de Visual Basic.
Matrizes no Visual Basic
27/09/2021 • 28 minutes to read
Uma matriz é um conjunto de valores, que são elementos com termo, que estão logicamente relacionados entre
si. Por exemplo, uma matriz pode consistir no número de alunos em cada nível em uma escola gramatical; cada
elemento da matriz é o número de alunos em uma única classificação. Da mesma forma, uma matriz pode
consistir em notas de um aluno para uma classe; cada elemento da matriz é uma única classificação.
É possível que as variáveis individuais armazenem 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 classificação de cada aluno,
como englishGrade1 , englishGrade2 etc. Essa abordagem tem três limitações principais:
Precisamos saber em tempo de design exatamente quantas notas temos para lidar.
Manipular grandes números de notas rapidamente torna-se difícil. Isso, por sua vez, torna um aplicativo
muito mais provável de ter bugs sérios.
É difícil de manter. Cada nova classificação que adicionamos exige 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
chamado de índice ou subscrito para identificar um elemento individual com base em sua posição na matriz. Os
índices de um intervalo de matriz de 0 para um menor que o número total de elementos na matriz. quando
você usa a sintaxe Visual Basic para definir o tamanho de uma matriz, você especifica 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 a necessidade de saber exatamente quantos elementos ele contém em tempo de
design.
Alguns exemplos rápidos antes da explicação:
' Change the size of an existing array to 16 elements and retain the current values.
ReDim Preserve numbers(15)
' Redefine the size of an existing array and reset the values.
ReDim numbers(15)
o exemplo a seguir contém o código de Visual Basic que cria e usa a matriz:
Module SimpleArray
Public Sub Main()
' Declare an array with 7 elements.
Dim students(6) As Integer
Você pode usar uma New cláusula para fornecer o tamanho de uma matriz quando ela é criada:
Se você tiver uma matriz existente, poderá redefinir seu tamanho usando a ReDim instrução. Você pode
especificar que a ReDim instrução Mantenha os valores que estão na matriz ou pode especificar que ele crie
uma matriz vazia. O exemplo a seguir mostra os diferentes usos da instrução ReDim para modificar o tamanho
de uma matriz existente.
' Assign a new array size and retain the current values.
ReDim Preserve cargoWeights(20)
' Assign a new array size and retain only the first five values.
ReDim Preserve cargoWeights(4)
' Assign a new array size and discard all current element values.
ReDim cargoWeights(15)
Quando você usa a inferência de tipos, o tipo da matriz é determinado pelo tipo dominante na lista de valores
literais. O tipo dominante é o tipo para o qual todos os outros tipos na 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 se ampliam apenas
para Double , Double é o tipo dominante. Para obter mais informações, consulte Ampliando e restringindo
conversões.
NOTE
Você pode usar a inferência de tipos somente para matrizes que são definidas como variáveis locais em um membro de
tipo. Se uma definição de tipo explícita estiver ausente, as matrizes definidas com literais de matriz no nível de classe serão
do tipo Object[] . Para obter mais informações, consulte inferência de tipo local.
Observe que o exemplo anterior define values como uma matriz do tipo Double , embora todos os literais de
matriz sejam do tipo Integer . Você pode criar essa matriz porque os valores no literal de matriz podem ser
ampliados para Double valores.
Você também pode criar e popular uma matriz multidimensional usando literais de matriz aninhada. Literais de
matriz aninhada devem ter um número de dimensões que seja consistente com a matriz resultante. O exemplo
a seguir cria uma matriz bidimensional de inteiros usando literais de matriz aninhada.
Ao usar literais de matriz aninhada para criar e preencher uma matriz, ocorrerá um erro se o número de
elementos nos literais de matriz aninhada não corresponder. Também ocorrerá um erro se você declarar
explicitamente a variável de matriz para ter um número diferente de dimensões do que os literais de matriz.
Assim como você pode para matrizes unidimensionais, você pode confiar na inferência de tipos ao criar uma
matriz multidimensional com literais de matriz aninhada. O tipo inferido é o tipo dominante para todos os
valores em todos os literais de matriz para todo o nível de aninhamento. O exemplo a seguir cria uma matriz
bidimensional do tipo Double[,] de valores que são do tipo Integer e Double .
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.
Module IterateArray
Public Sub Main()
Dim numbers = {10, 20, 30}
O exemplo a seguir itera por meio de uma matriz multidimensional usando uma For...Next instrução. O
método GetUpperBound tem um parâmetro que especifica a dimensão. GetUpperBound(0) Retorna o índice mais
alto da primeira dimensão e GetUpperBound(1) retorna o índice mais alto da segunda dimensão.
Module IterateArray
Public Sub Main()
Dim numbers = {{1, 2}, {3, 4}, {5, 6}}
O exemplo a seguir usa um para cada... Próxima instruçãopara iterar por meio de uma matriz unidimensional e
uma matriz bidimensional.
Module IterateWithForEach
Public Sub Main()
' Declare and iterate through a one-dimensional array.
Dim numbers1 = {10, 20, 30}
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 a saída do exemplo mostra, o tamanho da
matriz é 16 (ou (3 + 1) * (3 + 1).
Module Example
Public Sub Main()
Dim arr(3, 3) As Integer
[Link]([Link])
End Sub
End Module
' The example displays the following output:
' 16
NOTE
Essa discussão sobre o tamanho da matriz não se aplica a matrizes denteadas. Para obter informações sobre matrizes
denteadas e como determinar o tamanho de uma matriz denteada, consulte a seção matrizes denteadas.
Você pode encontrar o tamanho de uma matriz usando a propriedade [Link]. Você pode encontrar o
comprimento de cada dimensão de uma matriz multidimensional usando o [Link] método.
Você pode redimensionar uma variável de matriz atribuindo um novo objeto de matriz a ela ou usando a
instrução de ReDim instrução . O exemplo a seguir usa a ReDim instrução para alterar uma matriz de elemento
100 para uma matriz de 51 elementos.
Module Example
Public Sub Main()
Dim arr(99) As Integer
[Link]([Link])
Redim arr(50)
[Link]([Link])
End Sub
End Module
' The example displays the following output:
' 100
' 51
Há várias coisas para ter em mente ao lidar com o tamanho de uma matriz.
O B SERVA Ç Õ ES
Consumo de memória Não é seguro fazer suposições sobre como uma matriz é
armazenada na 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 do mesmo tipo de dados somente quando têm a mesma classificação e seus elementos têm o mesmo tipo
de dados. Os comprimentos das dimensões de uma matriz não influenciam o tipo de dados da matriz.
Cada matriz herda da classe [Link] 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 variável é do tipo e
chama o método para insinciar a matriz, o tipo da matriz prova ser arr Array [Link] Object[].
Module Example
Public Sub Main()
Dim arr As Array = [Link](GetType(Object), 19)
[Link]([Link])
[Link]([Link]().Name)
End Sub
End Module
' The example displays the following output:
' 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 por segurança de tipo, é aconselhável declarar todas as matrizes 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 GetType método na variável para obter um Type objeto que representa o tipo de tempo
de run-time da variável. O objeto Type mantém informações abrangentes em suas propriedades e métodos.
Você pode passar a variável para TypeName a função para obter um com o nome do tipo de tempo de
String run-time.
O exemplo a seguir chama o GetType método e a função para determinar o tipo de uma TypeName matriz. O
tipo de matriz é Byte(,) . Observe que a [Link] propriedade também indica que o tipo base da matriz
de byte é a Array classe .
Module Example
Public Sub Main()
Dim bytes(9,9) As Byte
[Link]($"Type of {nameof(bytes)} array: {[Link]().Name}")
[Link]($"Base class of {nameof(bytes)}: {[Link]().[Link]}")
[Link]()
[Link]($"Type of {nameof(bytes)} array: {TypeName(bytes)}")
End Sub
End Module
' The example displays the following output:
' Type of bytes array: Byte[,]
' Base class of bytes: Array
'
' Type of bytes array: Byte(,)
Module ReturnValuesAndParams
Public Sub Main()
Dim numbers As Integer() = GetNumbers()
ShowNumbers(numbers)
End Sub
No exemplo a seguir, a GetNumbersMultiDim função retorna um , uma matriz Integer(,) bidimensional do tipo
Integer . O procedimento ShowNumbersMultiDim aceita um argumento Integer(,) .
Module Example
Public Sub Main()
Dim numbers As Integer(,) = GetNumbersMultidim()
ShowNumbersMultidim(numbers)
End Sub
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 matriz de matrizes, foi projetada para
esses cenários. Uma matriz irregular é uma matriz cujos elementos também são matrizes. Uma matriz denteada
e cada elemento em uma matriz denteada podem ter uma ou mais dimensões.
O exemplo a seguir usa uma matriz de meses, cada elemento do qual é uma matriz de dias. O exemplo usa uma
matriz irregular porque diferentes meses 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.
Imports [Link]
Module JaggedArray
Public Sub Main()
' Declare the jagged array of 12 elements. Each element is an array of Double.
Dim sales(11)() As Double
' Set each element of the sales array to a Double array of the appropriate size.
For month As Integer = 0 To 11
' The number of days in the month determines the appropriate size.
Dim daysInMonth As Integer =
[Link](Year(Now), month + 1)
sales(month) = New Double(daysInMonth - 1) {}
Next
O exemplo anterior atribui valores à matriz irregular em uma base elemento a 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, ) gera
Dim valuesjagged = {{1, 2}, {2, 3, 4}} o erro do compilador BC30568. Para corrigir o erro, coloque os literais
de matriz interna entre parênteses. Os parênteses forçam a avaliação da expressão literal da matriz e os valores
resultantes são usados com o literal de matriz externa, como mostra o exemplo a seguir.
Module Example
Public Sub Main()
Dim values1d = { 1, 2, 3 }
Dim values2d = {{1, 2}, {2, 3}, {3, 4}}
Dim valuesjagged = {({1, 2}), ({2, 3, 4})}
End Sub
End Module
Uma matriz irregular é uma matriz unidimensional cujos elementos contêm matrizes. Portanto, a propriedade e
o método retornam o número de elementos na matriz unidimensional e lança um porque uma matriz
[Link] [Link](0) irregular não é [Link](1) IndexOutOfRangeException
multidimensional. Você determina o número de elementos em cada submarray recuperando o valor da
propriedade de cada [Link] submarray. O exemplo a seguir ilustra como determinar o número de
elementos em uma matriz irregular.
Module Example
Public Sub Main()
Dim jagged = { ({1, 2}), ({2, 3, 4}), ({5, 6}), ({7, 8, 9, 10}) }
[Link]($"The value of [Link]: {[Link]}.")
Dim total = [Link]
For ctr As Integer = 0 To [Link](0)
[Link]($"Element {ctr + 1} has {jagged(ctr).Length} elements.")
total += jagged(ctr).Length
Next
[Link]($"The total number of elements in the jagged array: {total}")
End Sub
End Module
' The example displays the following output:
' The value of [Link]: 4.
' Element 1 has 2 elements.
' Element 2 has 3 elements.
' Element 3 has 2 elements.
' Element 4 has 4 elements.
' The total number of elements in the jagged array: 15
Uma matriz de comprimento zero é declarada com uma dimensão de -1. Por exemplo:
Talvez seja necessário criar uma matriz de tamanho igual a zero nas seguintes circunstâncias:
Sem correr o risco de uma exceção, seu código deve acessar membros da classe , como ou ou , ou
chamar uma NullReferenceException Array Visual Basic função como Length Rank UBound .
Você deseja manter seu código simples sem precisar verificar 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.
NOTE
Esta seção não aborda a divisão de uma única cadeia de caracteres em uma matriz de cadeia de caracteres com base em
algumlimidor. Para obter informações sobre como dividir uma cadeia de caracteres, consulte o [Link] método .
Module Example
Public Sub Main()
' Create an array of 100 elements.
Dim arr(99) As Integer
' Populate the array.
Dim rnd As new Random()
For ctr = 0 To [Link](0)
arr(ctr) = [Link]()
Next
O exemplo a seguir divide uma matriz de cadeia de caracteres em duas matrizes com base na presença de um
elemento cujo valor é "zzz", que serve como o separador de matriz. As novas matrizes não incluem o elemento
que contém olimiter.
Module Example
Public Sub Main()
Dim rnd As New Random()
NOTE
Esta seção não aborda a junção de uma matriz de cadeia de caracteres em uma única cadeia de caracteres. Para obter
informações sobre como unir uma matriz de cadeia de caracteres, consulte o [Link] método .
Antes de copiar os elementos de cada matriz para a nova matriz, você deve primeiro garantir que inicializou a
matriz para que ela seja grande o suficiente para acomodar a nova matriz. É possível fazer isso de duas formas:
Use a ReDim Preserve instrução para expandir dinamicamente a matriz antes de adicionar novos elementos
a ela. Essa é a técnica mais fácil, mas pode resultar em degradação de desempenho e consumo excessivo de
memória ao copiar matrizes grandes.
Calcule o número total de elementos necessários para a nova matriz grande e adicione os elementos de cada
matriz de origem a ela.
O exemplo a seguir usa a segunda abordagem para adicionar quatro matrizes com dez elementos cada a uma
única matriz.
Imports [Link]
Imports [Link]
Module Example
Public Sub Main()
Dim tasks As New List(Of Task(Of Integer()))
' Generate four arrays.
For ctr = 0 To 3
Dim value = ctr
[Link]([Link](Function()
Dim arr(9) As Integer
For ndx = 0 To [Link](0)
arr(ndx) = value
Next
Return arr
End Function))
Next
[Link]([Link]())
' Compute the number of elements in all arrays.
Dim elements = 0
For Each task In tasks
elements += [Link]
Next
Dim newArray(elements - 1) As Integer
Dim index = 0
For Each task In tasks
Dim n = [Link]
[Link]([Link], 0, newArray, index, n)
index += n
Next
[Link]($"The new array has {[Link]} elements.")
End Sub
End Module
' The example displays the following output:
' The new array has 40 elements.
Como nesse caso as matrizes de origem são todas pequenas, também podemos expandir dinamicamente a
matriz conforme adicionamos os elementos de cada nova matriz a ela. O exemplo a seguir faz isso.
Imports [Link]
Imports [Link]
Module Example
Public Sub Main()
Dim tasks As New List(Of Task(Of Integer()))
' Generate four arrays.
For ctr = 0 To 3
Dim value = ctr
[Link]([Link](Function()
Dim arr(9) As Integer
For ndx = 0 To [Link](0)
arr(ndx) = value
Next
Return arr
End Function))
Next
[Link]([Link]())
' Dimension the target array and copy each element of each source array to it.
Dim newArray() As Integer = {}
' Define the next position to copy to in newArray.
Dim index = 0
For Each task In tasks
Dim n = [Link]
ReDim Preserve newArray([Link](0) + n)
[Link]([Link], 0, newArray, index, n)
index += n
Next
[Link]($"The new array has {[Link]} elements.")
End Sub
End Module
' The example displays the following output:
' The new array has 40 elements.
Tópicos relacionados
T ERM O DEF IN IÇ Ã O
Como inicializar uma variável de matriz no Visual Basic Descreve como preencher matrizes com valores iniciais.
Como classificar uma matriz no Visual Basic Mostra como classificar os elementos de uma matriz em
ordem alfabética.
Como atribuir uma matriz a outra matriz Descreve as regras e as etapas para atribuir uma matriz a
outra variável de matriz.
Solução de problemas de matrizes Aborda alguns problemas comuns que surgem ao trabalhar
com matrizes.
Confira também
[Link]
Instrução Dim
Instrução ReDim
Inicializadores de coleção (Visual Basic)
27/09/2021 • 5 minutes to read
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.
Para obter mais informações sobre coleções, consulte Coleções.
Você identificará um inicializador de coleção usando a palavra-chave From seguida por chaves ( {} ). Isso é
semelhante à sintaxe de literal de matriz descrita em Matrizes. Os exemplos a seguir mostram várias maneiras
de usar inicializadores de coleção para criar coleções.
NOTE
O C# também fornece inicializadores de coleção. Os inicializadores de coleção C# fornecem a mesma funcionalidade que a
dos inicializadores de coleção do Visual Basic. Para obter mais informações sobre os inicializadores de coleção do C#,
consulte Inicializadores de objeto e de coleçã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.
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.
O método Add deve estar disponível no escopo em que o inicializador de coleção está sendo chamado.
Se você estiver usando o inicializador de coleção em um cenário no qual os métodos não públicos da
coleção possam ser acessados, o método Add não precisará ser público.
O método Add deve ser um membro de instância ou um membro Shared da classe da coleção ou um
método de extensã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 objeto Customer será passado ao método
Add(Customer) da lista genérica.
O exemplo de código a seguir mostra o código equivalente que não usa um inicializador de coleção.
Se a coleção tiver um método Add com parâmetros correspondentes ao construtor do objeto Customer , você
poderá aninhar os valores de parâmetro do método Add nos inicializadores de coleção, conforme será
discutido na próxima seção. Se a coleção não tiver um método Add , você poderá criar um como um método de
extensão. Para obter um exemplo de como criar um método Add como um método de extensão para uma
coleção, consulte Como criar um método de extensão Add usado por um inicializador de coleção. Para obter um
exemplo de como criar uma coleção personalizada que pode ser usada com um inicializador de coleção,
consulte Como criar uma coleção usada por um inicializador de coleção.
Somente as listas de valores aninhados do primeiro nível de aninhamento são enviadas ao método Add do tipo
de coleção. Níveis de aninhamento mais profundos são tratados como literais de matriz e as listas de valores
aninhados não correspondem ao método Add de nenhuma coleção.
Tópicos Relacionados
T ÍT ULO DESC RIÇ Ã O
Como criar um método para adicionar extensão usado por Mostra como criar um método de extensão chamado Add ,
um inicializador de coleção que pode ser usado para preencher uma coleção com
valores de um inicializador de coleção.
Como criar uma coleção usada por um inicializador de Mostra como habilitar o uso de um inicializador de coleção,
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
27/09/2021 • 2 minutes to read
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.
Enumerações fornecem uma maneira conveniente para trabalhar com conjuntos de constantes relacionadas e
para associar valores de constante a nomes. Por exemplo, é possível declarar uma enumeração de um conjunto
de constantes de inteiros associados aos dias da semana e, em seguida, usar os nomes de dias em vez de seus
valores de inteiros em seu código.
Nesta seção
T ERM O DEF IN IÇ Ã O
Seções relacionadas
T ERM O DEF IN IÇ Ã O
Instrução Option Infer Descreve a instrução Option Infer , que permite o uso de
inferência de tipo de variável local ao declarar variáveis.
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.
As estruturas de controle permitem regular o fluxo de execução do programa. usando estruturas de controle,
você pode escrever Visual Basic código que toma decisões ou que repete ações. Outras estruturas de controle
permitem assegurar disponibilidade de um recurso ou executar uma série de instruções na mesma referência
de objeto.
Nesta seção
Estruturas de Decisão
Descreve estruturas de controle usadas para ramificação.
Estruturas de Loop
Descreve estruturas de controle usadas para repetir processos.
Outras Estruturas de Controle
Descreve estruturas de controle usadas para descarte de recursos e acesso de objetos.
Estruturas de Controle Aninhadas
Cobre as estruturas de controle dentro de outras estruturas de controle.
Seções relacionadas
Resumo do Fluxo de Controle
Fornece links para páginas de referência de linguagem sobre esse assunto.
Tipos de dados no Visual Basic
27/09/2021 • 2 minutes to read
O tipo de dados de um elemento de programação se refere a que tipo de dados ele pode armazenar e como ele
armazena esses dados. Os tipos de dados se aplicam a todos os valores que podem ser armazenados na
memória do computador ou participam da avaliação de uma expressão. Cada variável, literal, constante,
enumeração, propriedade, parâmetro de procedimento, argumento de procedimento e valor retornado do
procedimento tem um tipo de dados.
EL EM EN TO DE P RO GRA M A Ç Ã O DEC L A RA Ç Ã O DE T IP O DE DA DO S
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)
27/09/2021 • 4 minutes to read
Além de especificar um tipo de dados em uma instrução de declaração, você pode forçar o tipo de dados de
alguns elementos de programação com um caractere de tipo. O caractere de tipo deve seguir imediatamente o
elemento, sem nenhum tipo de caracteres intermediários.
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.
C A RA C T ERE DE T IP O DE
IDEN T IF IC A DO R T IP O DE DA DO S EXEM P LO
% 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 quaisquer tipos de dados compostos, como matrizes ou
estruturas.
em alguns casos, você pode acrescentar o $ caractere a uma função Visual Basic, por exemplo, Left$ em vez
de Left , para obter um valor retornado do tipo String .
Em todos os casos, o caractere de tipo de identificador deve seguir imediatamente o nome do identificador.
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
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 quaisquer tipos de dados compostos, como matrizes ou estruturas.
Os literais também podem usar os caracteres de tipo de identificador (,,,, % & @ ! # , $ ), como variáveis,
constantes e expressões. No entanto, os caracteres do tipo literal (,,,,, S I L D F R , C ) podem ser
usados somente com literais.
Em todos os casos, o caractere de tipo literal deve seguir imediatamente o valor literal.
VA LO RES DE DÍGITO
B A SE DO N ÚM ERO P REF IXO VÁ L IDO S EXEM P LO
a partir do Visual Basic 2017, você pode usar o caractere de sublinhado ( _ ) como um separador de grupo
para melhorar a legibilidade de um literal integral. O exemplo a seguir usa o _ caractere para agrupar um
literal binário em grupos de 8 bits:
Você pode seguir um literal prefixado com um caractere de tipo literal. O exemplo a seguir mostra a isso.
No exemplo anterior, counter tem o valor decimal de-32768 e flags tem o valor decimal de + 32768.
a partir do Visual Basic 15,5, você também pode usar o caractere de sublinhado ( _ ) como um separador à
esquerda entre o prefixo e os dígitos hexadecimal, binário ou octal. Por exemplo:
Para usar o caractere de sublinhado como um separador à esquerda, você deve adicionar o seguinte elemento
ao arquivo de projeto (*.vbproj) do Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
para obter mais informações, consulte selecionar a versão do idioma do 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)
27/09/2021 • 2 minutes to read
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.
NOTE
Todos os tipos de dados elementares Visual Basic são suportados por uma estrutura ou uma classe que está no System
namespace . O compilador usa cada palavra-chave de tipo de dados como um alias para a estrutura ou classe subjacente.
Por exemplo, declarar uma variável usando a palavra reservada é o mesmo que declará-la usando o nome de Byte
estrutura totalmente qualificado [Link] .
Nesta seção
Tipos de dados numéricos
Descreve os tipos numéricos integrais e não integrais.
Tipos de dados de caractere
Descreve os tipos Char e String .
Tipos de dados diversos
Descreve os Boolean tipos , e Date Object .
Seções relacionadas
Data Types
Apresenta os Visual Basic tipos de dados e descreve como usá-los.
Data Types
Fornece uma visão geral dos tipos de dados elementares fornecidos pelo Visual Basic.
Tipos de dados numéricos (Visual Basic)
28/09/2021 • 4 minutes to read
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 inteiras e fracionárias.
Para uma tabela que mostra uma comparação lado a lado dos tipos Visual Basic dados, consulte Tipos de dados.
Confira também
Tipos de dados elementares
Tipos de dados de caractere
Tipos de dados diversos
Solução de problemas de tipos de dados
Como: Chamar uma função do Windows que use tipos não assinados
Tipos de dados de caractere (Visual Basic)
27/09/2021 • 2 minutes to read
Visual Basic fornece tipos de dados de caractere para lidar com caracteres imprimíveis e exibiveis. Embora
ambos lidam com caracteres Unicode, contém um único caractere, enquanto Char contém um número String
indefinido de caracteres.
Para uma tabela que exibe uma comparação lado a lado dos tipos Visual Basic dados, consulte Tipos de dados.
Tipo char
O tipo de dados é um caractere Unicode de Char dois byte (16 bits). Se uma variável sempre armazenar
exatamente um caractere, declare-o como Char . Por exemplo:
Cada valor possível em uma Char String variável ou é 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íticas e símbolos matemáticos e técnicos.
NOTE
O conjunto de caracteres Unicode reserva os pontos de código D800 a DFFF (55296 a 55551 decimal) para pares
substitutos, que exigem dois valores de 16 bits para representar um único ponto de código. Uma Char variável não
pode conter um par substituto e String um usa duas posições para manter esse par.
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)
27/09/2021 • 2 minutes to read
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 uma tabela que mostra uma comparação lado a lado dos tipos Visual Basic dados, consulte Tipos de dados.
Tipo booliana
O Tipo de Dados Booliana é um valor não assinado 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, sim/não ou on/off, declare-o 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 (12:00 AM) 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 os tipos de valor , como , e instâncias de
estrutura, e tipos de referência , que são instâncias de objetos criados com base em classes como Integer e
Boolean String Form instâncias de matriz.
Se uma variável armazenar um ponteiro para uma instância de uma classe que você não conhece no tempo de
compilação ou se puder apontar para dados de vários tipos de dados, declare-o como Object .
A vantagem do tipo Object 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, incorre
em boxing e unboxing. Se você usá-lo para tipos de referência, incorre 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)
27/09/2021 • 2 minutes to read
além dos tipos de dados elementares Visual Basic suprimentos, você também pode montar itens de tipos
diferentes 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 de 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.
Um tipo de dados de matriz normalmente é representado usando o tipo de elemento, parênteses e vírgulas,
conforme necessário. Por exemplo, uma matriz unidimensional de String elementos é representada como
String() e uma matriz bidimensional de Boolean elementos é representada como Boolean(,) .
Tipos de estrutura
Não há nenhum tipo de dados único composto por 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, Visual Basic as
considerará como sendo do mesmo tipo de dados.
Tuplas
Uma tupla é uma estrutura leve que contém dois ou mais campos cujos tipos são predefinidos. as tuplas têm
suporte a partir do Visual Basic 2017. As tuplas são usadas com mais frequência para retornar vários valores de
uma única chamada de método sem precisar passar argumentos por referência ou empacotamento dos 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 composto por todas as matrizes. O tipo de dados de uma determinada
instância de uma matriz é determinado pelo seguinte:
O fato de ser uma matriz
A classificação (número de dimensões) da matriz
O tipo de elemento da matriz
Em particular, o comprimento de uma determinada dimensão não faz parte do tipo de dados da instância. O
exemplo a seguir ilustra essa situação.
Tipos de classe
Não há nenhum tipo de dados único que abranja 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 apenas elas terão o mesmo tipo de dados, elas
apontarão para a mesma instância de classe na memória.
Para obter mais informações sobre classes, consulte objetos e classes.
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)
28/09/2021 • 2 minutes to read
Uma variável contém mais de um valor se você o declarar como de um tipo de dados composto.
Os tipos de dados compostos incluem estruturas, matrizes e classes. Uma variável de um tipo de dados
composto pode conter uma combinação de tipos de dados elementares e outros tipos compostos. Estruturas e
classes podem conter código, bem como dados.
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)
28/09/2021 • 7 minutes to read
Um tipo genérico é um único elemento de programação que se adapta para executar a mesma funcionalidade
para uma variedade de tipos de dados. Ao definir uma classe ou procedimento genérico, você não precisa
definir uma versão separada para cada tipo de dados para o qual talvez você queira executar essa
funcionalidade.
Uma analogia é um conjunto de chaves de fenda com cabeça removível. Inspecione o parafuso que precisa girar
e selecione a cabeça correta para esse parafuso (com slot, cruzado, com a cabeça aberta). Depois de inserir a
cabeça correta na alça da chave de fenda, você executará exatamente a mesma função com a chave de fenda, ou
seja, transformando o parafuso.
Ao definir um tipo genérico, você o parametriza com um ou mais tipos de dados. Isso permite que o código de
uso adapte os tipos de dados de acordo com seus requisitos. Seu código pode declarar vários elementos de
programação diferentes do elemento genérico, cada um atuando em um conjunto diferente de tipos de dados.
Mas todos os elementos declarados executam a lógica idêntica, independentemente dos tipos de dados que
estão usando.
Por exemplo, talvez você queira criar e usar uma classe de fila que opera em um tipo de dados específico, como
String . Você pode declarar essa classe de [Link]<T> , como mostra o exemplo a
seguir.
Agora você pode usar stringQ para trabalhar exclusivamente com String valores. Como stringQ é específico
para em vez de ser String generalizado para Object valores, você não tem associação tardia ou conversão de
tipo. Isso economiza tempo de execução e reduz erros de tempo de execução.
Para obter mais informações sobre como usar um tipo genérico, consulte Como usar uma classe genérica.
As instruções anteriores 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 dentro da classe construída. O exemplo a seguir mostra a
processNewItem aparência do procedimento em integerClass .
Para obter um exemplo mais completo, consulte Como definir uma classe que pode fornecer funcionalidade
idêntica em tipos de dados diferentes.
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 para seu tipo genérico.
Por exemplo, se você quiser comparar dois itens para fins de classificação ou ordenação, o tipo de dados deve
implementar a IComparable interface . Você pode impor esse requisito adicionando uma restrição ao parâmetro
type.
Exemplo de uma restrição
O exemplo a seguir mostra uma definição de esqueleto de uma classe com uma restrição que exige que o
argumento de tipo implemente IComparable .
Se o código subsequente tentar construir uma classe do fornecimento de um tipo que não itemManager
implementa IComparable , o compilador sinaliza um erro.
Tipos de restrições
Sua restrição pode especificar os seguintes requisitos em qualquer combinação:
O argumento type deve implementar uma ou mais interfaces
O argumento type deve ser do tipo ou herdar de, no máximo, uma classe
O argumento type deve expor um construtor sem parâmetros acessível ao código que cria objetos com
base nele
O argumento type deve ser um tipo de referência ou deve ser um tipo de valor
Se você precisar impor mais de um requisito, use uma lista de restrições separadas 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 Class a palavra-chave ; para exigir um tipo de valor, inclua a Structure palavra-
chave .
Para obter mais informações sobre restrições, consulte Lista de tipos.
Exemplo de várias restrições
O exemplo a seguir mostra uma definição de esqueleto de uma classe genérica com uma lista de restrições no
parâmetro type. No código que cria uma instância dessa classe, o argumento type deve implementar as
interfaces e , ser um tipo de referência e expor um construtor sem IComparable IDisposable parâmetros
acessível.
Termos importantes
Tipos genéricos apresentam e usam os seguintes termos:
Tipo genérico. Uma definição de uma classe, estrutura, interface, procedimento ou delegado para o qual
você fornece pelo menos um tipo de dados quando o declara.
Parâmetro de tipo. Em uma definição de tipo genérico, um espaço reservado para um tipo de dados que
você fornece ao declarar o tipo.
Argumento de tipo. Um tipo de dados específico que substitui um parâmetro de tipo quando você
declara um tipo construído de um tipo genérico.
Restrição. Uma condição em um parâmetro de tipo que restringe o argumento de tipo que você pode
fornecer para ele. Uma restrição pode exigir que o argumento de tipo deve implementar uma interface
específica, ser ou herdar de uma classe específica, ter um construtor sem parâmetros acessível ou ser um
tipo de referência ou um tipo de valor. Você pode combinar essas restrições, mas pode especificar no
máximo uma classe.
Tipo construído. Uma classe, estrutura, interface, procedimento ou delegado declarado de um tipo
genérico fornecendo argumentos de tipo para seus parâmetros de tipo.
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
Desse
Como
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)
27/09/2021 • 4 minutes to read
Você pode definir uma classe da qual você pode criar objetos que fornecem funcionalidades idênticas em tipos
de dados diferentes. Para fazer isso, especifique um ou mais parâmetros de tipo na definição. A classe pode
servir como um modelo para objetos que usam vários tipos de dados. Uma classe definida dessa maneira é
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 um desempenho
melhor do que definir a classe com o Object tipo .
Além das classes, você também pode definir e usar estruturas genéricas, interfaces, procedimentos e delegados.
Para definir uma classe com um parâmetro de tipo
1. Defina a classe da maneira normal.
2. Adicione (Of typeparameter imediatamente ) após o nome da classe para especificar um parâmetro
de tipo.
3. Se você tiver mais de um parâmetro de tipo, faça uma lista separada por vírgulas dentro dos parênteses.
Não repita a Of palavra-chave .
4. Se o código executar operações em um parâmetro de tipo diferente da atribuição simples, siga esse
parâmetro de tipo com uma cláusula para As adicionar uma ou mais restrições. Uma restrição garante
que o tipo fornecido para esse parâmetro de tipo atenda a um requisito como o seguinte:
Dá suporte a uma operação, como > , que seu código executa
Dá suporte a um membro, como um método, que seu código acessa
Expõe um construtor sem parâmetros
Se você não especificar nenhuma restrição, as únicas operações e membros que seu código poderá usar
serão aqueles com suporte do Tipo de Dados de Objeto. Para obter mais informações, consulte Lista de
tipos.
5. Identifique cada membro de classe que deve ser declarado com um tipo fornecido e declare-o As
typeparameter . Isso se aplica ao armazenamento interno, parâmetros de procedimento e valores de
retorno.
6. Certifique-se de que seu código use apenas operações e métodos com suporte de qualquer tipo de
dados que ele possa fornecer ao itemType .
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 da lista. Um construtor
parametrizado permite ao código de uso definir o limite superior de e o construtor sem parâmetros
define isso como 9 (para um total de items 10 itens).
Public Class simpleList(Of itemType)
Private items() As itemType
Private top As Integer
Private nextp As Integer
Public Sub New()
[Link](9)
End Sub
Public Sub New(ByVal t As Integer)
[Link]()
items = New itemType(t) {}
top = t
nextp = 0
End Sub
Public Sub add(ByVal i As itemType)
insert(i, nextp)
End Sub
Public Sub insert(ByVal i As itemType, ByVal p As Integer)
If p > nextp OrElse p < 0 Then
Throw New [Link]("p",
" less than 0 or beyond next available list position")
ElseIf nextp > top Then
Throw New [Link]("No room to insert at ",
"p")
ElseIf p < nextp Then
For j As Integer = nextp To p + 1 Step -1
items(j) = items(j - 1)
Next j
End If
items(p) = i
nextp += 1
End Sub
Public Sub remove(ByVal p As Integer)
If p >= nextp OrElse p < 0 Then
Throw New [Link]("p",
" less than 0 or beyond last list item")
ElseIf nextp = 0 Then
Throw New [Link]("List empty; cannot remove ",
"p")
ElseIf p < nextp - 1 Then
For j As Integer = p To nextp - 2
items(j) = items(j + 1)
Next j
End If
nextp -= 1
End Sub
Public ReadOnly Property listLength() As Integer
Get
Return nextp
End Get
End Property
Public ReadOnly Property listItem(ByVal p As Integer) As itemType
Get
If p >= nextp OrElse p < 0 Then
Throw New [Link]("p",
" less than 0 or beyond last list item")
End If
Return items(p)
End Get
End Property
End Class
Você pode declarar uma classe de para manter uma lista de valores, outra classe para manter uma lista
de valores simpleList e outra para manter Integer String Date valores. Exceto pelo tipo de dados
dos membros da lista, os objetos criados com base em todas essas classes se comportam de forma
idêntica.
O argumento de tipo para o qual o código de uso fornece pode ser um tipo intrínseco como ou , uma
estrutura, uma enumeração ou qualquer tipo de classe, incluindo um que seu aplicativo itemType
Boolean Double define.
Confira também
Data Types
Tipos genéricos no Visual Basic
Independência da linguagem e componentes independentes da linguagem
De
Lista de Tipos
Como: Usar uma classe genérica
Tipo de dados Object
Como usar uma classe genérica (Visual Basic)
27/09/2021 • 2 minutes to read
Uma classe que aceita 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 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 recebe uma classe genérica definida no .NET Framework e cria uma instância dela.
Para usar uma classe que usa um parâmetro de tipo
1. No início do arquivo de origem, inclua uma Instrução Imports (Namespace e Tipo do .NET) para importar
o [Link] namespace. Isso permite que você consulte a classe sem precisar qualificá-
la totalmente para diferenciá-la [Link]<T> de outras classes de fila, como
[Link] .
2. Crie o objeto da maneira normal, mas adicione (Of type) imediatamente após o nome da classe.
O exemplo a seguir usa a mesma classe ( ) para criar dois objetos [Link]<T>
de fila que mantém itens de tipos de dados diferentes. Ele adiciona itens ao final de cada fila e, em
seguida, remove e exibe itens da frente de cada fila.
Confira também
Data Types
Tipos genéricos no Visual Basic
Independência da linguagem e componentes independentes da linguagem
De
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
27/09/2021 • 3 minutes to read
Um procedimento genérico, também chamado de método genérico, é um procedimento definido com pelo
menos um parâmetro de tipo. Isso permite que o código de chamada Personalize os tipos de dados para seus
requisitos cada vez que chama o procedimento.
Um procedimento não é genérico simplesmente em virtude de ser definido dentro de uma classe genérica ou
de uma estrutura genérica. Para ser genérico, o procedimento deve ter pelo menos um parâmetro de tipo, além
de quaisquer parâmetros normais que possam ser necessários. Uma classe ou estrutura genérica pode conter
procedimentos não genéricos e uma classe, estrutura ou módulo não-genérico pode conter procedimentos
genéricos.
Um procedimento genérico pode usar seus parâmetros de tipo em sua lista de parâmetros normal, em seu tipo
de retorno, se tiver um, e em seu código de procedimento.
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 a serem passados 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 String o tipo para o parâmetro de tipo t .
Se o compilador não puder inferir os argumentos de tipo do contexto de sua chamada, ele relatará um erro.
Uma possível causa desse erro é uma incompatibilidade de classificação de matriz. Por exemplo, suponha que
você defina um parâmetro normal como uma matriz de um parâmetro de tipo. Se você chamar o procedimento
genérico fornecendo uma matriz de uma classificação diferente (número de dimensões), a incompatibilidade
causará falha na inferência de tipos. O código a seguir mostra uma chamada em que uma matriz bidimensional
é passada para um procedimento que espera uma matriz unidimensional.
Você pode invocar a inferência de tipos apenas omitindo todos os argumentos de tipo. Se você fornecer um
argumento de tipo, deverá fornecer todos eles.
A inferência de tipos tem suporte apenas para procedimentos genéricos. Não é possível invocar a inferência de
tipos em classes, estruturas, interfaces ou delegados genéricos.
Exemplo
Descrição
O exemplo a seguir define um Function procedimento genérico 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
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 IComparable<T> interface. O
código usa o CompareTo método em vez do = operador, porque não há nenhuma garantia de que um
argumento de tipo fornecido para T suporte ao = operador.
Você pode testar o findElement procedimento com o código a seguir.
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)
28/09/2021 • 6 minutes to read
À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 tenha 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 anulável.
Cada tipo de valor anulável é construído a partir da Nullable<T> estrutura genérica. Considere um banco de
dados que controla atividades relacionadas ao trabalho. O exemplo a seguir constrói um Boolean tipo anulável
e declara uma variável desse tipo. Você pode escrever a declaração de três maneiras:
A variável ridesBusToWork pode conter um valor True , um valor False ou nenhum valor. Seu valor padrão
inicial não é nenhum valor, que nesse caso pode significar que as informações ainda não foram obtidas para
essa pessoa. Por outro lado, False pode significar que as informações foram obtidas e a pessoa não pode fazer
o barramento funcionar.
Você pode declarar variáveis e propriedades com tipos de valor anulável e pode 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 Function procedimento.
Você não pode construir um tipo anulável em um tipo de referência, como uma matriz, uma String ou uma
classe. O tipo subjacente deve 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, sua HasValue propriedade 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 de seu 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 Integer tipo seja 0.
Um valor nulo é útil para indicar um valor indefinido ou desconhecido. Se numberOfChildren tivesse sido
declarado como Integer , não haveria nenhum valor que possa indicar que as informações não estão
disponíveis no momento.
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.
numberOfChildren = 2
Se uma variável ou propriedade de um tipo de valor anulável contiver um valor definido, você poderá fazer com
que ele reverta para seu estado inicial de não ter um valor atribuído. Você faz isso definindo a variável ou a
propriedade como Nothing , como mostra o exemplo a seguir.
numberOfChildren = Nothing
NOTE
Embora você possa atribuir Nothing a uma variável de um tipo de valor anulável, não é possível testá-lo para Nothing
o usando o sinal de igual. Comparação que usa o sinal de igual, someVar = Nothing , sempre é avaliada como Nothing
. Você pode testar a propriedade da variável HasValue para False ou testar usando o Is IsNot operador OR.
Recuperando valores
Para recuperar o valor de uma variável de um tipo de valor anulável, você deve primeiro testar sua HasValue
propriedade para confirmar que ela tem um valor. se você tentar ler o valor quando HasValue for False , Visual
Basic lançará uma InvalidOperationException exceção. O exemplo a seguir mostra a maneira recomendada para
ler a variável numberOfChildren dos exemplos anteriores.
If [Link] Then
MsgBox("There are " & CStr(numberOfChildren) & " children.")
Else
MsgBox("It is not known how many children there are.")
End If
B1 B2 B1 E B2 B1 OU B2
Quando o valor de uma variável ou expressão booliana é Nothing , não é true nem false . Considere o
exemplo a seguir.
Neste exemplo, b1 And b2 é avaliado como Nothing . Como resultado, a Else cláusula é executada em cada
If instrução e a saída é a seguinte:
NOTE
AndAlso e OrElse , que usam a avaliação de curto-circuito, devem avaliar seus segundo operandos quando o primeiro
é avaliado como Nothing .
Propagação
Se um ou ambos os operandos de uma operação aritmética, de comparação, de deslocamento ou de tipo for um
tipo de valor anulável, o resultado da operação também será um tipo de valor anulável. Se ambos os operandos
tiverem valores que não são Nothing , a operação será executada nos valores subjacentes dos operandos, como
se nenhum deles fosse um tipo de valor anulável. No exemplo a seguir, as variáveis compare1 e sum1 são
digitadas implicitamente. Se você posicionar o ponteiro do mouse sobre eles, verá que o compilador infere os
tipos de valores anuláveis para ambos.
' Variable n is a nullable type, but both m and n have proper values.
Dim m As Integer = 3
Dim n? As Integer = 2
' Because the values of n, compare2, and sum2 are all Nothing, the
' following line displays: 3 * <null> * <null> * <null>
[Link]($"{m} * {If(n, "<null>")} * {If(sum2, "<null>")} * {If(compare2, "<null>")}")
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 valor anulável (C#)
Tipos de valor e referência
27/09/2021 • 2 minutes to read
há dois tipos de tipo 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 as operações em uma variável afetem a outra
(exceto no caso do modificador ByRef nos 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:
Todos os tipos de dados numéricos
Boolean , Char ,e Date
Cada estrutura é um tipo de valor, mesmo que contenha membros de tipo de referência. por esse motivo, tipos
de valor como Char e Integer são implementados por estruturas .NET Framework.
Você pode declarar um tipo de valor usando a palavra-chave reservada, por exemplo, Decimal . Você também
pode usar a New palavra-chave para inicializar um tipo de valor. Isso é especialmente útil se o tipo tiver um
construtor que aceite parâmetros. Um exemplo disso é o Decimal(Int32, Int32, Int32, Boolean, Byte) Construtor,
que cria um novo Decimal valor a partir das partes fornecidas.
Tipos de referência
Um tipo de referência armazena uma referência a seus dados. Os tipos de referência incluem o seguinte:
String
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
27/09/2021 • 2 minutes to read
O processo de alterar um valor de um tipo de dados para outro tipo é chamado conversão. As conversões são
de alargamento ou estreitamento, dependendo das capacidades dos dados dos tipos envolvidos. Eles também
são implícitos ou explícitos, dependendo da sintaxe no código-fonte.
Nesta seção
Conversões de Widening e Narrowing
Explica as conversões classificadas por se o tipo de destino pode conter os dados.
Conversões implícitas e explícitas
discute as conversões classificadas por se Visual Basic as executa automaticamente.
Conversões entre cadeias de caracteres e outros tipos
Ilustra a conversão entre cadeias de caracteres e valores numéricos, Boolean ou de data/hora.
Como converter um objeto em outro tipo no Visual Basic
Mostra como converter uma Object variável em qualquer outro tipo de dados.
Conversões de matriz
Percorre o processo de conversão entre matrizes de tipos de dados diferentes.
Seções relacionadas
Data Types
apresenta os tipos de dados Visual Basic e descreve como usá-los.
Data Types
Lista os tipos de dados elementares fornecidos por Visual Basic.
Solução de problemas de tipos de dados
Discute alguns problemas comuns que podem surgir ao trabalhar com tipos de dados.
Conversões de Widening e Narrowing (Visual Basic)
27/09/2021 • 4 minutes to read
Uma consideração importante com uma conversão de tipo é se o resultado da conversão está dentro do
intervalo do tipo de dados de destino.
Uma conversão de ampliação altera um valor para um tipo de dados que pode permitir qualquer valor possível
dos dados originais. As conversões de alargamento preservam o valor de origem, mas podem alterar sua
representação. Isso ocorre 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 é convertido em um tipo
integral, e um tipo numérico sendo convertido em Boolean é reduzido para True ou False .
Conversões de expansão
A tabela a seguir mostra as conversões de alargamento padrão.
T IP O DE DA DO S A M P L IA O S T IP O S DE DA DO S 1
Double Double
Qualquer tipo enumerado (enum) Seu tipo integral subjacente e qualquer tipo ao qual o tipo
subjacente amplia.
T IP O DE DA DO S A M P L IA O S T IP O S DE DA DO S
Conversões de redução
As conversões redutoras padrão incluem o seguinte:
As direções inversas das conversões de ampliação na tabela anterior (exceto que cada tipo se amplia para
si mesmo)
Conversões em qualquer direção entre booliano e qualquer tipo numérico
Conversões de qualquer tipo numérico para qualquer tipo enumerado ( Enum )
Conversões em qualquer direção entre a cadeia de caracteres e qualquer tipo numérico, Boolean ou Data
Conversões de um tipo de dados ou tipo de objeto para um tipo derivado dele
As conversões redutoras nem sempre são bem sucedidas em tempo de execução e podem falhar ou incorrer em
perda de dados. Ocorrerá um erro se o tipo de dados de destino não puder receber o valor que está sendo
convertido. Por exemplo, uma conversão numérica pode resultar em um estouro. O compilador não permite
que você execute conversões estreitas implicitamente, a menos que a instrução Option Strict defina a opção de
verificação de tipo como Off .
NOTE
O erro de conversão de restrição é suprimido para conversões dos elementos em uma For Each…Next coleção para a
variável de controle de loop. Para obter mais informações e exemplos, consulte a seção "conversões redutoras" em para
cada... Próxima instrução.
Quando usar conversões redutoras
Você usa uma conversão de restrição quando sabe que o valor de origem pode ser convertido para o tipo de
dados de destino sem perda de dados ou erro. Por exemplo, se você tiver um String que você sabe que
contém "true" ou "false", poderá usar a CBool palavra-chave para convertê-lo em Boolean .
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)
27/09/2021 • 5 minutes to read
Uma conversão implícita não requer nenhuma sintaxe especial no código-fonte. no exemplo a seguir, Visual
Basic converte implicitamente o valor de k em um valor de ponto flutuante de precisão simples antes de
atribuí-lo ao q .
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. Visual Basic fornece várias palavras-
chave, que forçam uma expressão entre parênteses e o tipo de dados desejado. Essas palavras-chave atuam
como funções, mas o compilador gera o código embutido, portanto a execução é ligeiramente mais rápida do
que com uma chamada de função.
Na seguinte extensão do exemplo anterior, a CInt palavra-chave converte o valor de de q volta para um
inteiro antes de atribuí-lo a k .
Palavras-chave de conversão
A tabela a seguir mostra as palavras-chave de conversão disponíveis.
A função CType
A função CType opera em dois argumentos. A primeira é a expressão a ser convertida e a segunda é o tipo de
dados de destino ou a 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, geralmente sem gerar
uma chamada de função. Isso melhora o desempenho.
Para obter uma comparação de CType com as outras palavras-chave de conversão de tipo, consulte Operador
DirectCast e Operador TryCast.
Tipos elementares
O exemplo a seguir demonstra o uso de CType .
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á-lo para forçar uma classe de objeto para o tipo de uma de suas interfaces, como no
exemplo a seguir.
Tipos de matriz
CType também pode converter tipos de dados de matriz, como no exemplo a seguir.
NOTE
Os valores usados com uma palavra-chave de conversão devem ser válidos para o tipo de dados de destino ou ocorre um
erro. Por exemplo, se você tentar converter um Long para um Integer , o valor de Long deve estar dentro do
intervalo válido para o tipo de Integer dados.
Cau t i on
A especificação CType da conversão de um tipo de classe para outro falhará em tempo de execução se o tipo de
origem não for derivado do tipo de destino. Uma falha desse tipo gera uma InvalidCastException exceção.
No entanto, se um dos tipos for uma estrutura ou classe que você definiu, e se você tiver definido CType nessa
estrutura ou classe, uma conversão poderá ter sucesso se atender aos requisitos do seu CType . Consulte como:
definir um operador de conversão.
A execução de uma conversão explícita também é conhecida como conversão de uma expressão em um
determinado tipo de dados ou classe de objeto.
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)
27/09/2021 • 2 minutes to read
Você pode converter um valor numérico, Boolean ou de data/hora em um String . Você também pode
converter na direção inversa — de um valor de cadeia de caracteres para Numeric, Boolean ou Date – desde
que o conteúdo da cadeia de caracteres possa ser interpretado como um valor válido do tipo de dados de
destino. Se não puderem, ocorrerá um erro em tempo de execução.
As conversões para todas essas atribuições, em qualquer direção, são conversões redutoras. Você deve usar as
palavras-chave de conversão de tipo ( CBool , CByte , CDate ,,,, CDbl CDec CInt CLng , CSByte , CShort ,,,,,
CSng CStr CUInt CULng CUShort e CType ). As Format Val funções e oferecem controle adicional sobre
conversões entre cadeias de caracteres e números.
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, consulte como: definir um operador de
conversão.
quando Visual Basic converte uma cadeia de caracteres em um valor numérico, ele usa as configurações de
opções regionais especificadas no painel de controle Windows para interpretar o separador de milhar, o
separador decimal e o símbolo de moeda. Isso significa que uma conversão pode ter sucesso em uma
configuração, mas não em outra. Por exemplo, "$14.20" é aceitável na localidade inglês (Estados Unidos), mas
não em qualquer localidade em francês.
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
27/09/2021 • 2 minutes to read
Você converte uma Object variável em outro tipo de dados usando uma palavra-chave de conversão, como
Função CType.
Exemplo
O exemplo a seguir converte uma Object variável em Integer um e um String .
Se você sabe que o conteúdo de uma variável é de um tipo de dados específico, é melhor converter Object a
variável nesse tipo de dados. Se você continuar a usar a variável, incorre em boxing e unboxing (para um tipo de
valor) ou associação Object tardia (para um tipo de referência). Todas essas operações levam tempo de
execução extra e fazem com que seu desempenho seja mais lento.
Compilar o código
Este exemplo requer:
Uma referência ao System namespace.
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)
27/09/2021 • 2 minutes to read
Você pode converter um tipo de matriz em um tipo de matriz diferente, desde que atenda às seguintes
condições:
Classificação igual. As classificações das duas matrizes devem ser as mesmas, ou seja, devem ter o
mesmo número de dimensões. No entanto, os comprimentos das respectivas dimensões não precisam
ser os mesmos.
Tipo de dados do elemento. Os tipos de dados dos elementos de ambas as matrizes devem ser tipos
de referência. Não é possível converter uma Integer matriz em uma Long matriz ou até mesmo em
uma Object matriz, porque pelo menos um tipo de valor está envolvido. Para obter mais informações,
consulte tipos de valor e tipos de referência.
Conver tibilidade. Uma conversão, que pode ser ampliada ou estreita, deve ser possível entre os tipos
de elemento das duas matrizes. Um exemplo que falha esse requisito é uma tentativa de conversão entre
uma String matriz e uma matriz de uma classe derivada de [Link] . Esses dois tipos não têm
nada em comum, e não existe nenhuma conversão de nenhum tipo entre eles.
Uma conversão de um tipo de matriz para outro está ampliando ou estreitando dependendo se a conversão dos
respectivos elementos está ampliando ou diminuindo. Para obter mais informações, consulte Ampliando e
restringindo conversões.
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)
27/09/2021 • 2 minutes to read
Uma estrutura é uma generalização do tipo definido pelo usuário (UDT) compatível com as 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 tipos diferentes para criar uma estrutura. Uma estrutura associa um ou
mais elementos entre si e com a própria estrutura. Quando você declara uma estrutura, ela se torna um tipo de
dados composto e você pode declarar variáveis desse tipo.
As estruturas são úteis quando você deseja que uma única variável mantenha várias partes de informação
relacionadas. Por exemplo, talvez você queira manter o nome, a extensão do telefone e o salário de um
funcionário juntos. Você pode usar várias variáveis para essas informações ou pode definir uma estrutura e usá-
la para uma única variável Employee. A vantagem da estrutura fica aparente quando você tem muitos
funcionários e, portanto, muitas instâncias da variável.
Nesta seção
Como: Declarar uma estrutura
Mostra como declarar uma estrutura e seus elementos.
Variáveis de estrutura
Aborda a atribuição de uma estrutura a uma variável e o acesso a seus elementos.
Estruturas e outros elementos de programação
Resume como as estruturas interagem com matrizes, objetos, procedimentos e entre si.
Estruturas e classes
Descreve as semelhanças e diferenças entre estruturas e classes.
Seções relacionadas
Data Types
apresenta os tipos de dados Visual Basic e descreve como usá-los.
Data Types
Lista os tipos de dados elementares fornecidos por Visual Basic.
Como declarar uma estrutura (Visual Basic)
27/09/2021 • 2 minutes to read
Você inicia uma declaração de estrutura com a instrução Structuree a termina com a End Structure instrução .
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
compartilhamento não comum.
Você não pode inicializar nenhum dos elementos de estrutura na declaração de estrutura. Ao declarar que uma
variável é de um tipo de estrutura, você atribui valores aos elementos acessando-os por meio da variável .
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.
Para declarar uma estrutura
1. Crie as instruções iniciais e finais para a estrutura.
Você pode especificar o nível de acesso de uma estrutura usando a palavra-chave Public, Protected,
Friendou Private ou pode permitir que ela seja padrão para Public .
O campo no exemplo anterior é , o que significa que ele está inacessível fora da salary Private
estrutura, mesmo da classe que o contém. No entanto, giveRaise o procedimento é , Public portanto,
ele pode ser chamado de fora da estrutura. Da mesma forma, você pode salaryReviewTime aucarcar o
evento de fora da estrutura.
Além de variáveis, procedimentos e eventos, você também pode Sub definir constantes, procedimentos
e propriedades em uma Function estrutura. Você pode designar no máximo uma propriedade como a
propriedade padrão, desde que ela leva pelo menos um argumento. Você pode manipular um evento
com um procedimento Sub Compartilhado. Para obter mais informações, consulte Como declarar e
chamar uma propriedade padrão no Visual Basic.
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)
28/09/2021 • 2 minutes to read
Depois de criar uma estrutura, você pode declarar variáveis no nível de 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.
Agora você pode declarar variáveis desse tipo. A declaração a seguir ilustra isso.
NOTE
Em classes e módulos, as estruturas declaradas usando a instrução Dim usam o padrão de acesso público. Se você
pretende que uma estrutura seja privada, declare-a usando a palavra-chave Private.
[Link] = "486"
Dim tooOld As Boolean
If [Link] < #1/1/1992# Then tooOld = True
yourSystem = mySystem
Se um elemento de estrutura for um tipo de referência, como String uma matriz , ou , o ponteiro para os
dados será Object copiado. No exemplo anterior, se tivesse incluído uma variável de objeto, o exemplo anterior
teria copiado o ponteiro de para e uma alteração nos dados do objeto por meio de uma estrutura estaria em
vigor quando acessada por meio da outra systemInfo mySystem yourSystem 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
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)
27/09/2021 • 2 minutes to read
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.
NOTE
Você não pode inicializar nenhum dos elementos de estrutura na declaração de estrutura. Você pode atribuir valores
somente a elementos de uma variável que foi declarada como sendo de um tipo de estrutura.
Estruturas e matrizes
Uma estrutura pode conter uma matriz como um ou mais de seus elementos. O exemplo a seguir ilustra essa
situação.
Você acessa os valores de uma matriz dentro de uma estrutura da mesma maneira que acessa uma propriedade
em um objeto. O exemplo a seguir ilustra essa situação.
Você também pode declarar uma matriz de estruturas. O exemplo a seguir ilustra essa situação.
Siga as mesmas regras para acessar os componentes dessa arquitetura de dados. O exemplo a seguir ilustra
essa situação.
ReDim allSystems(5).diskDrives(3)
allSystems(5).CPU = "386SX"
allSystems(5).diskDrives(2) = "100M SCSI"
Estruturas e objetos
Uma estrutura pode conter um objeto como um ou mais de seus elementos. O exemplo a seguir ilustra essa
situação.
Protected Structure userInput
Public userName As String
Public inputForm As [Link]
Public userFileNumber As Integer
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.
O exemplo anterior passa a estrutura por referência, 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 tal modificação, passe-a por valor.
Você também pode retornar uma estrutura a partir de um Function procedimento. O exemplo a seguir ilustra
essa situação.
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
Variáveis de estrutura
Estruturas e classes
Instrução Structure
Estruturas e classes (Visual Basic)
27/09/2021 • 4 minutes to read
Visual Basic unifica a sintaxe para estruturas e classes, com o resultado que ambas as entidades suportam a
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 somente 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 têm membros, que podem incluir construtores, métodos, propriedades, campos, constantes,
enumerações, eventos e manipuladores de eventos.
Os membros de ambos podem ter níveis de acesso individualizados. Por exemplo, um membro pode ser
declarado Public e outro Private .
Ambos podem implementar interfaces.
Ambos podem ter construtores compartilhados, com ou sem parâmetros.
Ambos podem expor uma propriedade padrão, desde que essa propriedade adote pelo menos um
parâmetro.
Ambos podem declarar e autar eventos e ambos podem declarar delegados.
Diferenças
Estruturas e classes diferem nas seguintes particularidades:
Estruturas são tipos de valor; 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.
As estruturas usam alocação de pilha; as classes usam alocação de heap.
Todos os elementos de estrutura são por padrão; as variáveis de classe e as constantes são por padrão,
enquanto outros membros Public de classe são por Private Public padrão. Esse comportamento
para membros de classe fornece compatibilidade com o Visual Basic 6.0 de padrões.
Uma estrutura deve ter pelo menos uma variável não compartilhada ou um elemento de evento não
comum; uma classe pode estar completamente vazia.
Os elementos de estrutura não podem ser declarados como Protected ; os membros da classe podem.
Um procedimento de estrutura pode manipular eventos somente se for um procedimento
Compartilhado e somente por meio da instrução AddHandler ; qualquer procedimento de classe pode
manipular eventos, usando a palavra-chave Handles ou a Sub AddHandler instrução . Para obter mais
informações, consulte Eventos.
Declarações de variável de estrutura não podem especificar inicializadores ou tamanhos iniciais para
matrizes; declarações de variável de classe podem.
As estruturas herdam implicitamente da classe e não podem herdar de nenhum outro tipo; as classes
podem herdar de qualquer classe [Link] ou classe diferente de [Link] .
As estruturas não são herdáveis; classes são.
As estruturas nunca são encerradas, portanto, o CLR (Common Language Runtime) nunca chama o
método em nenhuma estrutura; as classes são encerradas pelo GC (coletor de lixo), que chama em uma
classe quando detecta que não há referências ativas Finalize Finalize restantes.
Uma estrutura não requer um construtor; uma classe faz isso.
As estruturas podem ter construtores não compartilhadas somente se eles usarem parâmetros; classes
podem ter com ou sem parâmetros.
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. Não é possível redefinir esse comportamento.
Instâncias e variáveis
Como as estruturas são tipos de valor, cada variável de estrutura é permanentemente vinculada 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:
Inicialização. Uma variável de estrutura inclui implicitamente uma inicialização dos elementos usando o
construtor sem parâmetros da estrutura. Portanto, Dim s As struct1 é equivalente a
Dim s As struct1 = New struct1() .
Atribuindo variáveis. Quando você atribui uma variável de estrutura a outra ou passa uma instância de
estrutura para um argumento de procedimento, os valores atuais de todos os elementos de variável são
copiados para a nova estrutura. Quando você atribui uma variável de objeto a outra ou passa uma
variável de objeto para um procedimento, somente o ponteiro de referência é copiado.
Atribuindo Nothing. Você pode atribuir o valor Nothing a uma variável de estrutura, mas a instância
continua sendo associada à variável . Você ainda pode chamar seus métodos e acessar seus elementos de
dados, embora os elementos variáveis sejam reinicializados pela atribuição.
Por outro lado, se você definir uma variável de objeto como , desassociará-a de qualquer instância de
classe e não poderá acessar nenhum membro por meio da variável até atribuir outra Nothing 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 apontando para a mesma instância.
No entanto, os elementos de estrutura são isolados em sua própria instância. As alterações em seus
valores não são refletidas em nenhuma outra variável de estrutura, mesmo em outras instâncias da
mesma Structure declaração.
Igualdade. O teste de igualdade de duas estruturas deve ser executado com um teste elemento a
elemento. Duas variáveis de objeto podem ser comparadas usando o Equals método . Equals indica se as
duas variáveis apontam para a mesma instância.
Confira também
Data Types
Tipos de dados compostos
Tipos de valor e tipos de referência
Estruturas
Solução de problemas de tipos de dados
Estruturas e outros elementos de programação
Objetos e classes
Tuplas (Visual Basic)
28/09/2021 • 11 minutes to read
A partir do Visual Basic 2017, a linguagem Visual Basic oferece suporte interno para tuplas que facilitam a
criação de tuplas e o acesso aos elementos das tuplas. Uma tupla é uma estrutura de dados leve que tem um
número específico e uma sequência de valores. Ao insinuar 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
Boolean valor, 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.
IMPORTANT
O suporte à tupla requer o ValueTuple tipo . Se o .NET Framework 4.7 não estiver instalado, você deverá adicionar o
pacote NuGet , que está disponível na [Link] NuGet Gallery. Sem esse pacote, você pode obter um erro de
compilação semelhante a " O tipo predefinido 'ValueTuple(Of,,,)' não está definido nem importado."
Por padrão, o nome de cada campo em uma tupla consiste na cadeia de caracteres junto com a posição de base
única do Item campo na tupla. Para essa tupla de 3, o Date campo é , o campo é e o campo é Item1 String
Item2 Boolean Item3 . O exemplo a seguir exibe os valores dos campos da tupla instaurada na linha de
código anterior
[Link]($"{holiday.Item1} is {holiday.Item2}" +
$"{If(holiday.Item3, ", a national holiday", [Link])}")
' Output: 7/4/2017 12:00:00 AM Is Independence Day, a national holiday
Os campos de uma Visual Basic tupla são leitura/gravação; depois de ter instautado 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.
holiday.Item1 = #01/01/2018#
holiday.Item2 = "New Year's Day"
[Link]($"{holiday.Item1} is {holiday.Item2}" +
$"{If(holiday.Item3, ", a national holiday", [Link])}")
' Output: 1/1/2018 12:00:00 AM Is New Year's Day, a national holiday
Como elementos e variáveis têm o mesmo nome, Visual Basic compilador pode inferir os nomes dos campos,
como mostra o exemplo a seguir.
Para habilitar nomes de elementos de tupla inferidos, você deve definir a versão do compilador Visual Basic a
ser usada no arquivo do projeto Visual Basic ( * .vbproj) :
<PropertyGroup>
<LangVersion>15.3</LangVersion>
</PropertyGroup>
O número de versão pode ser qualquer versão do Visual Basic compilador a partir da 15.3. Em vez de codificar
uma versão específica do compilador, você também pode especificar "Mais recente" como o valor de para
compilar com a versão mais recente do compilador Visual Basic instalado em LangVersion seu sistema.
Para obter mais informações, consulte definindo a versão Visual Basic linguagem .
Em alguns casos, o compilador 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:
O nome do candidato é o mesmo que o nome de um membro de tupla, como Item3 , Rest ou
ToString .
Atribuição e tuplas
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 true:
Os campos de origem e destino são do mesmo tipo.
Uma conversão de ampliação (ou implícita) do tipo de origem para o tipo de destino é definida.
Option Strict é On e uma conversão de restrição (ou explícita) do tipo de origem para o tipo de destino
é definida. Essa conversão poderá lançar uma exceção se o valor de origem estiver fora do intervalo do
tipo de destino.
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.
Considere estas variáveis usadas nos exemplos a seguir:
' The number and field types of all these tuples are compatible.
' The only difference Is the field names being used.
Dim unnamed = (42, "The meaning of life")
Dim anonymous = (16, "a perfect square")
Dim named = (Answer:=42, Message:="The meaning of life")
Dim differentNamed = (SecretConstant:=42, Label:="The meaning of life")
As duas primeiras variáveis, unnamed e , não têm nomes anonymous semânticos fornecidos para os campos.
Seus nomes de campo são o padrão Item1 e Item2 . As duas últimas variáveis e named têm nomes de campo
differentName semântico. Observe que essas duas tuplas têm nomes diferentes para os campos.
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:
' Despite the assignment, named still has fields that can be referred to as 'answer' and 'message'.
[Link]($"{[Link]}, {[Link]}")
' Output: 42, The meaning of life
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, embora o primeiro campo de seja um e o
primeiro conversion campo de seja um named Integer conversion Long . Essa atribuição é bem-sucedida
porque converter um Integer em um é uma Long conversão de ampliação.
' Assign an (Integer, String) tuple to a (Long, String) tuple (using implicit conversion).
Dim conversion As (Long, String) = named
[Link]($"{conversion.Item1} ({[Link]().Name}), " +
$"{conversion.Item2} ({[Link]().Name})")
' Output: 42 (Int64), The meaning of life (String)
Podemos retornar uma tupla da operação de análise se quebramos a chamada para o [Link] método em
nosso próprio método. No exemplo a seguir, [Link] chama o método e retorna uma
[Link] tupla nomeada com dois elementos.
Imports [Link]
Module Example
Sub Main()
Dim cityInfo = (name:="New York", area:=468.5, population:=8_550_405)
[Link]($"{cityInfo}, type {[Link]().Name}")
' Convert the .NET tuple back to a Visual Basic tuple and ensure they are the same.
Dim cityInfo2 = [Link](cityInfoT)
[Link]($"{cityInfo2}, type {[Link]().Name}")
[Link]($"{NameOf(cityInfo)} = {NameOf(cityInfo2)}: {[Link](cityInfo2)}")
[Link]()
End Sub
End Module
' The example displays the following output:
' (New York, 468.5, 8550405), type ValueTuple`3
' (New York, 468.5, 8550405), type Tuple`3
' (New York, 468.5, 8550405), type ValueTuple`3
' cityInfo = cityInfo2 : True
Confira também
Referência da linguagem Visual Basic
Uso eficiente de tipos de dados (Visual Basic)
27/09/2021 • 2 minutes to read
Variáveis e variáveis não declaradas sem um tipo de dados são atribuídas ao Object tipo de dados. Isso facilita
a gravação de programas rapidamente, mas pode fazer com que eles executem mais lentamente.
Digitação forte
Especificar tipos de dados para todas as suas variáveis é conhecido como digitação forte. O uso da 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 conforme digita o código.
Ele aproveita a verificação de tipo do compilador. Isso captura instruções que podem falhar em tempo de
operação devido a erros como estouro. Ele também captura chamadas para métodos em objetos que não
são suportados por eles.
Isso resulta na execução mais rápida do código.
Private x As Double
Protected s As String
Conversão de caracteres
As AscW funções ChrW e operam em Unicode. Você deve usá-los em preferência Asc para e , que devem ser
Chr traduzidos para 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)
27/09/2021 • 8 minutes to read
Esta página lista alguns problemas comuns que podem ocorrer quando você executa operações em tipos de
dados intrínsecos.
PA RA C O M PA RA R Q UA N T IDA DES DE P O N TO F L UT UA N T E
1. Calcule o valor absoluto de sua diferença usando o Abs método da classe no Math System namespace .
2. Determine uma diferença máxima aceitável, de forma que você possa considerar as duas quantidades como iguais para fins
práticos se a diferença não for maior.
3. Compare o valor absoluto da diferença com a diferença aceitável.
O exemplo anterior usa o método da estrutura para que ele possa especificar ToString Double uma precisão
melhor do que a CStr palavra-chave usa. O padrão é 15 dígitos, mas o formato "G17" o estende para 17
dígitos.
O exemplo anterior usa o método da estrutura para que ele possa especificar ToString Double uma precisão
melhor do que a CStr palavra-chave usa. O padrão é 15 dígitos, mas o formato "G17" o estende para 17
dígitos.
Como é , seu valor para 0,2 é uma fração binária infinitamente repetida com um valor armazenado
zeroPointTwo Double de 0,200000000000000001. Dividir 2,0 por essa quantidade gera
9,9999999999999999999995 com um restante de 0,1999999999999999999999991.
Na expressão para , o caractere de tipo literal força os dois decimalRemainder D operadores Decimal a e 0,2
tem uma representação precisa. Portanto, Mod o operador gera o restante esperado de 0,0.
Observe que não é suficiente declarar decimalRemainder como Decimal . Você também deve forçar os literais
para ou eles usam por padrão e recebem o mesmo valor Decimal Double decimalRemainder impreciso que
doubleRemainder .
Conversão no Framework
O ToInt32 método da classe no Convert System namespace é convertido em True +1.
Se você deve converter um Boolean valor em um tipo de dados numérico, tenha cuidado com qual método de
conversão você usa.
O exemplo a seguir demonstra atribuições malsucedida e bem-sucedidas de um literal para uma Char variável.
Sempre há um risco no uso de conversões de restrição, pois elas podem falhar em tempo de operação. Por
exemplo, uma conversão de String para poderá falhar se o valor Char String contiver mais de um caractere.
Portanto, é melhor programar para usar o caractere C de tipo.
NOTE
O erro de conversão de restrição é suprimido para conversões dos elementos em uma coleção para a For Each…Next
variável de controle de loop. Para obter mais informações e exemplos, consulte a seção "Conversões de restrição" em For
Each... Próxima instrução.
Restrição da proteção de conversão
A desvantagem de restringir conversões é que elas podem falhar em tempo de operação. Por exemplo, se uma
String variável contiver algo diferente de "True" ou "False", ela não poderá ser convertida em Boolean . Se ele
contiver caracteres de pontuação, a conversão em qualquer tipo numérico falhará. A menos que você saiba que
String sua variável sempre contém valores que o tipo de destino pode aceitar, você não deve tentar uma
conversão.
Se você deve converter de para outro tipo de dados, o procedimento mais seguro é incluir a tentativa de
String conversão em Try... Pegar... Instrução Finally. Isso permite lidar com uma falha de tempo de run-time.
Matrizes de caracteres
Um único Char e uma matriz de Char elementos, ambos ampliando para String . No entanto, String não
amplia para Char() . Para converter um String valor em Char uma matriz, você pode usar o ToCharArray
método da classe [Link] .
Valores sem sentido
Em geral, String os valores não são significativos em outros tipos de dados e a conversão é altamente artificial
e perigosa. Sempre que possível, você deve restringir o uso de String variáveis às sequências de caracteres
para as quais elas são projetadas. Você nunca deve escrever um código que se baseia em valores equivalentes
em outros tipos.
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
27/09/2021 • 2 minutes to read
Um elemento declarado é um elemento de programação que está definido em uma instrução de declaração.
Elementos declarados incluem variáveis, constantes, enumerações, classes, estruturas, módulos, interfaces,
procedimentos, parâmetros de procedimento, retornos de função, referências a procedimentos externos,
operadores, propriedades, eventos e delegados.
Instruções de declaração incluem os seguintes itens:
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
Descreve como nomear elementos e usar letras maiúsculas.
Características do Elemento Declarado
Aborda as características, como o escopo, possuídas por elementos declarados.
Referências a elementos declarados
Descreve como o compilador combina uma referência a uma declaração e como qualificar um nome.
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
Descreve as instruções que nomeiam e definem procedimentos, variáveis, matrizes e constantes.
Contextos de Declaração e Níveis de Acesso Padrão
Lista os tipos de elementos declarados e mostra para cada um sua instrução de declaração, em que contexto
você pode declará-lo e seu nível de acesso padrão.
Delegados (Visual Basic)
27/09/2021 • 5 minutes to read
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, Visual Basic delegados são um tipo de referência com
base na classe [Link] . 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. Visual Basic permite associar dinamicamente manipuladores de eventos a eventos criando um
delegado para você ao usar a AddHandler instrução . 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 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.
Você pode usar a forma mais simples de criar delegados em qualquer local que o compilador possa determinar
o tipo do delegado pelo contexto.
Isso é útil quando você deseja rotear vários eventos para o mesmo manipulador.
O exemplo a seguir mostra as expressões lambda e AddressOf usadas para especificar a referência para um
delegado.
Module Module1
Sub Main()
' Create an instance of InOrderClass and assign values to the properties.
' InOrderClass method ShowInOrder displays the numbers in ascending
' or descending order, depending on the comparison method you specify.
Dim inOrder As New InOrderClass
inOrder.Num1 = 5
inOrder.Num2 = 4
' Use AddressOf to send a reference to the comparison function you want
' to use.
[Link](AddressOf GreaterThan)
[Link](AddressOf LessThan)
Class InOrderClass
' Define the delegate function for the comparisons.
Delegate Function CompareNumbers(ByVal num1 As Integer, ByVal num2 As Integer) As Boolean
' Display properties in ascending or descending order.
Sub ShowInOrder(ByVal compare As CompareNumbers)
If compare(_num1, _num2) Then
[Link](_num1 & " " & _num2)
Else
[Link](_num2 & " " & _num1)
End If
End Sub
A assinatura da função deve corresponder a do tipo delegado. Para obter mais informações sobre expressões
lambda, consulte Expressões Lambda. Para obter mais exemplos de expressão lambda e atribuições AddressOf
aos delegados, consulte Conversão de delegado amena.
Tópicos Relacionados
T ÍT ULO DESC RIÇ Ã O
Como invocar um método delegado Fornece um exemplo que mostra como associar um método
a um delegado e depois invoca esse método por meio do
delegado.
Como passar procedimentos para outro procedimento no Demonstra como usar delegados para passar um
Visual Basic procedimento para outro.
Conversão de delegado reduzida Descreve como você pode atribuir assinaturas e funções a
delegados ou manipuladores mesmo quando as assinaturas
não são idênticas
o compilador Visual Basic executa um processo chamado binding quando um objeto é atribuído a uma variável
de objeto. Um objeto é associado inicialmente quando ele é atribuído a uma variável declarada como de um tipo
de objeto específico. Os objetos de associação inicial permitem que o compilador aloque memória e execute
outras otimizações antes que um aplicativo seja executado. Por exemplo, o seguinte fragmento de código
declara que uma variável é do tipo FileStream:
Uma vez que FileStream é um tipo de objeto específico, a instância atribuída a FS é associada no início.
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 :
' To use this example, you must have Microsoft Excel installed on your computer.
' Compile with Option Strict Off to allow late binding.
Sub TestLateBinding()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
xlApp = CreateObject("[Link]")
' Late bind an instance of an Excel workbook.
xlBook = [Link]
' Late bind an instance of an Excel worksheet.
xlSheet = [Link](1)
[Link]()
' Show the application.
[Link] = True
' Place some text in the second row of the sheet.
[Link](2, 2) = "This is column B row 2"
End Sub
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)
27/09/2021 • 2 minutes to read
No Visual Basic, os erros se enquadram em uma das três categorias: erros de sintaxe, erros de tempo de run 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 editor de códigos e alertará se você cometer
um erro, como digitar incorretamente uma palavra ou usar um elemento de linguagem incorretamente. Se você
compilar da linha de comando, 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.
NOTE
A Option Explicit instrução é um meio de evitar erros de sintaxe. Ele 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 capturados imediatamente e podem ser corrigidos.
Run-Time erros
Erros de tempo de executar são aqueles que aparecem somente depois que você compila e executar o código.
Eles envolvem código que pode parecer estar correto, já que não tem erros de sintaxe, mas que não serão
executados. Por exemplo, você pode escrever corretamente uma linha de código para abrir um arquivo. Mas se
o arquivo não existir, o aplicativo não poderá abrir o arquivo e lançará uma exceção. Você pode corrigir a
maioria dos erros em tempo de executar regravando o código com falha ou usando o tratamento de exceção e,
em seguida, recompilando e recompilando-o.
Erros lógicos
Erros lógicos são aqueles que aparecem quando o aplicativo está em uso. Geralmente, elas são suposições
incorretas feitas pelo desenvolvedor ou resultados indesejados ou inesperados em resposta às ações do
usuário. Por exemplo, uma chave com misto pode fornecer informações incorretas para um método ou você
pode supor que um valor válido sempre é fornecido a um método quando esse não é o caso. Embora erros
lógicos possam ser tratados usando o tratamento de exceção (por exemplo, testando se um argumento é e
lançando um ), geralmente eles devem ser resolvidos corrigindo o erro na lógica e Nothing
ArgumentNullException recompilando o aplicativo.
Confira também
Instrução Try...Catch...Finally
Noções básicas do depurador
Eventos (Visual Basic)
27/09/2021 • 7 minutes to read
Embora você possa visualizar um projeto Visual Studio como uma série de procedimentos que são executados
em uma sequência, na realidade, a maioria dos programas é controlada por eventos, o que significa que o fluxo
de execução é determinado por 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.
Acionar eventos
Um evento é como uma mensagem anunciando que algo importante ocorreu. O ato de transmitir a mensagem
é chamado para acionar o evento. No Visual Basic, você gera eventos com a RaiseEvent instrução , como no
exemplo a seguir:
RaiseEvent AnEvent(EventNumber)
Os eventos devem ser acionados dentro do escopo da classe, módulo ou estrutura na qual eles são declarados.
Por exemplo, uma classe derivada não pode acionar eventos herdados de uma classe base.
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.
Visual Basic usa uma convenção de nomenurização padrão para manipuladores de eventos que combina o
nome do remetente do evento, um sublinhado e o nome do evento. Por exemplo, o evento Click de um botão
chamado button1 seria nomeado Sub button1_Click .
NOTE
É recomendável que você use esta convenção de nomenclatura ao definir manipuladores de eventos para seus próprios
eventos, mas não é necessário. Você pode usar qualquer nome de sub-rotina válido.
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
A instrução WithEvents e a cláusula Handles geralmente são a melhor opção para manipuladores de eventos,
pois a sintaxe declarativa usada torna mais fácil a codificação, a leitura e a depuração para a manipulação de
eventos. No entanto, esteja ciente das seguintes limitações no uso de variáveis WithEvents :
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 estão vinculados a instâncias de classe, você não pode usar
WithEvents para lidar declarativamente com eventos compartilhados. 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.
Não é possível criar matrizes de variáveis WithEvents .
As variáveis WithEvents permitem que um único manipulador de eventos manipule um ou mais tipos de
evento, ou que um ou mais manipuladores de eventos manipulem o mesmo tipo de evento.
Embora a cláusula Handles seja a maneira padrão de associar um evento a um manipulador de eventos, ela é
limitada a associar eventos a manipuladores de eventos em tempo de compilação.
Em alguns casos, como com eventos associados a formulários ou controles, Visual Basic o stubs
automaticamente um manipulador de eventos vazio e o associa a um evento. Por exemplo, quando você clica
duas vezes em um botão de comando em um formulário no modo de design, o Visual Basic cria um
manipulador de eventos vazio e uma variável para o botão de comando, como no código a WithEvents seguir:
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 você adicione, remova e altere dinamicamente o manipulador de eventos
associado a um evento. Se quiser manipular eventos compartilhados ou eventos de uma estrutura, você deverá
usar AddHandler .
AddHandler leva dois argumentos: o nome de um evento de um remetente do evento, como um controle, e uma
expressão que avalia um delegado. Você não precisa especificar explicitamente a classe delegado ao usar
AddHandler , pois a instrução AddressOf sempre retorna uma referência ao delegado. O exemplo a seguir
associa um manipulador de eventos a um evento acionado por um objeto:
RemoveHandler , que desconecta um evento de um manipulador de eventos, usa a mesma sintaxe que
AddHandler . Por exemplo:
Sub Main()
Dim c1 As New Class1
' Associate an event handler with an event.
AddHandler [Link], AddressOf EventHandler1
' Call a method to raise the event.
[Link]()
' Stop handling the event.
RemoveHandler [Link], AddressOf EventHandler1
' Now associate a different event handler with the event.
AddHandler [Link], AddressOf EventHandler2
' Call a method to raise the event.
[Link]()
' Stop handling the event.
RemoveHandler [Link], AddressOf EventHandler2
' This event will not be handled.
[Link]()
End Sub
Sub EventHandler1()
' Handle the event.
MsgBox("EventHandler1 caught event.")
End Sub
Sub EventHandler2()
' Handle the event.
MsgBox("EventHandler2 caught event.")
End Sub
End Module
Instruções passo a passo: declarando e acionando eventos Fornece uma descrição passo a passo de como declarar e
acionar eventos para uma classe.
Como declarar eventos personalizados para evitar bloqueio Demonstra como definir um evento personalizado que
permite que seus manipuladores de eventos sejam
chamados assincronicamente.
Como declarar eventos personalizados para conservar Demonstra como definir um evento personalizado que utiliza
memória memória somente quando o evento é manipulado.
Solucionando problemas de manipuladores de eventos Lista problemas comuns que ocorrem com os manipuladores
herdados no Visual Basic de eventos em componentes herdados.
Criando manipuladores de eventos no Windows Forms Descreve como trabalhar com eventos associados aos
objetos do Windows Forms.
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 .
Em um namespace, as instruções de interface são Friend por padrão, mas também podem ser declaradas
explicitamente como Public ou Friend . As interfaces definidas em classes, em módulos, em interfaces e em
estruturas são Public por padrão, mas também podem ser explicitamente declaradas como Public , Friend ,
Protected ou Private .
NOTE
A palavra-chave Shadows pode ser aplicada a todos os membros de interface. A palavra-chave Overloads pode ser
aplicada às instruções Sub , Function e Property declaradas em uma definição de interface. Além disso, as instruções
Property podem ter os modificadores Default , ReadOnly ou WriteOnly . Nenhum dos outros modificadores (
Public , Private , Friend , Protected , Shared , Overrides , MustOverride ou Overridable ) são permitidos.
Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.
Por exemplo, o código a seguir define uma interface com uma função, uma propriedade e um evento.
Interface IAsset
Event ComittedChange(ByVal Success As Boolean)
Property Division() As String
Function GetID() As Integer
End Interface
Implementando interfaces
a palavra reservada Visual Basic Implements é usada de duas maneiras. A instrução Implements significa que
uma classe ou estrutura implementa uma interface. A palavra-chave Implements significa que um membro de
classe ou um membro da estrutura implementa um membro de interface específico.
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 uma classe. A classe ou a estrutura deve implementar todos
os membros da interface usando a palavra-chave Implements .
Palavra-chave Implements
A palavra-chave Implements exige uma lista dos membros de interface separados por vírgula a serem
implementados. Em geral, apenas um único membro de interface é especificado, mas você pode especificar
vários membros. A especificação de um membro de interface é composta pelo nome da interface, que deve ser
especificado em uma instrução implements na classe, um período e o nome da função, da propriedade ou do
evento do membro a ser implementado. O nome de um membro que implementa um membro de interface
pode usar qualquer identificador legal e não está limitado à InterfaceName_MethodName convenção usada em
versões anteriores do Visual Basic.
Por exemplo, o código a seguir mostra como declarar uma sub-rotina chamada Sub1 que implementa um
método de uma interface:
Class Class1
Implements interfaceclass.interface2
Você pode usar um membro particular para implementar um membro de interface. Quando um membro
particular implementa um membro de uma interface, esse membro fica disponível por meio da interface,
embora não esteja disponível diretamente em variáveis de objeto para a classe.
Exemplos de implementação de interface
As classes que implementam uma interface devem implementar todas as suas propriedades, métodos e
eventos.
O exemplo a seguir define duas interfaces. A segunda interface, Interface2 , herda Interface1 e define uma
propriedade e um método adicionais.
Interface Interface1
Sub sub1(ByVal i As Integer)
End Interface
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 ÍT ULO DESC RIÇ Ã O
Passo a passo: Criação e implementação de interfaces Fornece um procedimento detalhado que o guiará pelo
processo de definição e de implementação de sua própria
interface.
As interfaces descrevem as características das propriedades, métodos e eventos, mas deixam os detalhes de
implementação até estruturas ou classes.
Este tutorial demonstra como declarar e implementar uma interface.
NOTE
Este tutorial não fornece informações sobre como criar uma interface do usuário.
NOTE
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.
Implementação
Você pode observar que a sintaxe usada para declarar membros de interface é diferente da sintaxe usada para
declarar membros de classe. Essa diferença reflete o fato de que as interfaces não podem conter código de
implementação.
Para implementar a interface
1. Adicione uma classe chamada ImplementationClass adicionando a seguinte instrução a Module1 , após a
End Interface instrução, mas antes da End Module instrução, e pressione ENTER:
Class ImplementationClass
Implements TestInterface
Quando listado separadamente de outros itens na parte superior de uma classe ou estrutura, a
Implements instrução indica que a classe ou estrutura implementa uma interface.
A Implements instrução nomeia a interface e o membro de interface que está sendo implementado.
4. Conclua a definição de Prop1 adicionando um campo particular à classe que armazenou o valor da
propriedade:
Return pval
pval = value
Ao declarar testInstance como WithEvents ,a Form1 classe pode manipular seus eventos.
3. Adicione o seguinte manipulador de eventos à Form1 classe para manipular eventos gerados por
testInstance :
4. Adicione uma sub-rotina nomeada Test à Form1 classe para testar a classe de implementação:
Sub Test()
' Create an instance of the class.
Dim T As New ImplementationClass
' Assign the class instance to the interface.
' Calls to the interface members are
' executed through the class instance.
testInstance = T
' Set a property.
testInstance.Prop1 = 9
' Read the property.
MsgBox("Prop1 was set to " & testInstance.Prop1)
' Test the method and raise an event.
testInstance.Method1(5)
End Sub
O Test procedimento cria uma instância da classe que implementa MyInterface , atribui essa instância
ao testInstance campo, define uma propriedade e executa um método por meio da interface.
5. Adicione o código para chamar o Test procedimento a partir do Form1 Load procedimento de seu
formulário de inicialização:
6. Execute o Test procedimento pressionando F5. A mensagem "Prop1 foi definido como 9" é exibida.
Depois de clicar em OK, a mensagem "o parâmetro X para Method1 é 5" é exibido. Clique em OK e a
mensagem "o manipulador de eventos capturou o evento" é exibida.
Confira também
Instrução Implements
Interfaces
Instrução Interface
Instrução Event
LINQ no Visual Basic
27/09/2021 • 2 minutes to read
esta seção contém visões gerais, exemplos e informações de segundo plano que o ajudarão a entender e usar a
Visual Basic e a consulta de Language-Integrated (LINQ).
Nesta seção
Introdução a LINQ no Visual Basic
Fornece uma introdução aos provedores, operadores, estrutura de consulta e recursos de linguagem do LINQ.
Como consultar um banco de dados
Fornece um exemplo de como se conectar a um banco de dados do SQL Server e executar uma consulta usando
LINQ.
Como chamar um procedimento armazenado
Fornece um exemplo de como se conectar a um banco de dados do SQL Server e executar um procedimento
armazenado usando LINQ.
Como modificar dados em um banco de dados
Fornece um exemplo de como se conectar a um banco de dados do SQL Server e recuperar e modificar dados
usando o LINQ.
Como combinar dados com junções
Fornece exemplos de como associar dados de maneira semelhante a junções de banco de dados usando LINQ.
Como classificar resultados de consulta
Fornece um exemplo de como ordenar os resultados de uma consulta usando LINQ.
Como filtrar resultados de consulta
Fornece um exemplo de como incluir critérios de pesquisa em uma consulta usando LINQ.
Como contar, somar ou fazer média de dados
Fornece exemplos de como incluir funções agregadas para contar, somar ou fazer média de dados retornadas
de uma consulta usando LINQ.
Como localizar o valor mínimo ou máximo em um resultado de consulta
Fornece exemplos de como incluir funções agregadas para determinar os valores mínimo e máximo dos dados
retornados de uma consulta usando LINQ.
Como retornar um resultado de consulta LINQ como um tipo específico
Fornece um exemplo de como retornar os resultados de uma consulta LINQ como um tipo específico em vez de
um tipo anônimo.
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
27/09/2021 • 12 minutes to read
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 no Visual Basic, você trabalha constantemente com objetos. você pode usar objetos
fornecidos por Visual Basic, como controles, formulários e objetos de acesso a dados. você também pode usar
objetos de outros aplicativos dentro de 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.
Este tópico discute os objetos em detalhes.
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.
Criar um objeto com base em uma classe
1. Determine de qual classe você deseja criar um objeto ou defina sua própria classe. Por exemplo:
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.
3. Adicione a palavra-chave novo operador para inicializar a variável a uma nova instância da classe.
[Link] = lastAccountNumber + 1
NOTE
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.
Definir a propriedade faz alterações em outras variáveis internas ou nos valores de outras propriedades.
Um conjunto de etapas deve ser executado antes de a propriedade pode ser definida ou recuperada.
Use os campos quando:
O valor for de um tipo de validação automática. Por exemplo, um erro ou a conversão automática de
dados ocorrerá se um valor diferente de True ou False for atribuído a uma variável Boolean .
Qualquer valor no intervalo com suporte do tipo de dados é válido. Isso é verdadeiro para muitas
propriedades de tipo Single ou Double .
A propriedade é um tipo de dados String e não há restrição sobre o tamanho ou o valor da cadeia de
caracteres.
Para obter mais informações, consulte Procedimentos de propriedade.
TIP
Sempre mantenha os campos não constantes particulares. Quando você quiser torná-lo público, use uma propriedade em
vez disso.
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.
O exemplo a seguir demonstra o método Start de um objeto Timer.
2. Na instrução que acessa o membro, siga o nome da variável de objeto com o operador de acesso para
membro ( . ) e, em seguida, o nome do membro.
[Link]()
Se já tiver criado um objeto da classe, você também poderá acessar um membro Shared pela variável do
objeto.
Diferenças entre classes e módulos
A principal diferença entre classes e módulos é que as classes podem ser instanciadas como objetos enquanto
os módulos padrão não podem. Como há apenas uma cópia dos dados de um módulo padrão, quando uma
parte do seu programa altera uma variável pública em um módulo padrão, qualquer outra parte do programa
obtém o mesmo valor se ler essa variável. Em contraste, os dados do objeto existem separadamente para cada
objeto instanciado. Outra diferença é que, diferentemente dos módulos padrão, as classes podem implementar
interfaces. Se uma classe for marcada com o modificador MustInherit, ela não poderá ser instautada
diretamente. No entanto, ele ainda é diferente de um módulo, pois pode ser herdado enquanto os módulos não
podem ser herdados.
NOTE
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
[Link].
Por outro lado, os membros declarados dentro de um módulo são acessíveis publicamente por padrão e podem
ser acessados por qualquer código que pode acessar o módulo. Isso significa que variáveis em um módulo
padrão são variáveis globais efetivamente porque elas são visíveis de qualquer lugar em seu projeto e existem
durante a vida útil do programa.
No exemplo anterior, o primeiro Demonstrativo Esmaecido declara uma variável de objeto do tipo TimeZone e
atribui a ele um objeto TimeZone retornado pela propriedade CurrentTimeZone.
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 .
2. Siga a instrução Class imediatamente com uma instrução Inherits. Especifique a classe da qual a nova
classe deriva.
Inherits [Link]
Se você criar um objeto da classe , ele poderá acessar todos os membros da classe, bem como o método
e quaisquer outros novos membros ReversibleButton que você definir em Button ReverseColors
ReversibleButton .
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. Visual Basic dá suporte a uma sintaxe específica em For Each...
Próxima instrução que permite iterar 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
Passo a passo: definindo classes
Fornece uma descrição passo a passo de como criar uma classe.
Propriedades e métodos sobrecarregados
Propriedades e métodos sobrecarregados
Noções básicas de herança
Aborda modificadores de herança, substituindo métodos e propriedades, MyClass e MyBase.
Tempo de vida do objeto: como os objetos são criados e destruídos
Aborda a criação e descarte de instâncias de classe.
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.
Inicializadores de objeto: tipos nomeados e anônimos
Discute inicializadores de objeto, que são usados para criar instâncias de tipos nomeados e anônimos usando
uma única expressão.
Como inferir nomes de propriedade e tipos em declarações de tipo anônimo
Explica como inferir nomes e tipos de propriedade em declarações de tipo anônimo. Fornece exemplos de
inferência de tipos com e sem êxito.
Operadores e expressões no Visual Basic
27/09/2021 • 2 minutes to read
Um operador é um elemento de código que executa uma operação em um ou mais elementos de código que
retêm valores. Os elementos de valor incluem variáveis, constantes, literais, propriedades, valores retornados
dos procedimentos Function e Operator , bem como expressões.
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
Visual Basic fornece os seguintes tipos de operadores:
Os operadores aritméticos executam cálculos familiares em valores numéricos, incluindo a mudança dos
padrões de bit.
Os operadores de comparação comparam duas expressões e retornam um valor Boolean que representa
o resultado da comparação.
Os operadores de concatenação unem várias cadeias de caracteres em uma única cadeia.
Os operadores lógicos e bit a bit no Visual Basic combinam valores numéricos ou Boolean e retornam
um resultado do mesmo tipo de dados que os valores.
Os elementos de valor combinados com um operador são chamados operandos desse operador. Os operadores
combinados com elementos de valor formam expressões, exceto para o operador de atribuição, que forma uma
instrução. Para obter mais informações, consulte Instruções.
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.
15 * [Link](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.
x = 45 + y * z ^ 2
no exemplo anterior, Visual Basic executa as operações na expressão no lado direito do operador de atribuição (
= ), em seguida, atribui o valor resultante à variável à x esquerda. Não há nenhum limite prático para o
número de operadores que podem ser combinados em uma expressão, mas é necessário entender a
Precedência do operador no Visual Basic para assegurar que você obtenha os resultados esperados.
Confira também
Operadores
Combinação eficiente de operadores
Instruções
Procedimentos no Visual Basic
27/09/2021 • 3 minutes to read
Um procedimento é um bloco de Visual Basic instruções delimitadas por uma instrução de declaração (
Function , , , , , ) e uma declaração Sub Operator Get Set End correspondente. Todas as instruções
executáveis Visual Basic devem estar dentro de algum procedimento.
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 Statement, a instrução Exit Statement apropriada para o procedimento ou a
instrução End Statement <keyword> do procedimento. O controle, então, é transmitido para o código de
chamada, seguindo o ponto da chamada de procedimento.
Com um demonstrativo Return , o controle retorna imediatamente para o código de chamada. Os
demonstrativos que seguem o demonstrativo Return não são executados. Você pode ter mais de um
demonstrativo Return no mesmo procedimento.
Com um demonstrativo Exit Sub ou Exit Function , o controle retorna imediatamente para o código de
chamada. Os demonstrativos que seguem o demonstrativo Exit não são executados. Você pode ter
mais de um demonstrativo Exit no mesmo procedimento e mesclar os demonstrativos Return e Exit
no mesmo procedimento.
Se um procedimento não tiver nenhum demonstrativo Return ou Exit , ele será concluído com um
demonstrativo End Sub ou End Function , End Get ou End Set após o último demonstrativo do corpo
do procedimento. O demonstrativo End retorna o controle imediatamente para o código de chamada.
Você pode ter apenas um demonstrativo End em um 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
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.
Os procedimentos de manipulação de eventos são procedimentos Sub que são executados em resposta
a um evento gerado por uma ação do usuário ou por uma ocorrência em um programa.
Os procedimentos Function retornam um valor para o código de chamada. Eles podem executar outras
ações antes de retornar.
Algumas funções escritas em C# devolvem um valor retornado de referência. Os chamadores da função
podem modificar o valor retornado, e essa modificação é refletida no estado do objeto de chamada.
Começando com o Visual Basic 2017, o código do Visual Basic pode consumir valores retornados de
referência, embora não possa retornar um valor por referência. Para obter mais informações, consulte
Reference return values (Valores retornados de referência).
Os procedimentos de propriedade retornam e atribuem valores de propriedades em objetos ou módulos.
Os procedimentos de operador definem o comportamento de um operador padrão quando um ou
ambos os operandos são uma classe ou estrutura definida recentemente.
Os procedimentos genéricos no Visual Basic definem um ou mais parâmetros de tipo, além de seus
parâmetros normais, para que o código de chamada possa transmitir tipos de dados específicos cada vez
que faz uma 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
27/09/2021 • 13 minutes to read
Uma instrução Visual Basic é uma instrução completa. Ele pode conter palavras-chave, operadores, variáveis,
constantes e expressões. Cada instrução pertence a uma das seguintes categorias:
Instruções de declaração , que nomeia uma variável, constante ou procedimento e também pode
especificar um tipo de dados.
Instruções executáveis , que iniciam ações. Essas instruções podem chamar um método ou função e
podem fazer loop ou ramificar por meio de blocos de código. Instruções executáveis incluem Instruções
de Atribuição , que atribuem um valor ou uma expressão a uma variável ou constante.
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.
O exemplo a seguir contém três declarações.
A primeira declaração é a Sub instrução . Junto com sua End Sub instrução correspondente, ele declara um
procedimento chamado applyFormat . Ele também especifica que applyFormat é , o que significa que qualquer
código que possa se referir a ele pode Public chamá-lo.
A segunda declaração é a instrução , que declara a constante , especificando o tipo de Const dados e um valor
de limit Integer 33.
A terceira declaração é a Dim instrução , que declara a variável thisWidget . O tipo de dados é um objeto
específico, ou seja, um objeto criado a partir da Widget classe . Você pode declarar uma variável como de
qualquer tipo de dados elementar ou de qualquer tipo de objeto exposto no aplicativo que você está usando.
Valores iniciais
Quando o código que contém uma instrução de declaração é executado, Visual Basic reserva a memória
necessária para o elemento declarado. Se o elemento contém um valor, Visual Basic inicializa-o com o valor
padrão para 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.
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
declare-a usando a palavra-chave Novo Operador, como ilustra o exemplo a seguir.
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 um 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.
O exemplo a seguir usa uma If...Then...Else estrutura de controle para executar diferentes blocos de código
com base no valor de uma variável. Em cada bloco de código, um For...Next loop executa um número
especificado de vezes.
A If instrução no exemplo anterior verifica o valor do parâmetro clockwise . Se o valor for True , ele
chamará spinClockwise o método de aWidget . Se o valor for False , ele chamará spinCounterClockwise o
método de aWidget . A If...Then...Else estrutura de controle termina com End If .
O For...Next loop dentro de cada bloco chama o método apropriado um número de vezes igual ao valor do
parâmetro revolutions .
Instruções de atribuição
As instruções de atribuição realizam operações de atribuição, que consistem em pegar o valor no lado direito do
operador de atribuição ( ) e armazenar no elemento à esquerda, como no exemplo = a seguir.
v = 42
x = y + z + FindResult(3)
O exemplo anterior adiciona o valor mantido na variável ao valor mantido na variável e, em seguida, adiciona o
valor retornado pela y z chamada à função findResult . O valor total dessa expressão é armazenado na
variável x .
Tipos de dados em instruções de atribuição
Além de valores numéricos, o operador de atribuição também pode atribuir String valores, como ilustra o
exemplo a seguir.
Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.
Você também pode atribuir Boolean valores usando um literal ou uma expressão, como ilustra o exemplo a
Boolean Boolean seguir.
Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.
Da mesma forma, você pode atribuir valores apropriados aos elementos de programação do Char tipo de
dados , ou Date Object . Você também pode atribuir uma instância de objeto a um elemento declarado como
da classe da qual essa instância é criada.
Instruções de atribuição composta
As instruções de atribuição composta primeiro executam uma operação em uma expressão antes de atribuí-la a
um elemento de programação. O exemplo a seguir ilustra um desses operadores, , que incrementa o valor da
variável no lado esquerdo do operador pelo valor da expressão += à direita.
n += 1
n = n + 1
Uma variedade de operações de atribuição composta pode ser executada usando operadores desse tipo. Para
obter uma lista desses operadores e obter mais informações sobre eles, consulte Operadores de atribuição.
O operador de atribuição de concatenação ( ) é útil para adicionar uma cadeia de caracteres ao final de cadeias
de caracteres já existentes, como ilustra o exemplo &= a seguir.
Dim q As String = "Sample "
q &= "String"
' q now contains "Sample String".
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.
Return [Link](delimiter)(position)
End Function
Após uma chave aberta ( ) ou antes { de uma chave de fechamento ( } ). Por exemplo:
Para obter mais informações, consulte Inicializadores de objeto: tipos nomeados e anônimos ou
Inicializadores de coleção.
Após uma expressão inserida aberta ( ) ou antes do fechamento de uma <%= expressão inserida ( ) em
um literal %> XML. Por exemplo:
[Link] =
"SELECT * FROM Titles JOIN Publishers " &
"ON [Link] = [Link] " &
"WHERE [Link] = 'CA'"
Dim memoryInUse =
[Link] +
[Link] -
[Link] -
[Link]
If TypeOf inStream Is
[Link] AndAlso
inStream IsNot
Nothing Then
ReadFile(inStream)
End If
Dim fileStream =
[Link].
OpenTextFileReader(filePath)
No entanto, você deve incluir um caractere de continuação de linha ( _ ) após um caractere qualificador
de membro quando você estiver usando a With instrução ou fornecendo valores na lista de inicialização
para um tipo. Considere quebrar a linha após o operador de atribuição (por exemplo, = ) quando você
estiver usando With instruções ou listas de inicialização de objeto. Por exemplo:
' Not allowed:
' Dim aType = New With { .
' PropertyName = "Value"
' Allowed:
Dim aType = New With {.PropertyName =
"Value"}
' Allowed:
With log
.Source =
"Application"
End With
Para obter mais informações, consulte com... Terminar com inicializadores de instrução ou de objeto: tipos
nomeados e anônimos.
Após um qualificador de propriedade de eixo XML ( . ou .@ ou ... ). No entanto, você deve incluir
um caractere de continuação de linha ( _ ) quando você especificar um qualificador de membro quando
estiver usando a With palavra-chave. Por exemplo:
<
Serializable()
>
Public Class Customer
Public Property Name As String
Public Property Company As String
Public Property Email As String
End Class
For Each p In
vsProcesses
Como: Quebrar e combinar instruções no código Mostra como dividir uma única instrução em várias linhas e
como posicionar várias instruções na mesma linha.
Esta seção descreve os conceitos básicos por trás do uso de cadeias de caracteres Visual Basic.
Nesta seção
Introdução a cadeias de caracteres no Visual Basic
Lista tópicos que descrevem os conceitos básicos por trás do uso de cadeias de caracteres Visual Basic.
Como criar cadeias de caracteres usando StringBuilder no Visual Basic
Demonstra como criar de maneira eficiente uma cadeia de caracteres longa com base em várias cadeias
menores.
Como pesquisar em uma cadeia de caracteres
Demonstra como determinar o índice da primeira ocorrência de uma subcadeia de caracteres.
Convertendo entre cadeias de caracteres e outros tipos de dados no Visual Basic
Lista os tópicos que descrevem como converter cadeias de caracteres em outros tipos de dados.
Validando cadeias de caracteres no Visual Basic
Lista os tópicos sobre como validar cadeias de caracteres.
Instruções passo a passo: criptografando e descriptografando cadeias de caracteres no Visual Basic
Demonstra como criptografar e descriptografar cadeias de caracteres usando a versão do provedor de serviços
de criptografia do algoritmo DES triplo.
Confira também
Recursos da linguagem do Visual Basic
Variáveis no Visual Basic
28/09/2021 • 2 minutes to read
Geralmente, você precisa armazenar valores ao executar cálculos com 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
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.
NOTE
O sinal de igual ( = ) no exemplo é um operador de atribuição e não um operador de igualdade. O valor é atribuído à
variável applesSold .
Para obter mais informações, consulte Como inserir e remover dados de uma variável.
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
27/09/2021 • 2 minutes to read
o Visual Basic fornece suporte a idiomas integrados que permite interagir com LINQ to XML.
Nesta seção
os tópicos nesta seção introduzem o uso de LINQ to XML com Visual Basic.
TÓ P IC O DESC RIÇ Ã O
Visão geral de LINQ to XML no Visual Basic descreve como Visual Basic dá suporte a LINQ to XML.
Criando XML no Visual Basic Descreve como criar objetos XML literais usando LINQ to
XML.
Manipulando XML no Visual Basic Descreve como carregar e analisar XML usando o Visual
Basic.
Acessando XML no Visual Basic descreve as propriedades do eixo xml e os métodos de LINQ
to XML para acessar elementos e atributos xml.
Confira também
[Link]
Literais XML
Propriedades do eixo XML
LINQ to XML
Interoperabilidade COM (Visual Basic)
27/09/2021 • 2 minutes to read
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
Fornece uma visão geral da interoperabilidade COM.
Como referenciar objetos COM no Visual Basic
Aborda como adicionar referências a objetos COM que têm bibliotecas de tipos.
Como: Trabalhar com controles ActiveX
Demonstra como usar controles de ActiveX existentes para adicionar recursos à Visual Studio Toolbox.
Passo a passo: Fazer chamadas de APIs do Windows
Orienta o processo de chamada às APIs que fazem parte do sistema operacional Windows.
Como: Chamar APIs do Windows
Demonstra como definir e chamar a função MessageBox em [Link].
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.
Instruções passo a passo: criando objetos COM com o Visual Basic
Orienta o processo de criação de objetos COM com e sem o modelo de classe COM.
Solução de problemas de Interoperabilidade
Aborda alguns dos problemas que você pode encontrar ao usar o COM.
Interoperabilidade COM em aplicativos .NET Framework
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
Descreve os serviços de interoperabilidade fornecidos pelo Common Language Runtime.
Expondo componentes do COM para o .NET Framework
Descreve o processo de chamada de tipos COM por meio da interoperabilidade COM.
Expondo componentes do .NET Framework para COM
Descreve a preparação e o uso de tipos gerenciados do COM.
Aplicando atributos de interoperabilidade
Aborda os atributos que você pode usar ao trabalhar com código não gerenciado.
Introdução à interoperabilidade COM (Visual Basic)
27/09/2021 • 3 minutes to read
O Component Object Model (COM) permite que um objeto exponha sua funcionalidade a outros componentes
e hospede aplicativos. Embora os objetos COM tenham sido fundamentais para Windows programação por
muitos anos, os aplicativos projetados para o CLR (Common Language Runtime) oferecem muitas vantagens.
.NET Framework aplicativos eventualmente substituirão aqueles desenvolvidos por COM. Até lá, talvez seja
preciso usar ou criar objetos COM usando Visual Studio. A interoperabilidade com a interoperabilidade COM ou
COM permite que você use objetos COM existentes durante a transição para o .NET Framework em seu próprio
ritmo.
Usando o .NET Framework para criar componentes COM, você pode usar a interop COM sem registro. Isso
permite controlar qual versão de DLL está habilitada quando mais de uma versão é instalada em um
computador e permite que os usuários finais usem XCOPY ou FTP para copiar seu aplicativo para um diretório
apropriado no computador em que ele pode ser executado. Para obter mais informações, consulte Interop COM
sem registro.
Assemblies
Um assembly é o bloco de construção primário de um .NET Framework aplicativo. É uma coleção de
funcionalidades criadas, com versão e implantadas como uma única unidade de implementação que contém um
ou mais arquivos. Cada assembly contém um manifesto do assembly.
Interop Assemblies
Assemblies de interop são .NET Framework assemblies que fazem a ponte entre código gerenciado e não
gerenciado, mapeando membros de objeto COM para membros .NET Framework membros gerenciados
equivalentes. Assemblies de interoperabilidade criados pelo Visual Basic .NET lidam com muitos dos detalhes de
trabalhar com objetos COM, como marshaling de interoperabilidade.
Marshaling de interoperabilidade
Todos .NET Framework aplicativos 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 de retorno de objetos COM às vezes usam tipos de dados que diferem daqueles usados no código
gerenciado. Marshaling de interoperabilidade é o processo de empacotamento de parâmetros e retorno de
valores em tipos de dados equivalentes à medida que eles se movem para e de objetos COM. Para obter mais
informações, consulte Marshaling de interop.
Confira também
COM Interop
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
[Link] (Importador de Biblioteca de Tipos)
[Link] (Exportador da Biblioteca de Tipos)
Realizando marshaling de interoperabilidade
Interoperabilidade COM sem registro
Como fazer referência a objetos COM a partir do
Visual Basic
27/09/2021 • 2 minutes to read
No Visual Basic, adicionar referências a objetos COM que têm bibliotecas de tipos requer a criação de um
assembly de interop para a biblioteca COM. As referências aos membros do objeto COM são roteadas para o
assembly de interop e, em seguida, encaminhadas para o objeto COM real. As respostas do objeto COM são
roteadas para o assembly de interop e encaminhadas para seu .NET Framework aplicativo.
Você pode referenciar um objeto COM sem usar um assembly de interop incorporando as informações de tipo
para o objeto COM em um assembly do .NET. Para inserir informações de tipo, de definir Embed Interop Types a
propriedade como para a referência ao objeto True COM. Se você estiver compilando usando o compilador de
linha de comando, use a /link opção para referenciar a biblioteca COM. Para obter mais informações, consulte
-link (Visual Basic).
Visual Basic automaticamente cria assemblies de interop quando você adiciona uma referência a uma biblioteca
de tipos do IDE (ambiente de desenvolvimento integrado). Ao trabalhar na linha de comando, você pode usar o
utilitário Tlbimp para criar manualmente assemblies de interop.
Para adicionar referências a objetos COM
1. No menu Project, escolha Adicionar Referência e clique na guia COM na caixa de diálogo.
2. Selecione o componente que você deseja usar na lista de objetos COM.
3. Para simplificar o acesso ao assembly de interop, adicione uma instrução à parte superior da classe ou
módulo no qual Imports você usará o objeto COM. Por exemplo, o exemplo de código a seguir importa
o namespace INKEDLib para objetos referenciados na Microsoft InkEdit Control 1.0 biblioteca.
Imports INKEDLib
Class Sample
Private s As IInkCursor
End Class
Você pode usar tlbimp para criar assemblies de interop para bibliotecas de tipo, mesmo para objetos
COM não registroados. No entanto, os objetos COM referenciados por assemblies de interop devem ser
registrados corretamente no computador em que devem ser usados. Você pode registrar um objeto COM
usando o utilitário Regsvr32 incluído no Windows operacional.
Confira também
COM Interop
[Link] (Importador de Biblioteca de Tipos)
[Link] (Exportador da 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)
27/09/2021 • 2 minutes to read
ActiveX controles são componentes OU objetos COM 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
ActiveX controles desenvolvidos para o Visual Basic 6.0 e versões anteriores para adicionar recursos à Caixa de
Ferramentas do Visual Studio.
Para adicionar ActiveX controles à caixa de ferramentas
1. No menu Ferramentas , clique em Escolher Itens da Caixa de Ferramentas .
A caixa de diálogo Escolher Caixa de Ferramentas é exibida.
2. Clique na guia Componentes COM.
3. Marque a caixa de seleção ao lado do ActiveX que você deseja usar e clique em OK.
O novo controle aparece com as outras ferramentas na Caixa de Ferramentas .
NOTE
Você pode usar o utilitário Aximp para criar manualmente um assembly de interop para ActiveX controles. Para
obter mais informações, [Link] (Windows Forms ActiveX Importador de Controle).
Confira também
COM Interop
Como adicionar controles do ActiveX ao Windows Forms
[Link] (Windows importador de ActiveX 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)
27/09/2021 • 9 minutes to read
Windows as APIs são bibliotecas de vínculo dinâmico (DLLs) que fazem parte do sistema operacional Windows.
Você os usa para executar tarefas quando é difícil escrever procedimentos equivalentes de sua preferência. por
exemplo, Windows fornece uma função chamada FlashWindowEx que permite que você crie a barra de título
para um aplicativo alternativo entre tons leves e escuros.
a vantagem de usar Windows APIs no seu código é que elas podem economizar tempo de desenvolvimento
porque contêm dezenas de funções úteis que já foram gravadas e aguardando para serem usadas. a
desvantagem é que Windows APIs podem ser difíceis de trabalhar e unforgiving quando as coisas dão errado.
Windows As APIs representam uma categoria especial de interoperabilidade. Windows As APIs não usam
código gerenciado, não têm bibliotecas de tipos internas e usam tipos de dados diferentes daqueles usados com
Visual Studio. devido a essas diferenças, e como as apis de Windows não são objetos COM, a interoperabilidade
com Windows APIs e a .NET Framework é executada usando a invocação de plataforma, ou PInvoke. A invocação
de plataforma é um serviço que permite que o código gerenciado chame funções não gerenciadas
implementadas em DLLs. Para obter mais informações, consulte consumindo funções de dll não gerenciadas.
você pode usar o PInvoke em Visual Basic usando a Declare instrução ou aplicando o DllImport atributo a um
procedimento vazio.
Windows as chamadas à API eram uma parte importante da programação de Visual Basic no passado, mas
raramente são necessárias com o Visual Basic .net. sempre que possível, você deve usar código gerenciado do
.NET Framework para executar tarefas, em vez de chamadas Windows API. este tutorial fornece informações
para as situações em que é necessário usar Windows APIs.
NOTE
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.
NOTE
para obter informações completas sobre as APIs de Windows, consulte a documentação do sdk do Win32 na API
de Windows do sdk da plataforma. para obter mais informações sobre as constantes que Windows APIs usam,
examine os arquivos de cabeçalho, como o Windows. h incluído com o Platform SDK.
2. abra um novo projeto de aplicativo Windows clicando em novo no menu arquivo e, em seguida,
clicando em Project . A caixa de diálogo Novo Projeto aparecerá.
3. selecione Windows aplicativo na lista de modelos de projeto de Visual Basic. O novo projeto é exibido.
4. Adicione a seguinte Declare função à classe ou ao módulo no qual você deseja usar a dll:
NOTE
as versões anteriores do Visual Basic permitiam a você declarar parâmetros As Any , o que significa que os dados de
qualquer tipo de dados poderiam ser usados. Visual Basic requer que você use um tipo de dados específico para todas as
Declare instruções.
3. Adicione instruções equivalentes Const à sua classe ou módulo para tornar essas constantes disponíveis
para seu aplicativo. Por exemplo:
P a ra c h a ma r o p ro c e d i me n t o d e DL L
1. Adicione um botão chamado Button1 ao formulário de inicialização para seu projeto e clique duas vezes
nele para exibir seu código. O manipulador de eventos para o botão é exibido.
2. Adicione código ao Click manipulador de eventos para o botão que você adicionou, para chamar o
procedimento e fornecer os argumentos apropriados:
3. Execute o projeto pressionando F5. A caixa de mensagem é exibida com os botões Sim e não de
resposta. Clique em um deles.
Marshaling de dados
Visual Basic converte automaticamente os tipos de dados de parâmetros e valores de retorno para chamadas de
API de Windows, mas você pode usar o MarshalAs atributo para especificar explicitamente os tipos de dados
não gerenciados esperados por uma API. Para obter mais informações sobre o marshaling de
interoperabilidade, consulte marshaling interop.
P a r a u sa r d e c l a r e e M a r sh a l A s e m u m a c h a m a d a à A P I
1. Determine o nome da função que você deseja chamar, além de seus argumentos, tipos de dados e valor
de retorno.
2. Para simplificar o acesso ao MarshalAs atributo, adicione uma Imports instrução à parte superior do
código para a classe ou módulo, como no exemplo a seguir:
Imports [Link]
3. Adicione um protótipo de função para a função importada à classe ou módulo que você está usando e
aplique o MarshalAs atributo aos parâmetros ou ao valor de retorno. No exemplo a seguir, uma chamada
à API que espera que o tipo void* seja empacotada como AsAny :
Imports [Link]
6. Declare uma função vazia que precede a End Class instrução do formulário e nomeie a função MoveFile
.
7. aplique os Public Shared modificadores e à declaração de função e defina parâmetros para MoveFile
com base nos argumentos que a função Windows API usa:
Sua função pode ter qualquer nome de procedimento válido; o DllImport atributo especifica o nome na
dll. ele também manipula o marshaling de interoperabilidade para os parâmetros e valores de retorno, de
modo que você pode escolher Visual Studio tipos de dados semelhantes aos tipos de dados usados pela
API.
8. Aplique o DllImport atributo à função Empty. O primeiro parâmetro é o nome e o local da DLL que
contém a função que você está chamando. você não precisa especificar o caminho para os arquivos
localizados nos diretórios do sistema Windows. o segundo parâmetro é um argumento nomeado que
especifica o nome da função na API Windows. Neste exemplo, o DllImport atributo força as chamadas a
serem MoveFile encaminhadas para MoveFileW no [Link]. O MoveFileW método copia um
arquivo do caminho src para o caminho dst .
10. Crie um arquivo chamado [Link] e coloque-o no diretório C:\Tmp em seu disco rígido. Crie o diretório
Tmp, se necessário.
11. Pressione F5 para iniciar o aplicativo. O formulário principal é exibido.
12. Clique em Botão2 . 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
COM Interop
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)
27/09/2021 • 2 minutes to read
Este exemplo define e chama a função em [Link] e, em MessageBox seguida, passa uma cadeia de caracteres
para ela.
Exemplo
' Defines the MessageBox function.
Public Class Win32
Declare Auto Function MessageBox Lib "[Link]" (
ByVal hWnd As Integer, ByVal txt As String,
ByVal caption As String, ByVal Type As Integer
) As Integer
End Class
Compilar o código
Este exemplo requer:
Uma referência ao System namespace.
Programação robusta
As seguintes condições podem causar uma exceção:
O método não é estático, é abstrato ou foi definido anteriormente. O tipo pai é uma interface ou o
comprimento do nome ou dllName é zero. (ArgumentException)
O nome ou dllName é Nothing . (ArgumentNullException)
O tipo recipiente foi criado anteriormente usando CreateType . (InvalidOperationException)
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
COM Interop
Como chamar uma função do Windows que use
tipos não assinados (Visual Basic)
27/09/2021 • 2 minutes to read
Se você estiver consumindo uma classe, módulo ou estrutura que tem membros de tipos inteiros não assinados,
poderá acessar esses membros com Visual Basic.
para chamar uma função Windows que usa um tipo sem sinal
1. Use uma instrução Declare para informar Visual Basic qual biblioteca contém a função, qual nome está
nessa biblioteca, qual é a sequência de chamada e como converter cadeias de caracteres ao chamá-la.
2. Na Declare instrução, use UInteger ,, ULong UShort ou Byte conforme apropriado para cada
parâmetro com um tipo não assinado.
3. consulte a documentação da função Windows que você está chamando para localizar os nomes e os
valores das constantes que ele usa. Muitos deles são definidos no arquivo WinUser. h.
4. Declare as constantes necessárias no seu código. muitas Windows constantes são valores não assinados
de 32 bits e você deve declará-las As UInteger .
5. Chame a função da maneira normal. o exemplo a seguir chama a função Windows MessageBox , que usa
um argumento inteiro sem sinal.
Cau t i on
Os UInteger tipos de dados,, e ULong não fazem UShort SByte parte da independência de linguagem e
dos componentes de Language-Independent (CLS), portanto, o código em conformidade com CLS não
pode consumir um componente que os utilize.
IMPORTANT
fazer uma chamada para código não gerenciado, como a API (interface de programação de aplicativo) Windows,
expõe seu código a possíveis riscos de segurança.
IMPORTANT
chamar a API de Windows requer permissão de código não gerenciado, o que pode afetar sua execução em
situações de confiança parcial. Para obter mais informações, consulte SecurityPermission e permissões de acesso
ao código.
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
27/09/2021 • 4 minutes to read
ao criar novos aplicativos ou componentes, é melhor criar assemblies de .NET Framework. no entanto, Visual
Basic também facilita a exposição de um componente de .NET Framework para com. Isso permite que você
forneça novos componentes para conjuntos de aplicativos anteriores que exigem componentes COM. este
tutorial demonstra como usar Visual Basic para expor .NET Framework objetos como objetos com, com e sem o
modelo de classe com.
A maneira mais fácil de expor objetos COM é usando o modelo de classe COM. Esse modelo cria uma nova
classe e, em seguida, configura seu projeto para gerar a classe com uma camada de interoperabilidade como
um objeto COM e registrá-la no sistema operacional.
NOTE
embora você também possa expor uma classe criada em Visual Basic como um objeto com para que o código não
gerenciado use, ele não é um objeto com verdadeiro e não pode ser usado por Visual Basic. para obter mais informações,
consulte interoperabilidade COM em aplicativos .NET Framework.
NOTE
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.
4. No menu Ferramentas , clique em Criar GUID . Na caixa de diálogo Criar GUID , clique em Formato
do Registro e clique em Copiar . Clique em Sair .
5. Substitua a cadeia de caracteres vazia do ClassId pelo GUID, removendo as chaves à esquerda e à
direita. Por exemplo, se o GUID fornecido pelo Guidgen for "{2C8B0AEE-02C9-486e-B809-C780A11530FE}" ,
seu código deverá aparecer da seguinte maneira.
6. Repita as etapas anteriores para as InterfaceId EventsId constantes e, como no exemplo a seguir.
NOTE
Certifique-se de que os GUIDs são novos e exclusivos; caso contrário, o componente COM pode entrar em
conflito com outros componentes COM.
8. As classes COM devem ter um construtor sem parâmetros Public Sub New() ou a classe não será
registrada corretamente. Adicione um construtor sem parâmetros à classe:
NOTE
os objetos com que você gera com Visual Basic não podem ser usados por outros aplicativos 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
#Region diretiva
Interoperabilidade COM em aplicativos .NET Framework
Solução de problemas de Interoperabilidade
Solucionando problemas de interoperabilidade
(Visual Basic)
27/09/2021 • 10 minutes to read
ao interoperar entre COM e o código gerenciado do .NET Framework, você pode encontrar um ou mais dos
seguintes problemas comuns.
Marshaling de interoperabilidade
À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 você pode ter que controlar os
tipos de dados que são usados quando objetos gerenciados são expostos a COM. por exemplo, estruturas em
bibliotecas de classes devem especificar o BStr tipo não gerenciado em cadeias de caracteres enviadas a
objetos COM criados por Visual Basic 6,0 e versões anteriores. Nesses casos, você pode usar o
MarshalAsAttribute atributo para fazer com que os tipos gerenciados sejam expostos como tipos não
gerenciados.
Métodos sobrecarregados
embora você possa criar métodos sobrecarregados com Visual Basic, eles não têm suporte do COM. Quando
uma classe que contém métodos sobrecarregados é exposta como um objeto COM, novos nomes de método
são gerados para os métodos sobrecarregados.
Por exemplo, considere uma classe que tem duas sobrecargas do Synch método. Quando a classe é exposta
como um objeto COM, os novos nomes de método gerados podem ser Synch e Synch_2 .
A renomeação pode causar dois problemas para os consumidores do objeto COM.
1. Os clientes podem não esperar os nomes de métodos gerados.
2. Os nomes de métodos gerados na classe exposta como um objeto COM podem ser alterados quando
novas sobrecargas são adicionadas à classe ou sua classe base. Isso pode causar problemas de controle
de versão.
Para resolver os dois problemas, dê a cada método um nome exclusivo, em vez de usar sobrecarga, ao
desenvolver objetos que serão expostos como objetos COM.
No entanto, se você estiver usando a classe COM como a base para uma classe derivada, deverá usar a classe
Interop que representa a classe COM, como no código a seguir:
Class DerivedCommand
Inherits [Link]
End Class
NOTE
Os assemblies de interoperabilidade implementam implicitamente interfaces que representam classes COM. Você não
deve tentar usar a Implements instrução para implementar essas interfaces ou um erro será resultado.
Dim db As [Link]
' Open the database.
Set db = [Link]("C:\[Link]")
' Use the database object.
Visual Basic .net 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 Shared palavra-chave pode ser usada quando você deseja garantir
que apenas uma instância da classe seja criada.
Sub DAOOpenRecordset()
Dim db As [Link]
Dim rst As [Link]
Dim fld As [Link]
' Open the database.
db = [Link]("C:\[Link]")
ADODBConnect()
End Sub
' This is the event handler for the cn_ConnectComplete event raised
' by the [Link] object when a database is opened.
Dim x As Integer = 6
Dim y As Integer = 0
Try
x = CInt(x / y) ' Attempt to divide by zero.
' This procedure would fail silently without exception handling.
Catch ex As Exception
MsgBox("There was an error: " & [Link])
End Try
End Sub
Este exemplo gera um erro como esperado. No entanto, se você tentar o mesmo exemplo sem o
Try...Catch...Finally bloco, o erro será ignorado como se você tiver usado a OnError Resume Next instrução.
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 manipulação de exceção em
manipuladores de eventos que manipulam eventos de objetos COM.
Noções básicas sobre erros de interoperabilidade COM
Sem tratamento de erros, as chamadas de interoperabilidade geralmente geram erros que fornecem pouca
informação. Sempre que possível, use o tratamento de erros estruturado para fornecer mais informações sobre
problemas quando eles ocorrerem. Isso pode ser especialmente útil quando você depura aplicativos. Por
exemplo:
Try
' Place call to COM object here.
Catch ex As Exception
' Display information about the failed call.
End Try
Você pode encontrar informações como a descrição do erro, HRESULT e a fonte de erros COM examinando o
conteúdo do objeto de exceção.
Se você não tiver acesso ao código-fonte para o procedimento que está sendo chamado, poderá forçar a
propriedade a ser passada por valor adicionando um conjunto extra de colchetes em volta do procedimento de
chamada. por exemplo, em um projeto que tem uma referência ao objeto COM da biblioteca do Microsoft
ActiveX Data Objects 2,8, você pode usar:
Quando você quiser usar objetos COM e .NET Framework objetos no mesmo aplicativo, precisará resolver as
diferenças em como os objetos existem na memória. Um .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ãomanageda e não é esperado mover para
outro local de memória. 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,
consulte 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 do código nãomanagedo por meio do COM.
Os links nesta página fornecem detalhes sobre as interações entre objetos COM e .NET Framework dados.
Seções relacionadas
A RT IGO DESC RIÇ Ã O
Interoperação com código não gerenciado Descreve brevemente alguns dos problemas de interação
entre código gerenciado e não gerenciado e fornece links
para estudo posterior.
COM Wrappers Discute wrappers que podem ser chamado em runtime, que
permitem que o código gerenciado chame métodos COM e
wrappers que podem ser chamado com COM, que permitem
que os clientes COM chamem métodos de objeto .NET.
Interoperabilidade COM avançada Fornece links para tópicos que abrangem interoperabilidade
COM em relação a wrappers, exceções, herança, threading,
eventos, conversões e marshaling.
[Link] (Importador de Biblioteca de Tipos) Discute a ferramenta que você pode usar para converter as
definições de tipo encontradas em uma biblioteca de tipos
COM em definições equivalentes em um assembly do
Common Language Runtime.
Instruções passo a passo: implementando a herança
com objetos COM (Visual Basic)
27/09/2021 • 6 minutes to read
Você pode derivar Visual Basic classes de classes em objetos COM, mesmo aquelas criadas Public em versões
anteriores do Visual Basic. As propriedades e métodos de classes herdadas 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 Visual Basic 6.0 para criar um objeto COM que contém uma classe
e, em seguida, usá-lo como uma classe base.
NOTE
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.
Function AddNumbers(
ByVal SomeNumber As Integer,
ByVal AnotherNumber As Integer) As Integer
10. Crie e registre o objeto COM clicando em Fazer [Link] no menu Arquivo.
NOTE
Embora você também possa expor uma classe criada com 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 .NET Framework Aplicativos.
Interop Assemblies
No procedimento a seguir, você criará um assembly de interop, que atua como uma ponte entre o código não
gerenciado (como um objeto COM) e o código gerenciado Visual Studio usa. O assembly de Visual Basic que o
Visual Basic cria lida com muitos dos detalhes de trabalhar com objetos COM, como marshaling de interop, o
processo de empacotamento de parâmetros e valores de retorno em tipos de dados equivalentes conforme eles
se movem de e para objetos COM. A referência no aplicativo Visual Basic aponta para o assembly de interop,
não para o objeto COM real.
Para usar um objeto COM com Visual Basic 2005 e versões posteriores
1. Abra um novo projeto de aplicativo do Windows Visual Basic.
2. No menu Projeto , clique em Adicionar Referência .
A caixa de diálogo Adicionar Referência é exibida.
3. Na guia COM, clique duas vezes ComObject1 na lista Nome do Componente e clique em OK.
4. No menu Projeto , clique em Adicionar Novo Item .
A caixa de diálogo Adicionar novo item é exibida.
5. No painel Modelos, clique em Classe .
O nome do arquivo padrão, [Link] , aparece no campo Nome. Altere esse campo para [Link]
e clique em Adicionar . Isso cria uma classe chamada MathClass e exibe seu código.
6. Adicione o código a seguir à parte superior de MathClass para herdar da classe COM.
' The inherited class is called MathFunctions in the base class,
' but the interop assembly appends the word Class to the name.
Inherits [Link]
' This method overloads the method AddNumbers from the base class.
Overloads Function AddNumbers(
ByVal SomeNumber As Integer,
ByVal AnotherNumber As Integer) As Integer
A nova classe herda as propriedades da classe base no objeto COM, sobrecarrega um método e define um novo
método para estender a classe.
Para testar a classe herdada
1. Adicione um botão ao formulário de inicialização e clique duas vezes nele para exibir seu código.
2. No procedimento de manipulador de eventos do botão, adicione o seguinte código para criar uma
instância do Click e chamar os métodos MathClass sobrecarregados:
Confira também
Interoperabilidade COM em aplicativos .NET Framework
Instrução Inherits
Tipo de Dados Short
Referência da linguagem Visual Basic
27/09/2021 • 2 minutes to read
Esta seção fornece informações de referência para vários aspectos da linguagem Visual Basic dados.
Nesta seção
Convenções tipográficas e de código
Resume a maneira como as palavras-chave, os espaço reservados e outros elementos da linguagem são
formatados na documentação Visual Basic dados.
Membros da Biblioteca de Runtime do Visual Basic
Lista as classes e os módulos do namespace [Link], com links para as funções, os métodos, as
propriedades, as constantes e as enumerações dos seus membros.
Palavras-chave
Lista todas as palavras-chave do Visual Basic e fornece links para mais informações.
Atributos (Visual Basic)
Documenta os atributos disponíveis no Visual Basic.
Constantes e enumerações
Documenta as constantes e enumerações disponíveis em Visual Basic.
Data Types
Documenta os tipos de dados disponíveis no Visual Basic.
Diretivas
Documenta as diretivas do compilador disponíveis no Visual Basic.
Funções
Documenta as funções de tempo de Visual Basic.
Modificadores
Lista os modificadores de tempo de execução do Visual Basic e fornece links para mais informações.
Módulos
Documenta os módulos disponíveis no Visual Basic e seus membros.
Nothing
Descreve o valor padrão de qualquer tipo de dados.
Objetos
Documenta os objetos disponíveis em Visual Basic e seus membros.
Operadores
Documenta os operadores disponíveis no Visual Basic.
Propriedades
Documenta as propriedades disponíveis no Visual Basic.
Consultas
Fornece informações de referência sobre como Language-Integrated linq (consulta de dados) em seu código.
Instruções
Documenta a declaração e as instruções executáveis disponíveis em Visual Basic.
Marcações de Comentário XML
Descreve os comentários de documentação para os quais o IntelliSense é fornecido no editor Visual Basic
código.
Propriedades do eixo XML
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
Fornece uma lista de Visual Basic mensagens de erro de tempo de Visual Basic e tempo de executar e ajuda
sobre como lidar com elas.
Seções relacionadas
Compilador de linha de comando do Visual Basic
Descreve como usar o compilador de linha de comando como uma alternativa à compilação de programas de
dentro do IDE (ambiente Visual Studio de desenvolvimento integrado).
selecione a versão do idioma do Visual Basic
27/09/2021 • 2 minutes to read
o compilador de Visual Basic usa como padrão a versão principal mais recente do idioma que foi lançado. 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.
Essa funcionalidade separa a decisão de instalar novas versões do SDK e das ferramentas no ambiente de
desenvolvimento da decisão de incorporar novas funcionalidades da linguagem em um projeto. Instale o último
SDK e as últimas ferramentas no computador de build. Cada projeto pode ser configurado para usar uma
versão específica da linguagem de seu build.
Há três maneiras de definir a versão do idioma:
Editar manualmente seu arquivo . vbproj
Definir a versão de idioma para vários projetos em um subdiretório
Configurar a -langversion opção do compilador
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
o valor latest usa a versão secundária mais recente do idioma de Visual Basic. Os valores válidos são:
VA LO R SIGN IF IC A DO
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.
<Project>
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
</Project>
agora, as compilações em cada subdiretório do diretório que contém esse arquivo usarão Visual Basic sintaxe da
versão 15,5. Para obter mais informações, confira o artigo sobre como personalizar o build.
Convenções tipográficas
EXEM P LO DESC RIÇ Ã O
Instrução Module Os links que você pode clicar para ir para outra página de
Ajuda são formatados, conforme mostrado neste exemplo.
{ Public | Friend | Private } Na sintaxe , quando você deve fazer uma escolha entre dois
ou mais itens, os itens são entre chaves e separados por
barras verticais.
Convenções de código
EXEM P LO DESC RIÇ Ã O
sampleString = "Hello, world!" Exemplos de código aparecem em uma fonte de tom fixo e
são formatados conforme mostrado neste exemplo.
A instrução anterior define o valor sampleString de como Elementos de código em texto explicativo aparecem em uma
"Olá, mundo!" fonte de tom fixo, conforme mostrado neste exemplo.
Confira também
Visual Basic Referência de linguagem
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
28/09/2021 • 2 minutes to read
Classe [Link]
Add
Clear
Contains
Count
GetEnumerator
Item[]
Remove
Classe [Link]
ClassID
EventID
InterfaceID
InterfaceShadows
Classe [Link]
Back
Cr
CrLf
FormFeed
Lf
NewLine
NullChar
Quote
Tab
VerticalTab
Classe [Link]
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 [Link]
ErrorToString
Fix
Hex
Int
Oct
Str
Val
Módulo [Link]
DateAdd
DateDiff
DatePart
DateSerial
DateString
DateValue
Day
Hour
Minute
Month
MonthName
Now
Second
TimeOfDay
Timer
TimeSerial
TimeString
TimeValue
Today
Weekday
WeekdayName
Year
Classe [Link]
Clear
Description
Erl
GetException
HelpContext
HelpFile
LastDllError
Number
Raise
Raise
Módulo [Link]
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
Print
PrintLine
Rename
Reset
RmDir
Seek
SetAttr
SPC
TAB
Unlock
Write
WriteLine
Módulo [Link]
DDB
FV
IPmt
IRR
MIRR
NPer
NPV
Pmt
PPmt
PV
Rate
SLN
SYD
Módulo [Link]
ScriptEngine
ScriptEngineBuildVersion
ScriptEngineMajorVersion
ScriptEngineMinorVersion
Classe [Link]
HideModuleNameAttribute
Módulo [Link]
Erl
Err
IsArray
IsDate
IsDBNull
IsError
IsNothing
IsNumeric
IsReference
LBound
QBColor
RGB
SystemTypeName
TypeName
UBound
VarType
VbTypeName
Módulo [Link]
AppActivate
Beep
CallByName
Choose
Command
CreateObject
DeleteSetting
Environ
GetAllSettings
GetObject
GetSetting
IIf
InputBox
MsgBox
Partition
SaveSetting
Shell
Switch
Classe [Link]
CreateMethod
DefaultInstanceAlias
DisposeMethod
MyGroupName
Módulo [Link]
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 [Link]
Bounds
Length
Classe [Link]
Length
Módulo [Link]
Randomize
Rnd
Confira também
Constantes e enumerações
Palavras-chave
Palavras-chave (Visual Basic)
27/09/2021 • 4 minutes to read
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.
NOTE
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 Constraint
Class Privacidade
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 Privacidade
End <keyword>
EndIf
Enum
Erase
Error
Event
Exit
False
Finally
Friend
Function
Get
GetType
GetXMLNamespace
Global
GoSub
GoTo
Handles
If
If()
Implements
Implements Privacidade
Imports (Namespace e tipo do .NET)
Imports (Namespace XML)
In
In (Modificador genérico)
Inherits
Integer
Interface
Is
IsNot
Let
Lib
Like
Long
Loop
Me
Mod
Module
Module Privacidade
MustInherit
MustOverride
MyBase
MyClass
NameOf
Namespace
Narrowing
New Constraint
New Operador
Next
Nothing
NotInheritable
NotOverridable
Object
Of
On
Operator
Option
Optional
Or
OrElse
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 Constraint
Structure Privacidade
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
<<
<<=
NOTE
EndIf, GoSub , Variant e Wend são retidos como palavras-chave reservadas, embora não sejam mais usadas em
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.
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 ÍT ULO DESC RIÇ Ã O
Resumo de Matrizes Lista os elementos de linguagem que são usados para criar,
definir e usar matrizes.
Resumo do Objeto de Coleção Lista os elementos de linguagem que são usados para
coleções.
Resumo do Fluxo de Controle Lista as instruções que são usadas para o loop e para
controlar o fluxo do procedimento.
Resumo da Conversão Lista as funções que são usadas para converter números,
datas, horas e cadeias de caracteres.
Resumo de Tipos de Dados Lista os tipos de dados. Também lista as funções que são
usadas para converter entre tipos de dados e verificar os
tipos de dados.
Resumo de datas e horas Lista os elementos de linguagem que são usados para datas
e horas.
Resumo de Declarações e Constantes Lista as instruções que são usadas para declarar variáveis,
constantes, classes, módulos e outros elementos de
programação. Também lista elementos de linguagem que
são usados para obter informações de objeto, manipular
eventos e implementar herança.
Resumo de diretórios e arquivos Lista as funções que são usadas para controlar o sistema de
arquivos e processar os arquivos.
Resumo Financeiro Lista as funções que são usadas para executar cálculos
financeiros.
Resumo de entrada e saída Lista as funções que são usadas para ler e gravar arquivos,
gerenciar arquivos e imprimir resultados.
Informações e resumo da interação Lista as funções que são usadas para executar outros
programas, obter os argumentos de linha de comando,
manipular objetos COM, recuperar informações de cores e
usar as caixas de diálogo de controle.
T ÍT ULO DESC RIÇ Ã O
Resumo de matemática Lista as funções que são usadas para executar cálculos
trigonométricos e outros cálculos matemáticos.
Resumo do Registro Lista as funções que são usadas para ler, salvar e excluir
configurações de programa.
Resumo de manipulação da cadeia de caracteres Lista as funções que são usadas para manipular cadeias de
caracteres.
Confira também
Membros da Biblioteca de Runtime do Visual Basic
Resumo de matrizes (Visual Basic)
27/09/2021 • 2 minutes to read
Visual Basic palavras-chave de linguagem e membros da biblioteca em tempo de run-time são organizados por
finalidade e uso.
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo do objeto de coleção (Visual Basic)
27/09/2021 • 2 minutes to read
as palavras-chave do idioma Visual Basic e os membros da biblioteca de tempo de execução são organizados
por finalidade e uso.
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo do fluxo de controle (Visual Basic)
28/09/2021 • 2 minutes to read
Visual Basic palavras-chave de linguagem e membros da biblioteca em tempo de executar são organizados por
finalidade e uso.
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo da conversão (Visual Basic)
27/09/2021 • 2 minutes to read
Visual Basic palavras-chave de linguagem e membros da biblioteca em tempo de executar são organizados por
finalidade e uso.
Converta um tipo de dados em outro. CBool, CByte, CDate, CDbl, CDec, CInt, CLng, CSng, CShort,
CStr, CType, Fix , , Int
Converta data em dia, mês, dia da semana ou ano. Day, Month, Weekday, Year
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de tipos de dados (Visual Basic)
27/09/2021 • 2 minutes to read
Visual Basic palavras-chave de linguagem e membros da biblioteca em tempo de executar são organizados por
finalidade e uso.
Converter entre tipos de dados CBool, CByte, CChar, CDate, CDbl , CDec, CInt, CLng, CObj,
CShort, CSng, CStr, , Fix ,Int
Definir tipos de dados intrínsecos Boolean, Byte, Char, Date, Decimal, Double, Integer, Long,
Object, Short, Single, String
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de datas e horas (Visual Basic)
27/09/2021 • 2 minutes to read
as palavras-chave do idioma Visual Basic e os membros da biblioteca de tempo de execução são organizados
por finalidade e uso.
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de declarações e constantes (Visual Basic)
27/09/2021 • 2 minutes to read
as palavras-chave do idioma Visual Basic e os membros da biblioteca de tempo de execução são organizados
por finalidade e uso.
Declare uma classe, um delegado, uma enumeração, um Classe, delegar, Enumeração, módulo, namespace, estrutura
módulo, um namespace ou uma estrutura.
Obter informações sobre um objeto. GetType, IsArray , IsDate ,,, IsDBNull IsError IsNothing ,
IsNumeric , IsReference , SystemTypeName , TypeName ,
VarType , VbTypeName
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de diretórios e arquivos (Visual Basic)
27/09/2021 • 2 minutes to read
Visual Basic palavras-chave de linguagem e membros da biblioteca em tempo de executar são organizados por
finalidade e uso.
O uso do recurso oferece maior produtividade e desempenho em operações de My E/S de arquivo do que o
uso desses membros. Para obter mais informações, consulte FileSystem.
AÇÃO EL EM EN TO L A N GUA GE
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)
27/09/2021 • 2 minutes to read
Visual Basic palavras-chave de linguagem e membros da biblioteca em tempo de run-time são organizados por
finalidade e uso.
Intercepte erros durante o tempo de operação. Em Caso de Erro, Retomar, Experimentar... Pegar... Por fim,
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo financeiro (Visual Basic)
28/09/2021 • 2 minutes to read
Visual Basic palavras-chave de linguagem e membros da biblioteca em tempo de run-time são organizados por
finalidade e uso.
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Informações e resumo da interação (Visual Basic)
27/09/2021 • 2 minutes to read
as palavras-chave do idioma Visual Basic e os membros da biblioteca de tempo de execução são organizados
por finalidade e uso.
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de entrada e saída (Visual Basic)
27/09/2021 • 2 minutes to read
as palavras-chave do idioma Visual Basic e os membros da biblioteca de tempo de execução são organizados
por finalidade e uso.
Obtêm Informações sobre um arquivo. EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc,
LOF, Seek
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo de matemática (Visual Basic)
27/09/2021 • 2 minutes to read
as palavras-chave do idioma Visual Basic e os membros da biblioteca de tempo de execução são organizados
por finalidade e uso.
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)
27/09/2021 • 2 minutes to read
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 [Link] objeto. Você pode acessar as funções matemáticas intrínsecas
adicionando Imports [Link] ao seu arquivo ou projeto.
F UN Ç Ã O EQ UIVA L EN T ES DERIVA DO S
Cosseno inverso (ACOS (x)) ATAN (-x/sqrt (-x * x + 1)) + 2 * ATAN (1)
Secante inversa (ASEC (x)) 2 * ATAN (1) – ATAN (sinal (x)/sqrt (x * x – 1))
Tangente hiperbólica (TANH (x)) (Exp (x) – exp (-x))/(exp (x) + exp (-x))
Cotangente hiperbólica (coth (x)) (Exp (x) + exp (-x))/(exp (x) – exp (-x))
Cossecante hiperbólica inversa (Acsch (x)) Log ((sinal (x) * sqrt (x * x + 1) + 1)/x)
O My recurso torna a programação mais rápida e fácil, fornecendo acesso intuitivo a métodos, propriedades e
eventos comumente usados. Esta tabela lista os objetos contidos no My e as ações que podem ser executadas
com cada um.
AÇÃO O B JETO
Acessando informações e serviços do aplicativo. O objeto [Link] consiste nas seguintes classes:
Confira também
Visão geral do modelo de aplicativo do Visual Basic
Desenvolvimento com My
Resumo de operadores (Visual Basic)
27/09/2021 • 2 minutes to read
as palavras-chave do idioma Visual Basic e os membros da biblioteca de tempo de execução são organizados
por finalidade e uso.
Aritmético ^, –, * , / , \ , Mod, + , =
Concatenação &, +
Confira também
Palavras-chave
Membros da Biblioteca de Runtime do Visual Basic
Resumo do registro (Visual Basic)
27/09/2021 • 2 minutes to read
Visual Studio palavras-chave de linguagem e membros da biblioteca em tempo de run-time são organizados
por finalidade e uso.
O uso do recurso fornece maior produtividade e desempenho em operações My do Registro do que esses
elementos. Para obter mais informações, consulte RegistryProxy.
AÇÃO EL EM EN TO L A N GUA GE
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)
27/09/2021 • 2 minutes to read
as palavras-chave do idioma Visual Basic e os membros da biblioteca de tempo de execução são organizados
por finalidade e uso.
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)
27/09/2021 • 2 minutes to read
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 nome do módulo. A tabela a
seguir lista os atributos usados pelo Visual Basic.
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)
28/09/2021 • 3 minutes to read
Visual Basic fornece várias constantes e enumerações predefinidos para desenvolvedores. Constantes
armazenam valores que permanecem constantes durante a execução de um aplicativo. Enumerações fornecem
uma maneira conveniente para trabalhar com conjuntos de constantes relacionadas e para associar valores de
constante a nomes.
Constantes
Constantes de compilação condicional
A tabela a seguir lista as constantes predefinida disponíveis para compilação condicional.
Enumerações
A tabela a seguir lista e descreve as enumerações fornecidas pelo Visual Basic.
Confira também
Visual Basic Referência de linguagem
Visão geral de constantes
Visão geral de enumerações
Resumo do tipo de dados (Visual Basic)
27/09/2021 • 3 minutes to read
a tabela a seguir mostra os tipos de dados Visual Basic, seus tipos de Common Language Runtime de suporte,
sua alocação de armazenamento nominal e seus intervalos de valor.
4.94065645841246544 e-
324 a
1.79769313486231570 E +
308 † para valores positivos
1.401298 e-45 a
3.4028235 E + 38 † para
valores positivos
Definido pelo usuário (herda de ValueType ) Depende da implementação Cada membro da estrutura
(estrutura) da plataforma tem um intervalo
determinado por seu tipo
de dados e independente
dos intervalos dos outros
membros
†Em notação científica, "E" refere-se a uma potência de 10. Portanto, 3.56 E + 2 significa 3,56 x 102 ou 356 E
3.56 e-2 significa 3,56/102 ou 0, 356.
NOTE
Para cadeias de caracteres que contêm texto, use a StrConv função para converter de um formato de texto para outro.
Além de especificar um tipo de dados em uma instrução de declaração, você pode forçar o tipo de dados de
alguns elementos de programação usando um caractere de tipo. Consulte caracteres de tipo.
Consumo de memória
Quando você declara um tipo de dados elementar, não é seguro supor que seu consumo de memória é o
mesmo que sua alocação de armazenamento nominal. Isso se deve às seguintes considerações:
Armazenamento Design. O Common Language Runtime pode atribuir armazenamento com base nas
características atuais da plataforma na qual seu aplicativo está sendo executado. Se a memória estiver
quase cheia, ela poderá empacotar seus elementos declarados o mais próximo possível. Em outros casos,
ele pode alinhar seus endereços de memória a limites de hardware naturais para otimizar o desempenho.
Largura da plataforma. Armazenamento atribuição em uma plataforma de 64 bits é diferente da
atribuição em uma plataforma de 32 bits.
Tipos de dados compostos
As mesmas considerações se aplicam a cada membro de um tipo de dados composto, como uma estrutura ou
uma matriz. Você não pode depender simplesmente de adicionar as alocações de armazenamento nominal dos
membros do tipo. Além disso, há outras considerações, como as seguintes:
Custos. Alguns tipos compostos têm requisitos de memória adicionais. Por exemplo, uma matriz usa
memória extra para a própria matriz e também para cada dimensão. Em uma plataforma de 32 bits, essa
sobrecarga é, no momento, 12 bytes, mais 8 bytes para cada dimensão. Em uma plataforma de 64 bits,
esse requisito é duplicado.
Armazenamento Layout. Você não pode supor com segurança que a ordem de armazenamento na
memória é a mesma que a sua ordem de declaração. Você não pode até fazer suposições sobre o
alinhamento de bytes, como um limite de 2 ou 4 bytes. Se você estiver definindo uma classe ou estrutura
e precisar controlar o layout de armazenamento de seus membros, poderá aplicar o
StructLayoutAttribute atributo à classe ou estrutura.
Sobrecarga do objeto
Uma Object referência a qualquer tipo de dados elementar ou compostos usa 4 bytes além dos dados contidos
no tipo de dados.
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)
28/09/2021 • 2 minutes to read
Contém valores que podem ser somente True ou False . As True palavras-chave e correspondem aos dois
estados de False Boolean variáveis.
Comentários
Use o tipo de dados booliana (Visual Basic) para conter valores de dois estados, como true/false, yes/no ou
on/off.
O valor padrão de Boolean é False .
Boolean os valores não são armazenados como números e os valores armazenados não se destinam a ser
equivalentes a números. Você nunca deve escrever um código que se baseia em valores numéricos equivalentes
para True e False . Sempre que possível, você deve restringir o uso de Boolean variáveis aos valores lógicos
para os quais elas são projetadas.
Conversões de tipo
Quando Visual Basic converte valores de tipo de dados numéricos em , 0 se torna Boolean e todos os outros
valores se tornam False True . Quando Visual Basic converte valores Boolean em tipos numéricos, False
torna-se 0 e True torna-se -1.
Ao converter entre valores e tipos de dados numéricos, tenha em mente que os métodos de conversão .NET
Framework de dados nem sempre produzem os mesmos resultados que as palavras-chave Boolean Visual
Basic conversão de dados. Isso porque a conversão Visual Basic retém o comportamento compatível com
versões anteriores. Para obter mais informações, consulte "Tipo booliana não converte em tipo numérico com
precisão" em Solução de problemas de tipos de dados.
Dicas de programação
Números negativos. Boolean não é um tipo numérico e não pode representar um valor negativo. Em
qualquer caso, você não deve usar Boolean para manter valores numéricos.
Caracteres de tipo. Boolean não tem nenhum caractere de tipo literal ou caractere de tipo de
identificador.
Tipo de estrutura. O tipo correspondente no .NET Framework é a estrutura [Link].
Exemplo
No exemplo a seguir, runningVB é uma Boolean variável, que armazena uma configuração simples de sim/não.
Mantém inteiros sem sinal de 8 bits (1 byte) que variam no valor de 0 a 255.
Comentários
Use o Byte tipo de dados para conter dados binários.
O valor padrão de Byte é 0.
Atribuições literais
Você pode declarar e inicializar uma variável atribuindo a ela um literal decimal, um Byte literal hexadecimal,
um literal octal ou (começando com Visual Basic 2017) um literal binário. Se o literal integral estiver fora do
intervalo de um (ou seja, se for menor ou maior que ), ocorrerá um Byte [Link] erro de [Link]
compilação.
No exemplo a seguir, inteiros iguais a 201 representados como literais decimais, hexadecimais e binários são
convertidos implicitamente de Inteiro em byte valores.
NOTE
Use o prefixo ou para denotar um &h literal hexadecimal, o prefixo ou para denotar um literal binário e o prefixo ou para
denotar um &H &b literal &B &o &O 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 um separador de
dígitos para aprimorar a capacidade de leitura, como mostra o exemplo _ a seguir.
Começando com Visual Basic 15.5, você também pode usar o caractere de sublinhado ( ) como um separador à
frente entre o prefixo e os _ dígitos hexadecimais, binários ou octais. Por exemplo:
Dim number As Byte = &H_6A
Para usar o caractere de sublinhado como um separador à esquerda, você deve adicionar o seguinte elemento
ao arquivo de projeto (*.vbproj) do Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
para obter mais informações, consulte selecionar a versão do idioma do Visual Basic.
Dicas de programação
Números negativos. Como Byte é um tipo sem sinal, ele não pode representar um número negativo.
Se você usar o operador unário minus ( ) em uma expressão que é avaliada como tipo , Visual Basic
converterá a - Byte expressão em Short primeiro.
Conversões de formato. Quando Visual Basic lê ou grava arquivos ou quando chama DLLs, métodos e
propriedades, ele pode converter automaticamente entre formatos de dados. Os dados binários Byte
armazenados em variáveis e matrizes são preservados durante essas conversões de formato. Você não
deve usar uma variável para dados binários, pois seu conteúdo pode ser corrompido durante a
conversão entre String formatos ANSI e Unicode.
Alargamento. O Byte tipo de dados é ampliado para , , , UShort , , , , ou Integer UInteger
Short
Long ULong Decimal Single Double . Isso significa que você pode converter Byte em qualquer um
desses tipos sem encontrar um [Link] erro.
Caracteres de tipo. Byte não tem nenhum caractere de tipo literal ou caractere de tipo de
identificador.
Tipo de estrutura. O tipo correspondente no .NET Framework é a estrutura [Link].
Exemplo
No exemplo a seguir, b é uma Byte variável. As instruções demonstram o intervalo da variável e a aplicação
de operadores de deslocamento de bits a ela.
' The valid range of a Byte variable is 0 through 255.
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
' The following statement sets b to 6.
b = CByte(5.7)
Confira também
[Link]
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)
27/09/2021 • 2 minutes to read
Contém pontos de código de 16 bits (2 byte) sem assinatura que variam de 0 a 65535. Cada ponto de código ,
ou código de caractere, representa um único caractere Unicode.
Comentários
Use o Chartipo de dados quando precisar manter apenas um único caractere e não precisar da sobrecarga de
String . Em alguns casos, você pode usar Char() , uma matriz de Char elementos, para conter vários
caracteres.
O valor padrão de Char é o caractere com um ponto de código de 0.
Caracteres Unicode
Os primeiros 128 pontos de código (0 a 127) de 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 segundo 128 pontos de código (128 a 255) representam caracteres especiais, como letras alfabéticas,
acentos, símbolos de moeda e frações baseadas em latino. Unicode usa os pontos de código restantes (256-
65535) para uma ampla variedade de símbolos, incluindo caracteres textuais em todo o mundo, diacríticas e
símbolos matemáticos e técnicos.
Você pode usar métodos como IsDigit e IsPunctuation em uma Char variável para determinar sua classificação
Unicode.
Conversões de tipo
Visual Basic não converte diretamente entre Char os tipos numéricos e . Você pode usar a Asc função ou para
converter um valor em um que representa seu ponto de AscW Char Integer código. Você pode usar a Chr
função ou para converter um valor em um que tem esse ponto de ChrW Integer Char código.
Se a opção de verificação de tipo (instrução Option Strict) estiver, você deverá anexar o caractere de tipo literal a
um literal de cadeia de caracteres de caractere único para identificá-lo como o tipo Char de dados. O exemplo a
seguir ilustra essa situação. A primeira atribuição à charVar variável gera o erro do compilador BC30512
porque Option Strict está on. O segundo é compilado com êxito porque o c caractere de tipo literal identifica
o literal como um Char valor.
Option Strict On
Module CharType
Public Sub Main()
Dim charVar As Char
' This statement generates compiler error BC30512 because Option Strict is On.
charVar = "Z"
Confira também
[Link]
Asc
AscW
Chr
ChrW
Data Types
Tipo de dados de cadeia de caracteres
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 Data (Visual Basic)
27/09/2021 • 3 minutes to read
Contém valores de IEEE de 64 bits (8 byte) que representam datas que variam de 1º de janeiro do ano 0001 a
31 de dezembro do ano 9999 e horários de 12:00:00 AM (meia-noite) até 11:59:59.99999999 PM. Cada
incremento representa 100 nanossegundos de tempo decorrido desde o início de 1º de janeiro do ano 1 no
calendário gregoriano. O valor máximo representa 100 nanossegundos antes do início de 1º de janeiro do ano
10000.
Comentários
Use o Date tipo de dados para conter valores de data, hora ou valores de data e hora.
O valor padrão de Date é 0:00:00 (meia-noite) em 1º de janeiro de 0001.
Você pode obter a data e a hora atuais da DateAndTime classe .
Requisitos de formato
Você deve incluir um Date literal dentro de sinais de número ( # # ). Você deve especificar o valor de data no
formato M/d/aaaa, por #5/31/1993# exemplo, ou aaaa-MM-dd, por exemplo #1993-5-31# . Você pode usar
barras ao especificar o ano primeiro. Esse requisito é independente da localidade e das configurações de
formato de data e hora do computador.
O motivo para essa restrição é que o significado do seu código nunca deve mudar dependendo da localidade
em que seu aplicativo está em execução. Suponha que você em código um Date literal de e #3/4/1998#
pretenda que ele significa 4 de março de 1998. Em uma localidade que usa mm/dd/aaaa, 4/3/1998 é compilada
como você pretende. Mas suponha que você implante seu aplicativo em muitos países/regiões. Em uma
localidade que usa dd/mm/aaaa, seu literal em código 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 no formato da localidade ou em um formato personalizado, fornece o literal para a
função, especificando um formato de data predefinido ou definido Date Format pelo usuário. O exemplo a
seguir demonstra isso.
Como alternativa, você pode usar um dos construtores sobrecarregados da estrutura para DateTime montar um
valor de data e hora. O exemplo a seguir cria um valor para representar 31 de maio de 1993 às 12h14 da tarde.
Formato de hora
Você pode especificar o valor de hora no formato de 12 horas ou 24 horas, por #1:15:30 PM# exemplo, ou
#13:15:30# . No entanto, se você não especificar os minutos ou os segundos, deverá especificar AM ou PM.
Padrões de data e hora
Se você não incluir uma data em um literal de data/hora, Visual Basic a parte de data do valor como 1º de
janeiro de 0001. Se você não incluir uma hora em um literal de data/hora, o Visual Basic define a parte de hora
do valor como o início do dia, ou seja, meia-noite (0:00:00).
Conversões de tipo
Se você converter um valor para o tipo, o Visual Basic renderizará a data de acordo com o formato de data curto
especificado pela localidade de tempo de duração e renderizará a hora de acordo com o formato de hora (12
horas ou 24 horas) especificado pela localidade de tempo de Date String run-time.
Dicas de programação
Considerações sobre a interop. Se você estiver intercalando com componentes não escritos 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 Visual Basic. Se você estiver
passando um argumento de data/hora para esse componente, declare-o como em vez de em seu novo
código Visual Basic e use os métodos Double Date de conversão e [Link]
[Link] .
Caracteres de tipo. Date não tem nenhum caractere de tipo literal ou caractere de tipo de
identificador. No entanto, o compilador trata literais entre sinais de número ( # # ) como Date .
Tipo de estrutura. O tipo correspondente no .NET Framework é a estrutura [Link].
Exemplo
Uma variável ou constante do Date tipo de dados contém a data e a hora. O exemplo a seguir ilustra essa
situação.
Confira também
[Link]
Data Types
Cadeias de caracteres de formato de data e hora padrão
Cadeias de caracteres de formato de data e hora personalizadas
Funções de conversão do tipo
Resumo da Conversão
Uso eficiente de tipos de dados
Tipo de dados decimal (Visual Basic)
28/09/2021 • 3 minutes to read
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 dimensionamento 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 é +/-
[Link].264.337.593,5 43.950.335 (+/-7.9228162514264337593543950335E+28). Com 28 casas
decimais, o maior valor é +/-7.922816251426437593543950335 e o menor valor não zero é +/-
0,000000000000000000000000000001 (+/-1E-28).
Comentários
O Decimal tipo de dados fornece o maior número de dígitos significativos para um número. Ele dá suporte a
até 29 dígitos significativos e pode representar valores acima de 7,9228 x 10^28. Ele é especialmente adequado
para cálculos, como financeiros, que exigem um grande número de dígitos, mas não podem tolerar erros de
arredondamento.
O valor padrão de Decimal é 0.
Dicas de programação
Precisão. Decimal não é um tipo de dados de ponto flutuante. A estrutura contém um valor inteiro
binário, junto com um bit de sinal e um fator de dimensionamento inteiro que especifica qual parte do
valor Decimal é uma fração decimal. Por isso, os Decimal números têm uma representação mais precisa
na memória do que os tipos de ponto flutuante ( e Single Double ).
Desempenho. O Decimal tipo de dados é o mais lento de todos os tipos numéricos. Você deve avaliar a
importância da precisão em relação ao desempenho antes de escolher um tipo de dados.
Alargamento. O Decimal tipo de dados é ampliado para ou Single Double . Isso significa que você
pode Decimal converter em qualquer um desses tipos sem encontrar um [Link]
erro.
Zeros à esquerda. Visual Basic não armazena zeros à esquerda em um Decimal literal. No entanto,
Decimal uma variável preserva todos os zeros à esquerda adquiridos computacionalmente. O exemplo a
seguir ilustra essa situação.
Caracteres de tipo. Acrescentar o caractere de tipo literal D a um literal o força ao tipo de dados
Decimal . Acrescentar o caractere de tipo identificador @ a qualquer identificador o força ao tipo
Decimal .
Tipo de estrutura. O tipo correspondente no .NET Framework é a estrutura [Link].
Intervalo
Talvez seja necessário usar o caractere D de tipo para atribuir um valor grande a uma Decimal variável ou
constante. Esse requisito é porque o compilador interpreta um literal como, a menos que um caractere de tipo
literal siga o Long literal, como mostra o exemplo a seguir.
A declaração para não produz um estouro porque o valor atribuído a ele bigDec1 está dentro do intervalo para
Long . O Long valor pode ser atribuído à Decimal variável.
A declaração para gera um erro de estouro porque o valor atribuído bigDec2 a ele é muito grande para Long .
Como o literal numérico não pode primeiro ser interpretado como um , ele não pode Long ser atribuído à
Decimal variável.
Para , o caractere de tipo literal resolve o problema forçando o compilador a interpretar o literal como um em
vez bigDec3 D de como um Decimal Long .
Confira também
[Link]
Decimal
[Link]
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)
27/09/2021 • 2 minutes to read
Mantém números de ponto flutuante de precisão dupla IEEE 64 bits (8 bytes) assinados que variam em valor de-
1.79769313486231570 E + 308 a-4.94065645841246544 E-324 para valores negativos e de
4.94065645841246544 E-324 a 1.79769313486231570 E + 308 para valores positivos. Números de precisão
dupla armazenam uma aproximação de um número real.
Comentários
O Double tipo de dados fornece as maiores e menores magnitudes possíveis para um número.
O valor padrão de Double é 0.
Dicas de programação
Preciso. Quando você trabalha com números de ponto flutuante, lembre-se de que eles nem sempre
têm uma representação precisa na memória. Isso pode levar a resultados inesperados de determinadas
operações, como comparação de valor e o Mod operador. Para obter mais informações, consulte
Solucionando problemas de tipos de dados.
Zeros à direita. Os tipos de dados de ponto flutuante não têm nenhuma representação interna de zero
caracteres à direita. Por exemplo, eles não fazem distinção entre 4,2000 e 4,2. Consequentemente, os zero
caracteres à direita não aparecem quando você exibe ou imprime valores de ponto flutuante.
Digite os caracteres. Acrescentar o caractere de tipo literal R a um literal o força ao tipo de dados
Double . Por exemplo, se um valor inteiro for seguido por R , o valor será alterado para um Double .
' Visual Basic expands the 4 in the statement Dim dub As Double = 4R to 4.0:
Dim dub As Double = 4.0R
Dim num# = 3
Confira também
[Link]
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)
28/09/2021 • 3 minutes to read
Armazena inteiros de 32 bits (4 bytes) com sinal que variam em valor de -[Link] a [Link].
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.
O valor padrão de Integer é 0.
Atribuições de literal
você pode declarar e inicializar uma Integer variável atribuindo a ela um literal decimal, um literal
hexadecimal, um literal octal ou (começando com Visual Basic 2017) um literal binário. Se o literal inteiro estiver
fora do intervalo de Integer (ou seja, se for menor que [Link] ou maior que [Link], ocorrerá
um erro de compilação.
No exemplo a seguir, inteiros iguais a 90.946 representados como literais decimais, hexadecimais e binários são
atribuídos a valores Integer .
NOTE
Você usa o prefixo &h ou &H para denotar um literal hexadecimal, o prefixo &b ou &B para indicar um literal binário,
e o prefixo &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 um separador de
dígitos para melhorar a legibilidade, como mostra o exemplo a seguir.
Dim intValue1 As Integer = 90_946
[Link](intValue1)
a partir do Visual Basic 15,5, você também pode usar o caractere de sublinhado ( _ ) como um separador à
esquerda entre o prefixo e os dígitos hexadecimal, binário ou octal. Por exemplo:
Para usar o caractere de sublinhado como um separador à esquerda, você deve adicionar o seguinte elemento
ao arquivo de projeto (*.vbproj) do Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
para obter mais informações, consulte selecionar a versão do idioma do Visual Basic.
Os literais numéricos também podem incluir o I caractere de tipo para denotar o Integer tipo de dados,
como mostra o exemplo a seguir.
Dicas de programação
Considerações sobre interoperabilidade. se você estiver fazendo a interface com componentes não
escritos para o .NET Framework, como automação ou objetos COM, lembre-se de que Integer tem 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.
Ampliação. O tipo de dados Integer é ampliado para Long , Decimal , Single ou Double . Isso
significa que você pode converter Integer em qualquer um desses tipos sem a ocorrência de um erro
[Link].
Digite os caracteres. Acrescentar o caractere de tipo literal I a um literal o força ao tipo de dados
Integer . Acrescentar o caractere de tipo identificador % a qualquer identificador o força ao tipo
Integer .
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.
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)
27/09/2021 • 2 minutes to read
Contém inteiros assinados de 64 bits (8 bytes) que variam em valor de-[Link].854.775.808 até
[Link].854.775.807 (9.2... E + 18).
Comentários
Use o Long tipo de dados para conter números inteiros muito grandes para caber no tipo de Integer dados.
O valor padrão de Long é 0.
Atribuições de literal
você pode declarar e inicializar uma Long variável atribuindo-lhe um literal decimal, um literal hexadecimal, um
literal octal ou (começando com Visual Basic 2017) um literal binário. Se o literal inteiro estiver fora do intervalo
de Long (ou seja, se for menor que [Link] ou maior que [Link], ocorrerá um erro de
compilação.
No exemplo a seguir, inteiros iguais a [Link] representados como literais decimais, hexadecimais e
binários são atribuídos a valores Long .
NOTE
Você usa o prefixo &h ou &H para denotar um literal hexadecimal, o prefixo &b ou &B para indicar um literal binário,
e o prefixo &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 um separador de
dígitos para melhorar a legibilidade, como mostra o exemplo a seguir.
Dim longValue1 As Long = 4_294_967_296
[Link](longValue1)
a partir do Visual Basic 15,5, você também pode usar o caractere de sublinhado ( _ ) como um separador à
esquerda entre o prefixo e os dígitos hexadecimal, binário ou octal. Por exemplo:
Para usar o caractere de sublinhado como um separador à esquerda, você deve adicionar o seguinte elemento
ao arquivo de projeto (*.vbproj) do Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
para obter mais informações, consulte selecionar a versão do idioma do Visual Basic.
Os literais numéricos também podem incluir o L caractere de tipo para denotar o Long tipo de dados, como
mostra o exemplo a seguir.
Dicas de programação
Considerações sobre interoperabilidade. se você estiver fazendo a interface com componentes não
escritos para o .NET Framework, por exemplo, automação ou objetos COM, lembre-se de que Long tem
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 em seu novo código de
Visual Basic.
Ampliação. O Long tipo de dados amplia para Decimal , Single ou Double . Isso significa que você
pode converter Long em qualquer um desses tipos sem a ocorrência de um erro
[Link].
Digite os caracteres. Acrescentar o caractere de tipo literal L a um literal o força ao tipo de dados
Long . Acrescentar o caractere de tipo identificador & a qualquer identificador o força ao tipo Long .
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
27/09/2021 • 3 minutes to read
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 Object variável. Uma Object variável também pode se referir a
dados de qualquer tipo de valor (numérico, Boolean , Char , Date , estrutura ou Enumeração).
Comentários
O Object tipo de dados pode apontar para dados de qualquer tipo de dados, incluindo qualquer instância de
objeto que seu aplicativo reconhece. Use Object quando você não souber em tempo de compilação a qual tipo
de dados a variável pode apontar.
O valor padrão de Object é Nothing (uma referência nula).
Tipos de dados
Você pode atribuir uma variável, constante ou expressão de qualquer tipo de dados a uma Object variável. Para
determinar o tipo de dados Object ao qual uma variável se refere atualmente, você pode usar o GetTypeCode
método da [Link] classe. O exemplo a seguir ilustra essa situação.
O Object tipo de dados é um tipo de referência. no entanto, Visual Basic trata uma Object variável como um
tipo de valor quando se refere aos dados de um tipo de valor.
Armazenamento
Qualquer tipo de dados ao qual se refere, uma Object variável não contém o próprio valor de dados, mas sim
um ponteiro para o valor. Ele sempre usa quatro bytes na memória do computador, mas isso não inclui o
armazenamento para os dados que representam o valor da variável. Devido ao código que usa o ponteiro para
localizar os dados, as Object variáveis que mantêm os tipos de valor são um pouco mais lentas para acessar do
que as variáveis explicitamente digitadas.
Dicas de programação
Considerações sobre interoperabilidade. se você estiver fazendo a interface com componentes não
escritos 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 de Visual Basic Object .
Desempenho. Uma variável que você declara com o Object tipo é flexível o suficiente para conter uma
referência a qualquer objeto. No entanto, quando você invoca um método ou propriedade em tal
variável, sempre ocorre a ligação tardia (em tempo de execução). Para forçar a ligação antecipada (no
momento da compilação) e melhorar o 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 você possa acessar suas propriedades e métodos.
Normalmente, você pode usar a lista de classes no pesquisador de objetos para localizar os nomes
de classe disponíveis.
Ampliação. Todos os tipos de dados e todos os tipos de referência ampliam para o Object tipo de
dados. Isso significa que você pode converter qualquer tipo para Object sem encontrar um
[Link] erro.
no entanto, se você converter entre tipos de valor e Object , Visual Basic executar operações chamadas
boxing e unboxing, o que torna a execução mais lenta.
Digite os caracteres. Object Não tem caractere de tipo literal ou caractere de tipo de identificador.
Tipo de estrutura. o tipo correspondente no .NET Framework é a [Link] classe.
Exemplo
O exemplo a seguir ilustra uma Object variável que aponta para uma instância de objeto.
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)
27/09/2021 • 3 minutes to read
Contém inteiros assinados de 8 bits (1 byte) que variam no valor de -128 a 127.
Comentários
Use o SByte tipo de dados para conter valores inteiros que não exigem a largura completa dos dados de ou até
mesmo a meia largura de dados de Integer Short . Em alguns casos, o Common Language Runtime pode ser
capaz de empacotar suas variáveis de perto e SByte economizar o consumo de memória.
O valor padrão de SByte é 0.
Atribuições literais
Você pode declarar e inicializar uma variável atribuindo a ela um literal decimal, um SByte literal hexadecimal,
um literal octal ou (começando com Visual Basic 2017) um literal binário.
No exemplo a seguir, inteiros iguais a -102 representados como literais decimais, hexadecimais e binários são
atribuídos aos SByte valores. Este exemplo requer que você compile com a opção /removeintchecks do
compilador.
NOTE
Use o prefixo ou para denotar um &h literal hexadecimal, o prefixo ou para denotar um literal binário e o prefixo ou para
denotar um &H &b literal &B &o &O 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 um separador de
dígitos para aprimorar a capacidade de leitura, como mostra o exemplo _ a seguir.
Começando com Visual Basic 15.5, você também pode usar o caractere de sublinhado ( ) como um separador à
frente entre o prefixo e os _ dígitos hexadecimais, binários ou octais. Por exemplo:
Dim number As SByte = &H_F9
Para usar o caractere de sublinhado como um separador à esquerda, você deve adicionar o seguinte elemento
ao arquivo de projeto (*.vbproj) do Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
para obter mais informações, consulte selecionar a versão do idioma do Visual Basic.
Se o literal inteiro estiver fora do intervalo de SByte (ou seja, se for menor que [Link] ou maior que
[Link], 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 Integer tipo, um Long será inferido. Isso significa que,
nos exemplos anteriores, os literais numéricos e são interpretados como inteiros com sinal de 32 bits com um
valor 0x9A 0b10011010 de 156, que excede [Link] . Para compilar com êxito um código como este que
atribui um inteiro não decimal a SByte um , você pode fazer o seguinte:
Desabilite verificações de limites de inteiro compilando com a /removeintchecks opção do compilador.
Use um caractere de tipo para definir explicitamente o valor literal que você deseja atribuir ao SByte . O
exemplo a seguir atribui um valor literal Short negativo a um SByte . Observe que, para números
negativos, o bit de ordem alta da palavra de ordem alta do literal numérico deve ser definido. No caso do
nosso exemplo, esse é o bit 15 do valor Short literal.
Dicas de programação
Conformidade com CLS. O tipo de dados não faz parte do SByte CLS (Common Language
Specification), portanto, o código compatível com CLS não pode consumir um componente que o usa.
Alargamento. O SByte tipo de dados é Short ampliado para , , Integer , , e Long Decimal Single
Double . Isso significa que você pode converter SByte em qualquer um desses tipos sem encontrar um
[Link] erro.
Caracteres de tipo. SByte não tem nenhum caractere de tipo literal ou caractere de tipo de
identificador.
Tipo de estrutura. O tipo correspondente no .NET Framework é a estrutura [Link].
Confira também
[Link]
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 curto (Visual Basic)
27/09/2021 • 2 minutes to read
Contém inteiros assinados de 16 bits (2 byte) que variam no valor de -32.768 a 32.767.
Comentários
Use o Shorttipo de dados para conter valores inteiros que não exigem a largura de dados completa de
Integer . Em alguns casos, o Common Language Runtime pode empacotar suas variáveis de perto Short e
economizar o consumo de memória.
O valor padrão de Short é 0.
Atribuições literais
Você pode declarar e inicializar uma variável atribuindo a ela um literal decimal, um Short literal hexadecimal,
um literal octal ou (começando com Visual Basic 2017) um literal binário. Se o literal inteiro estiver fora do
intervalo de Short (ou seja, se for menor que [Link] ou maior que [Link], ocorrerá um erro
de compilação.
No exemplo a seguir, inteiros iguais a 1.034 representados como literais decimais, hexadecimais e binários são
convertidos implicitamente de Inteiro em Short valores.
NOTE
Use o prefixo ou para denotar um &h literal hexadecimal, o prefixo ou para denotar um literal binário e o prefixo ou para
denotar um &H &b literal &B &o &O 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 um separador de
dígitos para aprimorar a capacidade de leitura, como mostra o exemplo _ a seguir.
Para usar o caractere de sublinhado como um separador à esquerda, você deve adicionar o seguinte elemento
ao arquivo de projeto (*.vbproj) do Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
para obter mais informações, consulte selecionar a versão do idioma do Visual Basic.
Literais numéricos também podem incluir o S caractere de tipo para denotar o tipo de Short dados, como
mostra o exemplo a seguir.
Dicas de programação
Alargamento. O Short tipo de dados é Integer ampliado para , , , Long ou Decimal Single Double .
Isso significa que você pode converter Short em qualquer um desses tipos sem a ocorrência de um erro
[Link].
Caracteres de tipo. Acrescentar o caractere de tipo literal S a um literal o força ao tipo de dados
Short . Short não tem nenhum caractere de tipo de identificador.
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)
28/09/2021 • 2 minutes to read
Contém números de ponto flutuante de precisão simples IEEE 32 bits (4 bytes) que variam em valor de-
3.4028235 E + 38 a-1.401298 E-45 para valores negativos e de 1.401298 E-45 a 3.4028235 E + 38 para valores
positivos. Números de precisão única armazenam uma aproximação de um número real.
Comentários
Use o Single tipo de dados para conter valores de ponto flutuante que não exigem a largura de dados
completa de Double . Em alguns casos, a Common Language Runtime pode ser capaz de empacotar suas
Single variáveis em conjunto e economizar o consumo de memória.
Dicas de programação
Preciso. 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 comparação de valor e o Mod operador. Para obter mais informações, consulte
Solucionando problemas de tipos de dados.
Ampliação. O Single tipo de dados amplia para Double . Isso significa que você pode converter
Single para Double sem encontrar um [Link] erro.
Zeros à direita. Os tipos de dados de ponto flutuante não têm nenhuma representação interna de zero
caracteres à direita. Por exemplo, eles não fazem distinção entre 4,2000 e 4,2. Consequentemente, 0
caracteres à direita não aparecem quando você exibe ou imprime valores de ponto flutuante.
Digite os caracteres. Acrescentar o caractere de tipo literal F a um literal o força ao tipo de dados
Single . Acrescentar o caractere de tipo identificador ! a qualquer identificador o força ao tipo Single .
Confira também
[Link]
Data Types
Tipo de Dados Decimal
Tipo de Dados Duplo
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
Tipo de dados da cadeia de caracteres (Visual Basic)
27/09/2021 • 3 minutes to read
Contém sequências de pontos de código sem assinatura de 16 bits (2 byte) que variam no valor de 0 a 65535.
Cada ponto de código , ou código de caractere, representa um único caractere Unicode. Uma cadeia de
caracteres pode conter de 0 a aproximadamente dois bilhões (2 ^ 31) caracteres Unicode.
Comentários
Use o String tipo de dados para conter vários caracteres sem a sobrecarga de gerenciamento de matriz de ,
uma matriz de Char() Char elementos.
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) de 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 segundo 128 pontos de código (128 a 255) representam caracteres especiais, como letras alfabéticas,
acentos, símbolos de moeda e frações baseadas em latino. 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.
Você pode usar métodos como e IsDigit em um caractere individual em uma IsPunctuation variável para
determinar sua classificação String Unicode.
Requisitos de formato
Você deve colocar um String literal entre aspas ( " " ). Se você deve incluir uma aspas como um dos
caracteres na cadeia de caracteres, use duas aspas contíguas ( "" ). O exemplo a seguir ilustra essa situação.
Observe que as aspas contíguas que representam aspas na cadeia de caracteres são independentes das aspas
que começam e terminam o String literal.
Você pode manipular o conteúdo de uma String variável usando uma variedade de funções de cadeia de
caracteres. O exemplo a seguir ilustra a Left função
Uma cadeia de caracteres criada por outro componente pode ser preenchimento com espaços à frente ou à
frente. Se você receber essa cadeia de caracteres, poderá usar as funções Trim , e para remover esses LTrim
RTrim espaços.
Para obter mais informações sobre manipulações de cadeia de caracteres, consulte Cadeias de caracteres.
Dicas de programação
Números negativos. Lembre-se de que os String caracteres mantidos por não são assinados e não
podem representar valores negativos. Em qualquer caso, você não deve usar String para manter
valores numéricos.
Considerações sobre a interop. Se você estiver intercalando com componentes não gravados para o
.NET Framework, por exemplo, objetos de Automação ou COM, lembre-se de que os caracteres de cadeia
de caracteres 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 esse componente, declare-o como , uma matriz de
elementos, em vez de no novo código Byte() Byte Visual Basic String código.
Caracteres de tipo. A apending the identifier type character $ to any identifier forces it to the String
data type. String não tem nenhum caractere de tipo literal. No entanto, o compilador trata literais entre
aspas ( " " ) como String .
Tipo de estrutura. O tipo correspondente no .NET Framework é a [Link] classe .
Confira também
[Link]
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
27/09/2021 • 3 minutes to read
Comentários
O UInteger tipo de dados fornece o maior valor não assinado na largura de dados mais eficiente.
O valor padrão de UInteger é 0.
Atribuições de literal
você pode declarar e inicializar uma UInteger variável atribuindo-lhe um literal decimal, um literal hexadecimal,
um literal octal ou (começando com Visual Basic 2017) um literal binário. Se o literal inteiro estiver fora do
intervalo de UInteger (ou seja, se for menor que [Link] ou maior que [Link], ocorrerá um
erro de compilação.
No exemplo a seguir, inteiros iguais a [Link] representados como literais decimais, hexadecimais e
binários são atribuídos a valores UInteger .
NOTE
Você usa o prefixo &h ou &H para denotar um literal hexadecimal, o prefixo &b ou &B para indicar um literal binário,
e o prefixo &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 um separador de
dígitos para melhorar a legibilidade, como mostra o exemplo a seguir.
Dim uintValue1 As UInteger = 3_000_000_000ui
[Link](uintValue1)
a partir do Visual Basic 15,5, você também pode usar o caractere de sublinhado ( _ ) como um separador à
esquerda entre o prefixo e os dígitos hexadecimal, binário ou octal. Por exemplo:
Para usar o caractere de sublinhado como um separador à esquerda, você deve adicionar o seguinte elemento
ao arquivo de projeto (*.vbproj) do Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
para obter mais informações, consulte selecionar a versão do idioma do Visual Basic.
Os literais numéricos também podem incluir o UI ui caractere de tipo ou para denotar o UInteger tipo de
dados, como mostra o exemplo a seguir.
Dicas de programação
Os UInteger Integer tipos de dados e fornecem um desempenho ideal em um processador de 32 bits, porque
os tipos de inteiro 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 não assinado, ele não pode representar um número
negativo. se você usar o operador menos ( - ) unário em uma expressão avaliada como tipo UInteger ,
Visual Basic converterá a expressão em Long primeiro.
Conformidade com CLS. O UInteger tipo de dados não faz parte do Common Language Specification
(CLS), portanto o código em conformidade com CLS não pode consumir um componente que o utiliza.
Considerações sobre interoperabilidade. se você estiver fazendo a interface com componentes não
escritos para o .NET Framework, por exemplo, automação ou objetos COM, tenha em mente que tipos
como o uint podem ter 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 UShort em vez de UInteger
em seu código de Visual Basic gerenciado.
Ampliação. O UInteger tipo de dados amplia para Long , ULong , Decimal , Single e Double . Isso
significa que você pode converter UInteger para qualquer um desses tipos sem encontrar um
[Link] erro.
Digite os caracteres. Acrescentar os caracteres do tipo literal UI a um literal força-o ao UInteger tipo
de dados. UInteger Não tem um caractere de tipo de identificador.
Tipo de estrutura. O tipo correspondente no .NET Framework é a estrutura System.UInt32.
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)
28/09/2021 • 3 minutes to read
Contém inteiros sem sinal de 64 bits (8 byte) que variam de 0 a [Link].709.551.615 (mais de 1,84
vezes 10 ^ 19).
Comentários
Use o ULong tipo de dados para conter dados binários muito grandes para ou os maiores valores UInteger
inteiros sem sinal possíveis.
O valor padrão de ULong é 0.
Atribuições literais
Você pode declarar e inicializar uma variável atribuindo a ela um literal decimal, um ULong literal hexadecimal,
um literal octal ou (começando com Visual Basic 2017) um literal binário. Se o literal inteiro estiver fora do
intervalo de ULong (ou seja, se for menor que [Link] ou maior que [Link], ocorrerá um
erro de compilação.
No exemplo a seguir, inteiros iguais a [Link] representados como literais decimais, hexadecimais e
binários são atribuídos a valores ULong .
NOTE
Use o prefixo ou para denotar um &h literal hexadecimal, o prefixo ou para denotar um literal binário e o prefixo ou para
denotar um &H &b literal &B &o &O 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 um separador de
dígitos para aprimorar a capacidade de leitura, como mostra o exemplo _ a seguir.
Dim longValue1 As Long = 4_294_967_296
[Link](longValue1)
Começando com Visual Basic 15.5, você também pode usar o caractere de sublinhado ( ) como um separador à
frente entre o prefixo e os _ dígitos hexadecimais, binários ou octais. Por exemplo:
Para usar o caractere de sublinhado como um separador à esquerda, você deve adicionar o seguinte elemento
ao arquivo de projeto (*.vbproj) do Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
para obter mais informações, consulte selecionar a versão do idioma do Visual Basic.
Literais numéricos também podem incluir o caractere de tipo ou UL para denotar o tipo de ul ULong dados,
como mostra o exemplo a seguir.
Dicas de programação
Números negativos. Como ULong é um tipo sem sinal, ele não pode representar um número negativo.
Se você usar o operador unário minus ( ) em uma expressão que é avaliada como tipo , Visual Basic
converterá a - ULong expressão em Decimal primeiro.
Conformidade com CLS. O tipo de dados não faz parte do ULong CLS (Common Language
Specification), portanto, o código compatível com CLS não pode consumir um componente que o usa.
Considerações sobre a interop. Se você estiver intercalando com componentes não escritos para o
.NET Framework, por exemplo, objetos de Automação ou COM, tenha em mente que tipos como podem
ter uma largura de dados ulong diferente (32 bits) em outros ambientes. Se você estiver passando um
argumento de 32 bits para esse componente, declare-o como em vez de em seu UInteger ULong código
Visual Basic gerenciado.
Alargamento. O ULong tipo de dados é ampliado para , e Decimal Single Double . Isso significa que
você pode converter ULong em qualquer um desses tipos sem encontrar um [Link]
erro.
Caracteres de tipo. A apending the literal type characters UL to a literal forces it to the data ULong
type. ULong não tem nenhum caractere de tipo de identificador.
Tipo de estrutura. O tipo correspondente no .NET Framework é a estrutura System.UInt64.
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
27/09/2021 • 2 minutes to read
Mantém os dados em um formato que você define. A Structure instrução define o formato.
As versões anteriores Visual Basic dar 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.
Visual Basic trata uma estrutura como uma única unidade, embora você também possa acessar seus membros
individualmente.
Comentários
Defina e use um tipo de dados de estrutura quando você precisar combinar vários tipos de dados em uma única
unidade ou quando nenhum dos tipos de dados elementar atender às suas necessidades.
O valor padrão de um tipo de dados de estrutura consiste na combinação dos valores padrão de cada um de
seus membros.
Formato da declaração
Uma declaração de estrutura começa com a instrução Structure e termina com a End Structure instrução . A
Structure instrução 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 para serem do tipo de dados dessa estrutura.
As declarações entre as Structure instruções End Structure e definem os membros da estrutura .
Dicas de programação
Consumo de memória. Assim como 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 nominal de seus membros. Além disso, você não pode presumir com segurança que a
ordem de armazenamento na memória é igual à sua ordem de declaração. Se você precisar controlar o
layout de armazenamento de uma estrutura, poderá aplicar o StructLayoutAttribute atributo à Structure
instrução .
Considerações sobre a interop. Se você estiver intercalando com componentes não escritos para o
.NET Framework, por exemplo, automação ou objetos COM, tenha em mente que os tipos definidos pelo
usuário em outros ambientes não são compatíveis com Visual Basic tipos de estrutura.
Alargamento. Não há conversão automática de ou para qualquer tipo de dados de estrutura. Você pode
definir operadores de conversão em sua estrutura usando a instrução Operatore pode declarar cada
operador de conversão como Widening ou Narrowing .
Caracteres de tipo. Os tipos de dados de estrutura não têm nenhum caractere de tipo literal ou
caractere de tipo de identificador.
Tipo de estrutura. Não há nenhum tipo correspondente no .NET Framework. Todas as estruturas
herdam da classe .NET Framework [Link] , mas nenhuma estrutura individual corresponde a
[Link] .
Exemplo
O paradigma a seguir mostra o contorno da declaração de uma estrutura.
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)
27/09/2021 • 2 minutes to read
Comentários
Use o UShort tipo de dados para conter dados binários muito grandes para Byte .
O valor padrão de UShort é 0.
Atribuições literais
Você pode declarar e inicializar uma variável atribuindo a ela um literal decimal, um UShort literal hexadecimal,
um literal octal ou (começando com Visual Basic 2017) um literal binário. Se o literal inteiro estiver fora do
intervalo de UShort (ou seja, se for menor que [Link] ou maior que [Link], ocorrerá um
erro de compilação.
No exemplo a seguir, inteiros iguais a 65.034 representados como literais decimais, hexadecimais e binários são
atribuídos a UShort valores.
NOTE
Use o prefixo ou para denotar um &h literal hexadecimal, o prefixo ou para denotar um literal binário e o prefixo ou para
denotar um &H &b literal &B &o &O 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 um separador de
dígitos para aprimorar a capacidade de leitura, como mostra o exemplo _ a seguir.
Começando com Visual Basic 15.5, você também pode usar o caractere de sublinhado ( ) como um separador à
frente entre o prefixo e os _ dígitos hexadecimais, binários ou octais. Por exemplo:
Para usar o caractere de sublinhado como um separador à esquerda, você deve adicionar o seguinte elemento
ao arquivo de projeto (*.vbproj) do Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
para obter mais informações, consulte selecionar a versão do idioma do Visual Basic.
Literais numéricos também podem incluir o caractere de tipo ou US para denotar o tipo de us UShort dados,
como mostra o exemplo a seguir.
Dicas de programação
Números negativos. Como UShort é um tipo sem sinal, ele não pode representar um número
negativo. Se você usar o operador unário minus ( ) em uma expressão que é avaliada como tipo , Visual
Basic converterá a - UShort expressão em Integer primeiro.
Conformidade com CLS. O tipo de dados não faz parte do UShort CLS (Common Language
Specification), portanto, o código compatível com CLS não pode consumir um componente que o usa.
Alargamento. O tipo de dados é Integer ampliado para , , , UInteger , , e Long ULong
UShort
Decimal Single Double . Isso significa que você pode UShort converter em qualquer um desses tipos
sem encontrar um [Link] erro.
Caracteres de tipo. A apending the literal type characters US to a literal forces it to the data UShort
type. UShort não tem nenhum caractere de tipo de identificador.
Tipo de estrutura. O tipo correspondente no .NET Framework é a estrutura System.UInt16.
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
27/09/2021 • 2 minutes to read
Syntax
#Const constname = expression
Partes
constname
Obrigatórios. Nome da constante que está sendo definida.
expression
Obrigatórios. Literal, outra constante do compilador condicional ou qualquer combinação que inclua qualquer
ou todos os operadores aritméticos ou lógicos, exceto Is .
Comentários
Constantes condicionais do compilador são sempre privadas para o arquivo no qual aparecem. Não é possível
criar constantes do compilador público usando a diretiva ; você pode criar somente na interface do usuário ou
#Const com a opção do /define compilador.
Você pode usar apenas constantes e literais do compilador condicional no expression . Usar uma constante
padrão definida com Const causa um erro. Por outro lado, você pode usar constantes definidas com a #Const
palavra-chave somente para compilação condicional. As constantes também podem ser indefinidas, caso em
que elas têm um valor de Nothing .
Exemplo
Este exemplo usa a #Const diretiva .
Confira também
-define (Visual Basic)
#If... Diretivas then...#Else
Instrução Const
Compilação condicional
Instrução If...Then...Else
Diretiva #ExternalSource
28/09/2021 • 2 minutes to read
Syntax
#ExternalSource( StringLiteral , IntLiteral )
[ LogicalLine+ ]
#End ExternalSource
Partes
StringLiteral
O caminho para a origem externa.
IntLiteral
O número de linha da primeira linha da origem externa.
LogicalLine
A linha em que o erro ocorre na origem externa.
#End ExternalSource
Encerra o #ExternalSource bloco.
Comentários
Essa diretiva é usada somente pelo compilador e pelo depurador.
Um arquivo de origem pode incluir diretivas de origem externas, que indicam um mapeamento entre linhas
específicas de código no arquivo de origem e texto externo à origem, como um arquivo .aspx. Se erros são
encontrados no código-fonte designado durante a compilação, eles são identificados como provenientes da
origem externa.
As diretivas de origem externas não têm nenhum efeito na compilação e não podem ser aninhadas. Eles são
destinados somente para uso interno pelo aplicativo.
Confira também
Compilação condicional
Diretivas #If...Then...#Else
27/09/2021 • 2 minutes to read
Syntax
#If expression Then
statements
[ #ElseIf expression Then
[ statements ]
...
#ElseIf expression Then
[ statements ] ]
[ #Else
[ statements ] ]
#End If
Partes
expression
Necessário para instruções #If e , opcional em outro #ElseIf lugar. Qualquer expressão, que consiste
exclusivamente em uma ou mais constantes condicionais do compilador, literais e operadores, que é avaliada
como True ou False .
statements
Necessário para o bloco #If de instrução, opcional em outro lugar. Visual Basic de programa ou diretivas do
compilador que são compiladas se a expressão associada for avaliada como True .
#End If
Encerra o bloco #If de instrução.
Comentários
Na superfície, o comportamento das #If...Then...#Else diretivas aparece igual ao das instruções
If...Then...Else . No entanto, #If...Then...#Else as diretivas avaliam o que é compilado pelo compilador,
enquanto as instruções If...Then...Else avaliam condições em tempo de operação.
A compilação condicional normalmente é usada para compilar o mesmo programa para diferentes plataformas.
Ele também é usado para impedir que o código de depuração apareça em um arquivo executável. O código
excluído durante a compilação condicional é completamente omitido do arquivo executável final, portanto, não
tem nenhum efeito sobre o tamanho ou o desempenho.
Independentemente do resultado de qualquer avaliação, todas as expressões são avaliadas usando
Option Compare Binary . A Option Compare instrução não afeta expressões em #If instruções e #ElseIf .
NOTE
Não existe nenhuma forma de linha única das #If #Else #ElseIf diretivas , , e #End If . Nenhum outro código
pode aparecer na mesma linha que qualquer uma das diretivas.
As instruções dentro de um bloco de compilação condicional devem ser instruções lógicas completas. Por
exemplo, você não pode compilar condicionalmente apenas os atributos de uma função, mas pode declarar
condicionalmente a função junto com seus atributos:
Exemplo
Este exemplo usa o #If...Then...#Else constructo para determinar se é preciso compilar determinadas
instruções.
#Const CustomerNumber = 36
#If CustomerNumber = 35 Then
' Insert code to be compiled for customer # 35.
#ElseIf CustomerNumber = 36 Then
' Insert code to be compiled for customer # 36.
#Else
' Insert code to be compiled for all other customers.
#End If
Confira também
Diretiva #Const de #Const
Instrução If...Then...Else
Compilação condicional
[Link]
#Region diretiva
27/09/2021 • 2 minutes to read
Syntax
#Region string_literal
' 0 or more statements
#End Region
Partes
T ERM O DEF IN IÇ Ã O
Comentários
Use a diretiva para especificar um bloco de código para expandir ou reter ao usar o recurso de estrutura de
#Region Visual Studio IDE. Você pode colocar ou aninhar regiões em outras regiões para agrupar regiões
semelhantes.
Exemplo
Este exemplo usa a #Region diretiva .
#Region "MathFunctions"
' Insert code for the Math functions here.
#End Region
Confira também
#If... Diretivas then...#Else
Estrutura de tópicos
Como: Recolher e ocultar seções do código
#Disable e #Enable (Visual Basic)
27/09/2021 • 2 minutes to read
As #Disable #Enable diretivas e são Visual Basic do compilador de código-fonte. Eles são usados para
desabilitar e reabilitar todos ou avisos específicos para regiões de código.
Você também pode desabilitar e habilitar uma lista separada por vírgulas de códigos de aviso.
Confira também
Visual Basic Referência de linguagem
Como suprimir avisos de análise de código
Funções (Visual Basic)
27/09/2021 • 2 minutes to read
Os tópicos nesta seção contêm tabelas das funções de membro de tempo de execução do Visual Basic.
NOTE
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ções de cadeia de caracteres
Funções de conversão do tipo
Função CType
Seções relacionadas
Referência da linguagem Visual Basic
Funções de conversão (Visual Basic)
27/09/2021 • 2 minutes to read
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)
27/09/2021 • 5 minutes to read
Comentários
A tabela a seguir lista os métodos da [Link] classe . Você pode usá-lo em um Visual Basic programa:
A tabela a seguir lista os métodos da classe que não existem no .NET Framework mas são adicionados
[Link] .NET Standard ou .NET Core:
Acosh Retorna o ângulo cujo cosseno Começando com o .NET Core 2.1 e
hiperbólico é o número especificado. .NET Standard 2.1
Asinh Retorna o ângulo cujo seno hiperbólico Começando com o .NET Core 2.1 e
é o número especificado. .NET Standard 2.1
Atanh Retorna o ângulo cuja tangente Começando com o .NET Core 2.1 e
hiperbólica é o número especificado. .NET Standard 2.1
BitDecrement Retorna o próximo valor menor que é Começando com o .NET Core 3.0
comparado como menor que x .
BitIncrement Retorna o próximo valor maior que é Começando com o .NET Core 3.0
comparado como maior que x .
Cbrt Retorna a raiz cúbica de um número Começando com o .NET Core 2.1 e
especificado. .NET Standard 2.1
Clamp Retorna value fixado no intervalo Começando com o .NET Core 2.0 e
inclusivo de min e max . .NET Standard 2.1
M ÉTO DO . N ET DESC RIÇ Ã O DISP O N ÍVEL EM
CopySign Retorna um valor com magnitude de Começando com o .NET Core 3.0
x e o sinal de y .
ILogB Retorna o logaritmo inteiro de base 2 Começando com o .NET Core 3.0
de um número especificado.
MaxMagnitude Retorna a maior magnitude de dois Começando com o .NET Core 3.0
números de ponto flutuante de
precisão dupla.
MinMagnitude Retorna a menor magnitude de dois Começando com o .NET Core 3.0
números de ponto flutuante de
precisão dupla.
ScaleB Retorna x * 2^n computado com Começando com o .NET Core 3.0
eficiência.
Para usar essas funções sem qualificação, importe o namespace para seu projeto adicionando o seguinte código
à [Link] parte superior do arquivo de origem:
Imports [Link]
Exemplo – Abs
Este exemplo usa Abs o método da classe para calcular o valor absoluto de um Math número.
Exemplo – Atan
Este exemplo usa Atan o método da classe para calcular o valor de Math pi.
Exemplo – Cos
Este exemplo usa o Cos método da classe para retornar o Math cosseno de um ângulo.
Exemplo – Exp
Este exemplo usa o Exp método da classe para retornar e elevado a uma Math potência.
Exemplo – Log
Este exemplo usa o Log método da classe para retornar o Math logaritmo natural de um número.
Exemplo – Round
Este exemplo usa o Round método da classe para Math arredondar um número para o inteiro mais próximo.
Exemplo – Assinar
Este exemplo usa Sign o método da classe para determinar o sinal de um Math número.
Dim mySign1 As Integer = [Link](12)
Dim mySign2 As Integer = [Link](-2.4)
Dim mySign3 As Integer = [Link](0)
[Link](mySign1)
[Link](mySign2)
[Link](mySign3)
' The code produces the following output:
' 1
' -1
' 0
Exemplo – Sin
Este exemplo usa Sin o método da classe para retornar o Math seno de um ângulo.
Exemplo – Sqrt
Este exemplo usa o Sqrt método da classe para calcular a raiz quadrada de um Math número.
Exemplo – Tan
Este exemplo usa Tan o método da classe para retornar a Math tangente de um ângulo.
Confira também
Rnd
Randomize
NaN
Funções Matemáticas Derivadas
Operadores aritméticos
Funções da cadeia de caracteres (Visual Basic)
27/09/2021 • 6 minutes to read
A tabela a seguir lista as funções que Visual Basic fornece na [Link] classe para pesquisar
e manipular cadeias de caracteres. Eles podem ser considerados como Visual Basic intrínsecas; ou seja, você não
precisa chamá-los como membros explícitos de uma classe, como mostram os exemplos. Métodos adicionais e,
em alguns casos, métodos complementares, estão disponíveis na [Link] classe .
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 faz sentido de maiúsculas e minúsculas determinada pela
localidade do sistema ( ) ou pelas representações binárias internas dos Text 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.
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.
Exemplo: Mid
Este exemplo usa a Mid função para retornar um número especificado de caracteres de uma cadeia de
caracteres.
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.
' Returns 0.
testPos = InStr(1, searchString, "W")
Exemplo: Formato
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.
NOTE
Para localidades que usam um relógio de 24 horas, os indicadores AM/PM ( t e tt ) não exibem nada.
Dim testDateTime As Date = #1/27/2001 5:04:23 PM#
Dim testStr As String
' Returns current system time in the system-defined long time format.
testStr = Format(Now(), "Long Time")
' Returns current system date in the system-defined long date format.
testStr = Format(Now(), "Long Date")
' Also returns current system date in the system-defined long date
' format, using the single letter code for the format.
testStr = Format(Now(), "D")
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 [Link]
Funções de conversão do tipo (Visual Basic)
27/09/2021 • 14 minutes to read
Essas funções são compiladas em linha, 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á nenhuma chamada para um procedimento para realizar a conversão, o que
melhora o desempenho. Cada função impõe uma expressão para um tipo de dados específico.
Syntax
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
Obrigatórios. Qualquer expressão do tipo de dados de origem.
IN T ERVA LO PA RA O EXPRESSION
N O M E DA F UN Ç Ã O T IP O DE DA DO S DE RETO RN O A RGUM EN TO
Comentários
como regra, você deve usar as funções de conversão de tipo Visual Basic em preferência aos métodos de .NET
Framework, como ToString() , na Convert classe ou em uma estrutura ou classe de tipo individual. as funções
de Visual Basic são projetadas para uma interação ideal com código de Visual Basic e também tornam seu
código-fonte mais curto e mais fácil de ler. além disso, os métodos de conversão de .NET Framework nem
sempre produzem os mesmos resultados que as funções de Visual Basic, por exemplo, ao converter Boolean
para Integer . Para obter mais informações, consulte Solucionando problemas de tipos de dados.
a partir do Visual Basic 15,8, o desempenho da conversão ponto-a-inteiro flutuante é otimizado quando você
passa Single o Double valor ou retornado pelos métodos a seguir para uma das funções de conversão de inteiro
(,,,,,, CByte CShort CInt CLng CSByte CUShort CUInt , CULng ):
[Link](Double)
[Link](Object)
[Link](Single)
[Link](Double)
[Link](Object)
[Link](Single)
[Link](Double)
[Link](Double)
[Link](Double)
[Link](Double)
Essa otimização permite que um código que faz um grande número de conversões de inteiros seja executado
até duas vezes mais rápido. O exemplo a seguir ilustra essas conversões otimizadas de ponto flutuante para
inteiro:
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 para um tipo de dados específico em vez do tipo de dados padrão. Por exemplo, use CDec
para forçar aritmética decimal nos casos em que a precisão simples, a precisão dupla ou a aritmética de
inteiro normalmente ocorreria.
Conversões com falha. Se o expression passado para a função estiver fora do intervalo do tipo de
dados para o qual será convertido, OverflowException ocorrerá um erro.
Par tes fracionárias. Quando você converte um valor não integral para um tipo integral, as funções de
conversão de inteiro ( CByte , CInt , CLng ,,,, CSByte CShort CUInt CULng e CUShort ) removem a
parte fracionária e arredondam o valor para o inteiro mais próximo.
Se a parte fracionária for exatamente 0,5, as funções de conversão de inteiros o arredondarão para o
inteiro par mais próximo. Por exemplo, 0,5 arredonda para 0 e 1,5 e 2,5 são arredondados para 2. Isso às
vezes é chamado de arredondamento do Banker, e sua finalidade é compensar uma tendência que
poderia se acumular ao adicionar muitos desses números juntos.
CInt e CLng difere das Int Fix funções e, que truncam, em vez de round, a parte fracionária de um
número. Além disso, Fix e Int sempre retornam um valor do mesmo tipo de dados que você passa.
Conversões de data/hora. Use a IsDate função para determinar se um valor pode ser convertido em
uma data e hora. CDate o reconhece literais de datas e literais de tempo, mas não valores numéricos.
para converter um valor Visual Basic 6,0 em Date um Date valor em Visual Basic 2005 ou versões
posteriores, você pode usar o [Link] método.
Valores de data/hora neutros. O tipo de dados Date sempre contém informações de data e hora. para
fins de conversão de tipo, Visual Basic considera 1/1/0001 (1º de janeiro do ano 1) como um valor
neutro para a data e 00:00:00 (meia-noite) para ser um valor neutro para o tempo. Se você converter um
Date valor em uma cadeia de caracteres, o não CStr incluirá 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 são suprimidas. No entanto, as informações de data
ainda estão presentes no Date valor original e podem ser recuperadas com funções como a DatePart
função.
Sensibilidade de cultura. As funções de conversão de tipo que envolvem cadeias de caracteres
executam conversões com base nas configurações de cultura atuais do aplicativo. Por exemplo, CDate
reconhece formatos de data de acordo com a configuração de localidade do sistema. Você deve fornecer
o dia, o mês e o ano na ordem correta para sua localidade ou a data pode não ser interpretada
corretamente. Um formato de data longa não será reconhecido se ele contiver uma cadeia de caracteres
de dia da semana, como "Quarta-feira".
Se você precisar converter para ou de uma representação de cadeia de caracteres de um valor em um
formato diferente do especificado pela localidade, não poderá usar as funções de conversão Visual Basic
tipo. Para fazer isso, use ToString(IFormatProvider) os métodos e do tipo desse
Parse(String, IFormatProvider) valor. Por exemplo, use [Link] ao converter uma cadeia de
caracteres em um e use ao converter um valor do tipo em uma cadeia de Double [Link]
Double caracteres.
Função CType
A Função CType recebe um segundo argumento, , e coerce para , em que pode ser qualquer tipo de typename
expression typename dados, estrutura, classe ou interface na qual existe uma conversão typename válida.
Para uma comparação de com CType as outras palavras-chave de conversão de tipo, consulte Operador
DirectCast e Operador TryCast.
Exemplo de CBool
O exemplo a seguir usa a CBool função para converter expressões em Boolean valores. Se uma expressão for
avaliada como um valor diferente de zero, CBool retornará True ; caso contrário, retornará False .
Dim a, b, c As Integer
Dim check As Boolean
a = 5
b = 5
' The following line of code sets check to True.
check = CBool(a = b)
c = 0
' The following line of code sets check to False.
check = CBool(c)
Exemplo de CByte
O exemplo a seguir usa CByte a função para converter uma expressão em um Byte .
Exemplo de CChar
O exemplo a seguir usa CChar a função para converter o primeiro caractere de uma expressão em um String
Char tipo.
O argumento de entrada para CChar deve ser do tipo de dados ou Char String . Você não pode usar CChar
para converter um número em um caractere, porque não pode aceitar um tipo de dados CChar 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 para obter a cadeia de caracteres de dígitos, converter a cadeia de
caracteres no tipo InputBox e converter o número para o tipo CInt Integer ChrW Char .
Exemplo de CDate
O exemplo a seguir usa a CDate função para converter cadeias de caracteres em Date valores. Em geral, não é
recomendável codificar datas e horas como cadeias de caracteres (conforme mostrado neste exemplo). Use
literais de data e hora, como #Feb 12, 1969# e #4:45:23 PM#, em vez disso.
Exemplo de CDbl
Dim aDec As Decimal
Dim aDbl As Double
' The following line of code uses the literal type character D to make aDec a Decimal.
aDec = 234.456784D
' The following line of code sets aDbl to 1.9225456288E+1.
aDbl = CDbl(aDec * 8.2D * 0.01D)
Exemplo de CDec
O exemplo a seguir usa a CDec função para converter um valor numérico em Decimal .
Exemplo de CInt
O exemplo a seguir usa CInt a função para converter um valor em Integer .
Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)
Exemplo de CLng
O exemplo a seguir usa CLng a função para converter valores em Long .
Exemplo de CObj
O exemplo a seguir usa a CObj função para converter um valor numérico em Object . A Object própria
variável contém apenas um ponteiro de quatro byte, que aponta para Double o valor atribuído a ela.
Exemplo de CSByte
O exemplo a seguir usa a CSByte função para converter um valor numérico em SByte .
Exemplo do CShort
O exemplo a seguir usa a CShort função para converter um valor numérico em Short .
Exemplo de CSng
O exemplo a seguir usa CSng a função para converter valores em Single .
Dim aDouble1, aDouble2 As Double
Dim aSingle1, aSingle2 As Single
aDouble1 = 75.3421105
aDouble2 = 75.3421567
' The following line of code sets aSingle1 to 75.34211.
aSingle1 = CSng(aDouble1)
' The following line of code sets aSingle2 to 75.34216.
aSingle2 = CSng(aDouble2)
Exemplo de CStr
O exemplo a seguir usa a CStr função para converter um valor numérico em String .
O exemplo a seguir usa a CStr função para converter valores em Date String valores.
CStr sempre renderiza um valor no formato curto padrão para a localidade atual, por Date exemplo,
"15/06/2003 4:35:47 PM". No entanto, suprime os valores neutros de CStr 1/1/0001 para a data e 00:00:00
para a hora.
Para obter mais detalhes sobre os valores retornados por CStr , consulte Valores retornados para a função
CStr.
Exemplo de CUInt
O exemplo a seguir usa a CUInt função para converter um valor numérico em UInteger .
Exemplo de CULng
O exemplo a seguir usa a CULng função para converter um valor numérico em ULong .
Exemplo de CUShort
O exemplo a seguir usa a CUShort função para converter um valor numérico em UShort .
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)
27/09/2021 • 2 minutes to read
A tabela a seguir descreve os valores de retorno para CStr para diferentes tipos de dados de expression .
Tipo de dados booliana Uma cadeia de caracteres que contém "True" ou "False".
Tipo de Dados de Data Uma cadeia de caracteres Date que contém um valor (data
e hora) no formato de data curto do sistema.
CStr e Data
O Date tipo sempre contém informações de data e hora. Para fins de conversão de tipo, Visual Basic considera
1/1/0001 (1º de janeiro do ano 1) como um valor neutro para a data e 00:00:00 (meia-noite) como um valor
neutro para a hora. CStr não inclui valores neutros na cadeia de caracteres resultante. Por exemplo, se você
converter em uma cadeia de caracteres, o resultado será #January 1, 0001 9:30:00# "9:30:00 AM"; as
informações de data são suprimidas. No entanto, as informações de data ainda estão presentes no valor original
e Date podem ser recuperadas com funções como DatePart .
NOTE
A CStr função executa sua conversão com base nas configurações de cultura atuais para o aplicativo. Para obter a
representação de cadeia de caracteres de um número em uma cultura específica, use o método do
ToString(IFormatProvider) número. Por exemplo, use [Link] ao converter um valor do tipo em um Double
String .
Confira também
DatePart
Funções de conversão do tipo
Tipo de dados booliana
Tipo de Dados de Data
Função CType (Visual Basic)
07/10/2021 • 2 minutes to read
Retorna o resultado da conversão explícita de uma expressão para um tipo de dados, objeto, estrutura, classe ou
interface especificado.
Syntax
CType(expression, typename)
Partes
expression Qualquer expressão válida. se o valor de expression estiver fora do intervalo permitido pelo
typename , Visual Basic lançará uma exceção.
typename Qualquer expressão que seja válida dentro de uma As cláusula em uma Dim instrução, ou seja, o
nome de qualquer tipo de dados, objeto, estrutura, classe ou interface.
Comentários
TIP
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 para 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 Object tipo de
dados.
CType é compilado embutido, o que significa que o código de conversão faz parte do código que avalia a
expressão. Em alguns casos, o código é executado mais rapidamente porque nenhum procedimento é chamado
para executar a conversão.
se nenhuma conversão for definida de expression para typename (por exemplo, de Integer para Date ),
Visual Basic exibirá uma mensagem de erro de tempo de compilação.
Se uma conversão falhar em tempo de execução, a exceção apropriada será lançada. Se uma conversão de
restrição falhar, um OverflowException será o resultado mais comum. Se a conversão for indefinida, um
InvalidCastException em será lançado. Por exemplo, isso pode acontecer se expression for do tipo Object e
seu tipo de tempo de execução não tiver nenhuma conversão para typename .
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 torna o CType Act 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:
FA L H A DE T EM P O DE
PA L AVRA - C H AVE T IP O S DE DA DO S REL A Ç Ã O DE A RGUM EN TO EXEC UÇ Ã O
Operador DirectCast Quaisquer tipos de dados Um tipo deve herdar ou Emite InvalidCastException
implementar o outro tipo
TryCast Somente tipos de referência Um tipo deve herdar ou Não retorna nada
implementar o outro tipo
Sobrecarga
O CType operador também pode ser sobrecarregado em uma classe ou estrutura definida fora do seu código.
Se o seu código converter para ou de uma classe ou estrutura desse tipo, certifique-se de entender o
comportamento de seu CType operador. Para obter mais informações, consulte procedimentos de operador.
Exemplo
O exemplo a seguir usa a CType função para converter uma expressão para o Single tipo de dados.
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)
27/09/2021 • 2 minutes to read
Nesta seção
Ansi
Assembly
Async
Auto
ByRef
ByVal
Default
Friend
In
Iterador
Chave
Módulo <keyword>
MustInherit
MustOverride
Narrowing
NotInheritable
NotOverridable
Opcional
Saída
Sobrecargas
Substituível
Substituições
ParamArray
Parcial
Privado
Protegido Privado
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)
27/09/2021 • 2 minutes to read
especifica que Visual Basic deve realizar marshaling de todas as cadeias de caracteres para valores de American
National Standards Institute (ANSI), independentemente do nome do procedimento externo que está sendo
declarado.
quando você chama um procedimento definido fora do seu projeto, o compilador Visual Basic não tem acesso
às informações necessárias para chamar o procedimento corretamente. Essas informações incluem onde o
procedimento está localizado, como ele é identificado, sua sequência de chamada e tipo de retorno e o conjunto
de caracteres da cadeia de caracteres que ele usa. A instrução Declare cria uma referência a um procedimento
externo e fornece essas informações necessárias.
A charsetmodifier parte na Declare instrução fornece as informações do conjunto de caracteres para o
marshaling de cadeias durante uma chamada para o procedimento externo. ele também afeta como Visual Basic
pesquisa o nome do procedimento externo no arquivo externo. o Ansi modificador especifica que Visual Basic
deve empacotar todas as cadeias de caracteres para valores ANSI e deve procurar o procedimento sem
modificar seu nome durante a pesquisa.
Se nenhum modificador de conjunto de caracteres for especificado, Ansi será o padrão.
Comentários
O Ansi modificador pode ser usado neste contexto:
Instrução Declare
Confira também
Auto
Unicode
Palavras-chave
Assembly (Visual Basic)
27/09/2021 • 2 minutes to read
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.
Se um atributo pertencer não apenas ao elemento a seguir, mas ao assembly inteiro, você coloca o bloco de
atributo no início do arquivo de origem e identifica o atributo com a Assembly palavra-chave. Se se aplicar ao
módulo do assembly atual, você usará a palavra-chave do módulo .
Você também pode aplicar um atributo a um assembly no arquivo AssemblyInfo. vb, caso em que você não
precisa usar um bloco de atributos em seu arquivo de código-fonte principal.
Confira também
Modulo <keyword>
Visão geral de atributos
Async (Visual Basic)
02/10/2021 • 3 minutes to read
O Async modificador indica que o método ou a expressão lambda que ele modifica é assíncrono. Esses
métodos são chamados de métodos assíncronos.
Um método assíncrono fornece uma maneira conveniente de executar trabalhos potencialmente demorados
sem bloquear o thread do chamador. O chamador de um método assíncrono pode retomar seu trabalho sem
esperar que o método Async seja concluído.
NOTE
As palavras-chave Async e Await foram introduzidas no Visual Studio 2012. Para obter uma introdução à
programação assíncrona, consulte programação assíncrona com Async e Await.
O exemplo a seguir mostra a estrutura de um método assíncrono. Por convenção, os nomes de método
assíncronos terminam em "Async".
' . . .
' The return statement completes the task. Any method that is
' awaiting ExampleMethodAsync can now get the integer result.
Return exampleInt
End Function
Normalmente, um método modificado pela Async palavra-chave contém pelo menos uma expressão ou
instrução Await . O método é executado de forma síncrona até atingir o primeiro Await ponto em que ele é
suspenso até que a tarefa esperada seja concluída. Enquanto isso, o controle é retornado para o chamador do
método. Se o método não contiver uma Await expressão ou instrução, o método não será suspenso e será
executado como um método síncrono. Um aviso do compilador alerta você sobre os métodos assíncronos que
não contêm Await porque essa situação pode indicar um erro. Para obter mais informações, consulte o erro do
compilador.
A Async palavra-chave é uma palavra-chave não reservada. É uma palavra-chave quando modifica um método
ou uma expressão lambda. Em todos os outros contextos, ele é interpretado 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 .
Você especifica Task(Of TResult) para o tipo de retorno de um método assíncrono se a instrução Return do
método tiver um operando do tipo TResult. Você usará Task se nenhum valor significativo for retornado
quando o método for concluído. Ou seja, uma chamada para o método retorna um Task , mas quando o Task
é concluído, qualquer Await instrução que estiver aguardando o Task não produzirá um valor de resultado.
As sub-rotinas assíncronas são usadas principalmente para definir manipuladores de eventos em que um Sub
procedimento é necessário. O chamador de uma sub-rotina assíncrona não pode aguardar e não pode capturar
exceções que o método gera.
Para obter mais informações e exemplos, consulte Tipos de retorno assíncronos.
Exemplo
Os exemplos a seguir mostram um manipulador de eventos assíncrono, uma expressão lambda Async e um
método Async. Para obter um exemplo completo que usa esses elementos, consulte Walkthrough: 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 .
' Send the request to the Internet resource and wait for
' the response.
Using response As WebResponse = Await [Link]()
' Get the data stream that is associated with the specified URL.
Using responseStream As Stream = [Link]()
' Read the bytes in responseStream and copy them to content.
' CopyToAsync returns a Task, not a Task<T>.
Await [Link](content)
End Using
End Using
Confira também
AsyncStateMachineAttribute
Operador Await
Programação assíncrona com Async e Await
Walkthrough: acessando a Web usando Async e Await
Auto (Visual Basic)
28/09/2021 • 2 minutes to read
Especifica que Visual Basic cadeias de caracteres de acordo com .NET Framework com base no nome externo do
procedimento externo que está sendo declarado.
Quando você chama um procedimento definido fora do projeto, o Visual Basic compilador não tem acesso às
informações que ele deve ter para chamar o procedimento corretamente. Essas informações incluem 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 que ele usa. A instrução Declare cria uma referência a um procedimento
externo e fornece essas informações necessárias.
A charsetmodifier parte na Declare instrução fornece as informações do conjunto de caracteres para
marshaling de cadeias de caracteres durante uma chamada para o procedimento externo. Ele também afeta
como o Visual Basic pesquisa o arquivo externo para o nome do procedimento externo. O modificador
especifica que Visual Basic deve realizar marshal de cadeias de caracteres de acordo com as regras do .NET
Framework e que ele deve determinar o conjunto de caracteres base da plataforma de tempo de executar e
possivelmente modificar o nome do procedimento externo se a pesquisa inicial Auto falhar. Para obter mais
informações, consulte "Conjuntos de caracteres" na instrução Declare.
Se nenhum modificador de conjunto de caracteres for especificado, Ansi será o padrão.
Comentários
O Auto modificador pode ser usado neste contexto:
Instrução Declare
Confira também
Ansi
Unicode
Palavras-chave
ByRef (Visual Basic)
28/09/2021 • 2 minutes to read
Especifica que um argumento é passado de forma que o procedimento chamado possa alterar o valor de uma
variável subjacente ao argumento no código de chamada.
Comentários
O ByRef modificador pode ser usado nesses 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)
27/09/2021 • 2 minutes to read
Especifica que um argumento é passado por valor, de modo que o procedimento chamado ou a propriedade
não possa alterar o valor de uma variável subjacente ao argumento no código de chamada. Se nenhum
modificador for especificado, ByVal será o padrão.
NOTE
Como é o padrão, você não precisa especificar explicitamente a ByVal palavra-chave em assinaturas de método. Ele
tende a produzir código barulhento e, muitas vezes, leva à ByRef palavra-chave não-padrão que está sendo ignorada.
Comentários
O ByVal modificador pode ser usado nesses 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 ByVal mecanismo de passagem de parâmetro 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 altere o valor subjacente do argumento de referência, c1 , mas não protege os
campos e as propriedades acessíveis do c1 .
Module Module1
Sub Main()
' Declare an instance of the class and assign a value to its field.
Dim c1 As New Class1()
[Link] = 5
[Link]([Link])
' Output: 5
' ByVal does not prevent changing the value of a field or property.
ChangeFieldValue(c1)
[Link]([Link])
' Output: 500
[Link]()
End Sub
End Module
Confira também
Palavras-chave
Passar argumentos por valor e por referência
Padrão (Visual Basic)
27/09/2021 • 2 minutes to read
Identifica uma propriedade como a propriedade padrão de sua classe, estrutura ou interface.
Comentários
Uma classe, estrutura ou interface pode designar, no máximo, uma de suas propriedades como a propriedade
padrão, desde que a propriedade aceite pelo menos um parâmetro. se o código fizer uma referência a uma
classe ou estrutura sem especificar um membro, Visual Basic resolverá essa referência à propriedade padrão.
As propriedades padrão podem resultar em uma pequena redução em caracteres de código-fonte, mas podem
tornar seu código mais difícil de ler. Se o código de chamada não estiver familiarizado com sua classe ou
estrutura, quando ele fizer uma referência ao nome da classe ou da estrutura, ele não poderá ter certeza se essa
referência acessa a classe ou estrutura em si ou uma propriedade padrão. Isso pode levar a erros de compilador
ou erros de lógica de tempo de execução sutis.
Você pode, de certa forma, reduzir a chance de erros de propriedade padrão sempre usando a instrução Option
Strict para definir a verificação de tipo de compilador como On .
Se você estiver planejando usar uma classe ou estrutura predefinida em seu código, você deve determinar se ela
tem uma propriedade padrão e, em caso afirmativo, qual é seu nome.
Devido a essas desvantagens, você deve considerar não definir propriedades padrão. Para legibilidade de
código, você também deve considerar sempre referir-se a todas as propriedades explicitamente, até mesmo
propriedades padrão.
O Default modificador pode ser usado neste contexto:
Instrução Property
Confira também
Como declarar e chamar uma propriedade padrão no Visual Basic
Palavras-chave
Friend (Visual Basic)
27/09/2021 • 2 minutes to read
Especifica que um ou mais elementos de programação declarados são acessíveis somente de dentro do
assembly que contém sua declaração.
Comentários
Em muitos casos, você deseja que elementos de programação, como classes e estruturas, sejam usados por
todo o assembly, não apenas pelo componente que os declara. No entanto, talvez você não queira que eles
sejam 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 maneira, poderá declare-o usando o Friend modificador .
O código em outras classes, estruturas e módulos compilados no mesmo assembly pode acessar todos os
Friend elementos nesse assembly.
NOTE
Você também pode usar o modificador de acesso Amigo Protegido, que torna um membro de classe acessível de dentro
dessa classe, de classes derivadas e do mesmo assembly no qual a classe está 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 Protegido
Privado.
Para uma comparação de Friend e os outros modificadores de acesso, consulte Níveis de acesso no Visual
Basic.
NOTE
Você pode especificar que outro assembly é um assembly amigo, 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 Friend o modificador para permitir que outros elementos de programação dentro do
mesmo assembly acessem determinados membros.
Class CustomerInfo
End Sub
' Require that a customer identifier be specified for the public constructor.
Public Sub New(ByVal customerID As Integer)
p_CustomerID = customerID
End Sub
Uso
Você pode usar Friend o modificador 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
Protegido Privado
Amigo Protegido
Níveis de acesso no Visual Basic
Procedimentos
Estruturas
Objetos e classes
In (modificador genérico) (Visual Basic)
27/09/2021 • 2 minutes to read
Para parâmetros de tipo genérico, a palavra-chave In especifica que o parâmetro de tipo é contravariante.
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.
Para obter mais informações, consulte Covariância e contravariância.
Regras
Você pode usar a palavra-chave In em delegados e interfaces genéricas.
Um parâmetro de tipo pode ser declarado como contravariante em uma interface genérica ou delegado se ele
for usado apenas como um tipo de argumentos de método e não usado como um tipo de retorno de método.
ByRef os parâmetros não podem ser covariantes ou contravariantes.
A covariância e contravariância têm suporte para tipos de referência e não têm suporte para tipos de valor.
No Visual Basic, você não pode declarar eventos em interfaces contravariantes sem especificar o tipo delegado.
Além disso, interfaces contravariantes não podem ter classes aninhadas, enums ou estruturas, mas podem ter
interfaces aninhadas.
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 , o tipo T é contravariante, você pode atribuir um objeto do tipo a um objeto do
tipo sem usar nenhum método de conversão especial se herdar IComparer<T> IComparer(Of Person) de
IComparer(Of Employee) Employee Person .
Um delegado contravariante pode ser atribuído a outro delegado do mesmo tipo, mas com um parâmetro de
tipo genérico menos derivado.
Sub Main()
Dim iobj As IContravariant(Of Object) = New Sample(Of Object)()
Dim istr As IContravariant(Of String) = New Sample(Of String)()
Confira também
Variação em interfaces genéricas
Saída
Iterador (Visual Basic)
27/09/2021 • 2 minutes to read
Comentários
Um iterador executa uma iteração personalizada em uma coleção. Um iterador usa a instrução yield para
retornar cada elemento da coleção um de cada vez. Quando uma Yield instrução é alcançada, o local atual no
código é 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 uma função ou como um Get acessador de uma definição de
propriedade. O Iterator modificador é exibido na declaração da função ou Get acessador de iterador.
Você chama um iterador do código do cliente usando um para cada... Próxima instrução.
O tipo de retorno de uma função ou Get acessador de iterador pode ser IEnumerable , IEnumerable<T> ,
IEnumerator ou IEnumerator<T> .
Um iterador não pode ter nenhum ByRef parâmetro.
Um iterador não pode ocorrer em um evento, um construtor de instância, um construtor estático ou um
destruidor estático.
Um iterador pode ser uma função anônima. Para obter mais informações, consulte Iteradores.
Uso
O Iterator modificador pode ser usado nesses contextos:
Instrução Function
Instrução Property
Exemplo 1
O exemplo a seguir demonstra uma função de iterador. A função Iterator tem uma Yield instrução que está
dentro de um para... Próximo loop. Cada iteração do corpo de cada instrução no 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 .
Sub Main()
For Each number In Power(2, 8)
[Link](number & " ")
Next
' Output: 2 4 8 16 32 64 128 256
[Link]()
End Sub
Dim result = 1
Exemplo 2
O exemplo a seguir demonstra um acessador Get que é um iterador. O Iterator modificador está na
declaração de propriedade.
Sub Main()
Dim theGalaxies As New Galaxies
For Each theGalaxy In [Link]
With theGalaxy
[Link](.Name & " " & .MegaLightYears)
End With
Next
[Link]()
End Sub
Confira também
IteratorStateMachineAttribute
Iteradores
Instrução Yield
Chave (Visual Basic)
27/09/2021 • 3 minutes to read
A Key palavra-chave permite que você especifique o comportamento para propriedades de tipos anônimos.
Somente as propriedades designadas como propriedades de chave participam de testes de igualdade entre
instâncias de tipo anônimo ou cálculo de valores de código hash. Os valores das propriedades de chave não
podem ser alterados.
Designe uma propriedade de um tipo anônimo como uma propriedade de chave colocando a palavra-chave na
frente de sua Key declaração na lista de inicialização. No exemplo a seguir, Airline e são propriedades de
FlightNo chave, mas não Gate são.
Quando um novo tipo anônimo é criado, ele herda diretamente de Object . O compilador substitui três
membros herdados: Equals , GetHashCode e ToString . O código de substituição que é produzido para Equals e é
baseado em propriedades de GetHashCode chave. Se não houver nenhuma propriedade de chave no tipo
GetHashCode e Equals não for substituído.
Igualitário
Duas instâncias de tipo anônimo serão iguais se elas são instâncias do mesmo tipo e se os valores de suas
propriedades de chave são iguais. Nos exemplos a seguir, é igual a do exemplo anterior porque são instâncias
do mesmo tipo anônimo e têm valores correspondentes para suas flight2 flight1 propriedades de chave.
No entanto, flight3 não é igual a porque tem um valor diferente para uma propriedade de flight1 chave,
FlightNo . A flight4 instância não é do mesmo tipo que porque flight1 designa propriedades diferentes
como propriedades de chave.
Se duas instâncias são declaradas com apenas propriedades não chave, idênticas em nome, tipo, ordem e valor,
as duas instâncias não são iguais. Uma instância sem propriedades de chave é igual apenas a si mesma.
Para obter mais informações sobre as condições sob as quais duas instâncias de tipo anônimo são instâncias do
mesmo tipo anônimo, consulte Tipos anônimos.
Cálculo de código hash
Como , a função de hash definida em para um tipo anônimo é Equals baseada nas propriedades de chave do
GetHashCode tipo. Os exemplos a seguir mostram a interação entre propriedades de chave e valores de código
hash.
Instâncias de um tipo anônimo que têm os mesmos valores para todas as propriedades de chave têm o mesmo
valor de código hash, mesmo se as propriedades não chave não têm valores correspondentes. A instrução a
seguir retorna True .
[Link]([Link] = [Link])
Instâncias de um tipo anônimo que têm valores diferentes para uma ou mais propriedades de chave têm
valores de código hash diferentes. A instrução a seguir retorna False .
[Link]([Link] = [Link])
Instâncias de tipos anônimos que designam propriedades diferentes como propriedades de chave não são
instâncias do mesmo tipo. Eles têm valores de código hash diferentes, mesmo quando os nomes e valores de
todas as propriedades são os mesmos. A instrução a seguir retorna False .
[Link]([Link] = [Link])
Read-Only valores
Os valores das propriedades de chave não podem ser alterados. Por exemplo, nos flight1 exemplos anteriores,
os campos e são somente Airline FlightNo leitura, mas Gate podem ser alterados.
' The following statement will not compile, because FlightNo is a key
' property and cannot be changed.
' [Link] = 1234
'
' Gate is not a key property. Its value can be changed.
[Link] = "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)
27/09/2021 • 2 minutes to read
Especifica que um atributo no início de um arquivo de origem se aplica ao módulo do assembly atual.
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.
Se um atributo pertencer não apenas ao elemento a seguir, mas ao módulo do assembly atual, você coloca o
bloco de atributo no início do arquivo de origem e identifica o atributo com a Module palavra-chave. Se ele se
aplicar a todo o assembly, você usará a palavra-chave assembly .
O Module modificador não é o mesmo que a instrução do módulo.
Confira também
Assembly
Instrução Module
Visão geral de atributos
MustInherit (Visual Basic)
27/09/2021 • 2 minutes to read
Especifica que uma classe pode ser usada apenas como uma 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 salva as classes derivadas de terem que redefinir os elementos
comuns. Em alguns casos, essa funcionalidade comum não é completa o suficiente para tornar um objeto
acessível e cada classe derivada define a funcionalidade ausente. Nesse caso, você deseja que o código de
consumo crie objetos somente com base nas classes derivadas. Você usa MustInherit na classe base para
impor isso.
Outro uso de uma MustInherit classe é restringir uma variável a um conjunto de classes relacionadas. Você
pode definir uma classe base e derivar todas essas classes relacionadas 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, Visual Basic permitirá
que você atribua apenas um objeto de uma das classes derivadas a essa variável.
O .NET Framework define várias MustInherit classes, 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 de declaração. Você só pode MustInherit usar em uma Class instrução .
Modificadores combinados. Não é possível MustInherit especificar junto com na mesma
NotInheritable declaração.
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 . Eles herdam a definição acrossLine de , mas
devem definir a função porque esse cálculo é diferente para cada tipo de area forma.
Public MustInherit Class shape
Public acrossLine As Double
Public MustOverride Function area() As Double
End Class
Public Class circle : Inherits shape
Public Overrides Function area() As Double
Return [Link] * acrossLine
End Function
End Class
Public Class square : Inherits shape
Public Overrides Function area() As Double
Return acrossLine * acrossLine
End Function
End Class
Public Class consumeShapes
Public Sub makeShapes()
Dim shape1, shape2 As shape
shape1 = New circle
shape2 = New square
End Sub
End Class
Você pode declarar shape1 e como do tipo shape2 shape . No entanto, não é possível criar um objeto de
porque ele não tem shape a funcionalidade da função e está marcado como area MustInherit .
Como elas são declaradas como , as variáveis e são restritas shape a objetos das classes shape1 shape2
derivadas e circle square . Visual Basic permite que você atribua qualquer outro objeto a essas variáveis, o
que oferece um alto nível de segurança de tipo.
Uso
O MustInherit modificador 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)
28/09/2021 • 2 minutes to read
Especifica que uma propriedade ou procedimento não está implementado nesta classe e deve ser substituído
em uma classe derivada antes que possa ser usado.
Comentários
Você pode usar MustOverride somente em uma instrução de declaração de propriedade ou de procedimento. A
propriedade ou procedimento que especifica MustOverride deve ser um membro de uma classe e a classe deve
ser marcada como MustInherit.
Regras
Declaração incompleta. Quando você especifica MustOverride , você não fornece nenhuma linha
adicional de código para a propriedade ou procedimento, nem mesmo a End Function instrução,
End Property ou End Sub .
Modificadores combinados. Você não pode especificar MustOverride juntos com NotOverridable ,
Overridable ou Shared na mesma declaração.
Confira também
NotOverridable
Substituível
Substituições
MustInherit
Palavras-chave
Sombreamento no Visual Basic
Narrowing (Visual Basic)
27/09/2021 • 2 minutes to read
Indica que um operador de conversão ( ) converte uma classe ou estrutura em um tipo que pode não ser capaz
de conter alguns dos valores possíveis da CType classe ou estrutura original.
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)
27/09/2021 • 2 minutes to read
Especifica que uma classe não pode ser usada como uma classe base.
Comentários
Termos alternativos . Uma classe que não pode ser herdada às vezes é chamada de classe sealed .
O NotInheritable modificador pode ser usado neste contexto:
Instrução Class
Confira também
Instrução Inherits
MustInherit
Palavras-chave
NotOverridable (Visual Basic)
27/09/2021 • 2 minutes to read
Especifica que uma propriedade ou procedimento não pode ser substituído em uma classe derivada.
Comentários
O NotOverridable modificador impede que uma propriedade ou método seja substituído em uma classe
derivada. O modificador Overridable permite que uma propriedade ou método em uma classe seja substituído
em uma classe derivada. Para obter mais informações, consulte Noções básicas de herança.
Se o modificador ou não for especificado, a configuração padrão dependerá se a propriedade ou o método
substituirá uma propriedade ou Overridable NotOverridable método de classe base. Se a propriedade ou o
método substituir uma propriedade ou método de classe base, a configuração padrão será Overridable ; caso
contrário, será NotOverridable .
Um elemento que não pode ser substituído às vezes é chamado de elemento sealed.
Você só pode NotOverridable usar em uma instrução de declaração de propriedade ou procedimento. Você
pode especificar somente em uma propriedade ou procedimento que substitui outra propriedade ou
procedimento, ou NotOverridable seja, apenas em combinação com Overrides .
Modificadores combinados
Não é possível Overridable especificar ou para um NotOverridable Private método.
Não é possível NotOverridable especificar junto com , ou na mesma MustOverride Overridable Shared
declaração.
Uso
O NotOverridable modificador pode ser usado nesses 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)
27/09/2021 • 2 minutes to read
Especifica que um argumento de procedimento pode ser omitido quando o procedimento é chamado.
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 value será usado como o
valor padrão do parâmetro .
Se a lista de parâmetros contiver um parâmetro opcional, todos os parâmetros a seguir também deverão ser
opcionais.
O Optional modificador pode ser usado nesses contextos:
Instrução Declare
Instrução Function
Instrução Property
Instrução Sub
NOTE
Ao chamar um procedimento com ou sem parâmetros opcionais, você pode passar argumentos por posição ou por
nome. Para obter mais informações, consulte Passando argumentos por posição e por nome.
NOTE
Você também pode definir um procedimento com parâmetros opcionais usando sobrecarga. Se você tiver um parâmetro
opcional, poderá definir duas versões sobrecarregadas do procedimento, uma que aceita o parâmetro e outra que não.
Para obter mais informações, consulte Sobrecarga de procedimento.
Exemplo 1
O exemplo a seguir define um procedimento que tem um parâmetro opcional.
Public Function FindMatches(ByRef values As List(Of String),
ByVal searchString As String,
Optional ByVal matchCase As Boolean = False) As List(Of String)
If matchCase Then
results = From v In values
Where [Link](searchString)
Else
results = From v In values
Where UCase(v).Contains(UCase(searchString))
End If
Return [Link]()
End Function
Exemplo 2
O exemplo a seguir demonstra como chamar um procedimento com argumentos passados por posição e com
argumentos passados por nome. O procedimento tem dois parâmetros opcionais.
' Omit one optional argument by holding its place with a comma.
studentInfo("Mary", , #9/21/1981#)
Confira também
Lista de parâmetros
Parâmetros Opcionais
Palavras-chave
Out (modificador genérico) (Visual Basic)
27/09/2021 • 2 minutes to read
Para parâmetros de tipo genérico, a Out palavra-chave especifica que o tipo é covariante.
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.
Para obter mais informações, consulte Covariância e contravariância.
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:
O parâmetro de tipo é usado apenas como um tipo de retorno dos métodos de interface e não é usado
como um tipo de argumentos de método.
NOTE
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 parâmetro de tipo pode ser declarado covariante se for usado apenas como um
tipo de retorno de 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.
No Visual Basic, você não pode declarar eventos em interfaces covariantes sem especificar o tipo delegado.
Além disso, interfaces covariantes não podem ter classes aninhadas, enums ou estruturas, mas podem ter
interfaces aninhadas.
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.
Sub Main()
Dim iobj As ICovariant(Of Object) = New Sample(Of Object)()
Dim istr As ICovariant(Of String) = New Sample(Of String)()
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.
Especifica que uma propriedade ou procedimento redeclares uma ou mais propriedades ou procedimentos
existentes com o mesmo nome.
Comentários
Sobrecarga é a prática de fornecer mais de uma definição para uma determinada propriedade ou nome de
procedimento no mesmo escopo. A reclatura de uma propriedade ou procedimento com uma assinatura
diferente às vezes é chamada de ocultação por assinatura.
Regras
Contexto de declaração. Você só pode Overloads usar em uma instrução de declaração de
propriedade ou procedimento.
Modificadores combinados. Não é possível especificar Overloads junto com Sombras na mesma
declaração de procedimento.
Diferenças necessárias. A assinatura nessa declaração deve ser diferente da assinatura de cada
propriedade ou procedimento que ela sobrecarrega. A assinatura consiste no nome da propriedade ou
do procedimento junto com o seguinte:
o número de parâmetros
a ordem dos parâmetros
os tipos de dados dos parâmetros
o número de parâmetros de tipo (para um procedimento genérico)
o tipo de retorno (somente para um procedimento de operador de conversão)
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 diferencie qual versão usar quando o
código chamar a propriedade ou o procedimento.
Diferenças não permitidos. Alterar uma ou mais das seguintes não é válida para sobrecarregar uma
propriedade ou procedimento, pois eles não fazem parte da assinatura:
se ele retorna ou não um valor (para um procedimento)
o tipo de dados do valor de retorno (exceto para um operador de conversão)
os nomes dos parâmetros ou parâmetros de tipo
as restrições nos parâmetros de tipo (para um procedimento genérico)
palavras-chave do modificador de parâmetro ByRef (como ou Optional )
palavras-chave do modificador de propriedade ou procedimento (como Public ou Shared )
Modificador opcional. Você não precisa usar o modificador ao definir várias propriedades ou
procedimentos sobrecarregados Overloads na mesma classe. No entanto, se Overloads você usar em
uma das declarações, deverá usá-la em todas elas.
Sombreamento e sobrecarga. Overloads também pode ser usado para sombrear um membro
existente ou conjunto de membros sobrecarregados, em uma classe base. Quando você usa dessa
maneira, declara a propriedade ou o método com o mesmo nome e a mesma lista de parâmetros que o
membro da classe base e não Overloads fornece a Shadows palavra-chave .
Se você usar Overrides , o compilador adiciona implicitamente para que suas APIs de biblioteca Overloads
funcionem com C# com mais facilidade.
O Overloads modificador pode ser usado nesses contextos:
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)
27/09/2021 • 2 minutes to read
Especifica que uma propriedade ou procedimento pode ser substituído por uma propriedade ou procedimento
nomeado de forma idêntica em uma classe derivada.
Comentários
O Overridable modificador permite que uma propriedade ou método em uma classe seja substituído em uma
classe derivada. O modificador NotOverridable impede que uma propriedade ou método seja substituído em
uma classe derivada. Para obter mais informações, consulte Noções básicas de herança.
Se o modificador ou não for especificado, a configuração padrão dependerá se a propriedade ou o método
substituirá uma propriedade ou Overridable NotOverridable método de classe base. Se a propriedade ou o
método substituir uma propriedade ou método de classe base, a configuração padrão será Overridable ; caso
contrário, será NotOverridable .
Você pode sombrear ou substituir para redefinir um elemento herdado, mas há diferenças significativas entre as
duas abordagens. Para obter mais informações, consulte Sombreamento Visual Basic.
Um elemento que pode ser substituído às vezes é chamado de elemento virtual. Se pode ser substituído, mas
não precisa ser, às vezes também é chamado de elemento concreto.
Você só pode Overridable usar em uma instrução de declaração de propriedade ou procedimento.
Modificadores combinados
Não é possível Overridable especificar ou para um NotOverridable Private método.
Não é possível Overridable especificar junto com , ou na mesma MustOverride NotOverridable Shared
declaração.
Como um elemento de substituição é implicitamente substituído, você não pode combinar Overridable com
Overrides .
Uso
O Overridable modificador pode ser usado nesses 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)
27/09/2021 • 2 minutes to read
Especifica que uma propriedade ou procedimento substitui uma propriedade nomeada de forma idêntica ou
procedimento herdado de uma classe base.
Regras
Contexto de declaração. Você pode usar Overrides somente em uma instrução de declaração de
propriedade ou de procedimento.
Modificadores combinados. Você não pode especificar Overrides juntos com Shadows ou Shared na
mesma declaração. Como um elemento de substituição é implicitamente substituível, você não pode
combinar Overridable com Overrides .
Assinaturas correspondentes. A assinatura dessa declaração deve corresponder exatamente à
assinatura da propriedade ou do procedimento que ela substitui. Isso significa que as listas de
parâmetros devem ter o mesmo número de parâmetros, na mesma ordem, com os mesmos tipos de
dados.
Além da assinatura, a declaração de substituição também deve corresponder exatamente ao seguinte:
O nível de acesso
O tipo de retorno, se houver
Assinaturas genéricas. Para um procedimento genérico, a assinatura inclui o número de parâmetros
de tipo. Portanto, a declaração de substituição também deve corresponder à versão da classe base nesse
aspecto.
Correspondência adicional. Além de corresponder à assinatura da versão da classe base, essa
declaração também deve corresponder aos seguintes aspectos:
Modificador de nível de acesso (como público)
Mecanismo de passagem de cada parâmetro (ByVal ou ByRef)
Listas de restrição em cada parâmetro de tipo de um procedimento genérico
Sombreamento e substituição. Sombreamento e substituição redefinem um elemento herdado, mas
há diferenças significativas entre as duas abordagens. Para obter mais informações, consulte
sombreamento em Visual Basic.
Se você usar Overrides o, o compilador adicionará implicitamente Overloads para que suas APIs de biblioteca
trabalhem com o C# mais facilmente.
O Overrides modificador pode ser usado nesses contextos:
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)
27/09/2021 • 2 minutes to read
Especifica que um parâmetro de procedimento usa uma matriz opcional de elementos do tipo especificado.
ParamArray pode ser usado somente no último parâmetro de uma lista de parâmetros.
Comentários
ParamArray permite que você passe um número arbitrário de argumentos para o procedimento. Um
ParamArray parâmetro é sempre declarado usando ByVal.
Você pode fornecer um ou mais argumentos a um ParamArray parâmetro passando uma matriz do tipo de
dados apropriado, uma lista de valores separados por vírgula ou nada. Para obter detalhes, consulte "chamando
um ParamArray" em matrizes de parâmetros.
IMPORTANT
Sempre que você lida com uma matriz que pode ser indefinidamente grande, há um risco de sobreexecutar alguma
capacidade interna de seu aplicativo. Se você aceitar uma matriz de parâmetros do código de chamada, deverá testar seu
comprimento e tomar as medidas apropriadas se for muito grande para seu aplicativo.
Confira também
Palavras-chave
Matrizes de parâmetros
Parcial (Visual Basic)
28/09/2021 • 3 minutes to read
NOTE
Visual Basic dá suporte a métodos parciais, que normalmente são implementados em classes parciais. Para obter mais
informações, consulte Métodos parciais e subinstrução.
Syntax
[ <attrlist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] _
Partial { Class | Structure | Interface | Module } name [ (Of typelist) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ variabledeclarations ]
[ proceduredeclarations ]
{ End Class | End Structure }
Partes
T ERM O DEF IN IÇ Ã O
End Class ou End Structure Termina essa definição Class parcial Structure ou .
Comentários
Visual Basic usa definições de classe parcial para separar o código gerado do código gerado 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, como aquelas 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 único tipo em duas ou mais
declarações. Portanto, na maioria dos casos, você não precisa da Partial palavra-chave .
Para capacidade de leitura, cada declaração parcial de um tipo deve incluir a Partial palavra-chave . O
compilador permite que no máximo uma declaração parcial omita a palavra-chave ; se dois ou mais
omitirem-no, o compilador sinaliza 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 a todo o tipo e cada membro de cada definição
parcial está disponível para todo o tipo.
Promoção de tipo não permitida para tipos parciais em módulos. Se uma definição parcial
estiver dentro de um módulo, a promoção de tipo desse tipo será automaticamente desacodado. Nesse
caso, um conjunto de definições parciais pode causar resultados inesperados e até mesmo erros do
compilador. Para obter mais informações, consulte Promoção de tipo.
O compilador mescla definições parciais somente quando seus caminhos totalmente qualificados são
idênticos.
A Partial palavra-chave pode ser usada nesses contextos:
Instrução Class
Instrução Structure
Exemplo
O exemplo a seguir divide a definição da classe em duas declarações, cada uma sampleClass das quais define
um procedimento Sub diferente.
As duas definições parciais no exemplo anterior podem estar no mesmo arquivo de origem ou em dois arquivos
de origem diferentes.
Confira também
Instrução Class
Instrução Structure
Tipo de promoção
Sombras
Tipos genéricos no Visual Basic
Métodos Parciais
Particular (Visual Basic)
27/09/2021 • 2 minutes to read
Especifica que um ou mais elementos de programação declarados são acessíveis somente de dentro de seu
contexto de declaração, incluindo de dentro de qualquer tipo contido.
Comentários
Se um elemento de programação representar a funcionalidade proprietária ou contiver dados confidenciais,
você geralmente desejará limitar o acesso a ele o mais estritamente possível. Você Obtém a limitação máxima
permitindo apenas o módulo, a classe ou a estrutura que a define para acessá-lo. Para limitar o acesso a um
elemento dessa forma, você pode declará-lo com Private .
NOTE
Você também pode usar o modificador de acesso protegido privado , que torna um membro acessível de dentro dessa
classe e de classes derivadas localizadas em seu assembly recipiente.
Regras
Contexto de declaração. Você pode usar Private somente no nível do módulo. Isso significa que o
contexto de declaração para um Private elemento deve ser um módulo, uma classe ou uma 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 seus Private
elementos. Isso inclui o 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 da declaração pode acessar seus
Private elementos.
Confira também
Público
Protected
Friend
Particular protegido
Amigo Protegido
Níveis de acesso no Visual Basic
Procedimentos
Estruturas
Objetos e classes
Privado protegido (Visual Basic)
27/09/2021 • 2 minutes to read
o Private Protected modificador de acesso é suportado pelo Visual Basic 15,5 e posterior. para usá-lo, você
pode adicionar o seguinte elemento ao seu arquivo de Visual Basic projeto ( * . vbproj). desde que Visual Basic
15,5 ou posterior esteja instalado no seu sistema, ele permite que você aproveite todos os recursos de
linguagem suportados pela versão mais recente do compilador de Visual Basic:
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
para obter mais informações, consulte definindo a versão do idioma do Visual Basic.
NOTE
em Visual Studio, a seleção de ajuda F1 em private protected fornece ajuda para privado ou protegido. O IDE escolhe
o único token sob o cursor em vez da palavra composta.
Regras
Contexto de declaração. Você pode usar Private Protected somente no nível de classe. Isso significa que
o contexto de declaração para um Protected elemento deve 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 seus elementos. O código em qualquer
classe que deriva de uma classe base e está contido no mesmo assembly pode acessar todos os
Private Protected elementos da classe base. No entanto, o código em qualquer classe derivada de uma
classe base e está contido em um assembly diferente não pode acessar os elementos da classe base
Private Protected .
Confira também
Público
Protected
Friend
Privado
Amigo Protegido
Níveis de acesso no Visual Basic
Procedimentos
Estruturas
Objetos e classes
Protegido (Visual Basic)
27/09/2021 • 2 minutes to read
Um modificador de acesso de membro que especifica que um ou mais elementos de programação declarados
são acessíveis somente de dentro de sua própria classe ou de uma classe derivada.
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 essas classes derivadas 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 maneira, você pode declará-lo com Protected .
NOTE
O Protected modificador de acesso pode ser combinado com dois outros modificadores:
O modificador Friend protegido torna um membro de classe acessível de dentro dessa classe, de classes derivadas e do
mesmo assembly no qual a classe é definida.
O modificador particular protegido torna um membro de classe acessível por tipos derivados, mas somente dentro de
seu assembly de contenção.
Regras
Contexto de declaração. Você pode usar Protected somente no nível de classe. Isso significa que o contexto
de declaração para um Protected elemento deve 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 seus elementos. O código em qualquer
classe derivada de uma classe base pode acessar todos os Protected elementos da classe base. Isso é
verdadeiro para todas as gerações de derivação. Isso significa que uma classe pode acessar Protected
elementos da classe base da classe base e assim por diante.
O acesso protegido não é um superconjunto ou subconjunto de acesso Friend.
Modificadores de acesso. As palavras-chave que especificam o nível de acesso são chamadas de
modificadores de acesso. Para obter uma comparação dos modificadores de acesso, consulte níveis de
acesso em Visual Basic.
O Protected modificador pode ser usado nesses 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 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)
27/09/2021 • 2 minutes to read
NOTE
em Visual Studio, a seleção de ajuda F1 em Protected Friend fornece ajuda para o protegido ou amigo. O IDE escolhe
o único token sob o cursor em vez da palavra composta.
Confira também
Público
Protected
Friend
Privado
Particular protegido
Níveis de acesso no Visual Basic
Procedimentos
Estruturas
Objetos e classes
Público (Visual Basic)
28/09/2021 • 2 minutes to read
Especifica que um ou mais elementos de programação declarados não têm restrições de acesso.
Comentários
Se você estiver publicando um componente ou um 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 declare-o 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 como padrão se você não o declarar de outra Public forma.
Regras
Contexto de declaração. Você pode usar Public somente no nível de módulo, interface ou namespace.
Isso significa que o contexto de declaração de um elemento deve ser um arquivo de origem, namespace,
interface, módulo, classe ou estrutura e Public não pode ser um procedimento.
Comportamento
Nível de acesso. Todo o código que pode acessar um módulo, classe ou estrutura pode acessar seus
Public elementos.
Acesso padrão. As variáveis locais dentro de um procedimento assumem como padrão o acesso
público e você não pode usar nenhum modificador de acesso neles.
Modificadores de acesso. As palavras-chave que especificam o nível de acesso são chamadas de
modificadores de acesso. Para uma comparação dos modificadores de acesso, consulte Níveis de acesso
no Visual Basic.
O Public modificador pode ser usado nesses 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 Operator
Instrução Property
Instrução Structure
Instrução Sub
Confira também
Protegido
Friend
Privado
Protegido Privado
Amigo Protegido
Níveis de acesso no Visual Basic
Procedimentos
Estruturas
Objetos e classes
ReadOnly (Visual Basic)
27/09/2021 • 2 minutes to read
Especifica que uma variável ou propriedade pode ser lida, mas não gravada.
Comentários
Regras
Contexto de declaração. Você pode usar ReadOnly somente no nível do módulo. Isso significa que o
contexto de declaração para um ReadOnly elemento deve ser uma classe, estrutura ou módulo e não
pode ser um arquivo de origem, namespace ou procedimento.
Modificadores combinados. Você não pode especificar ReadOnly juntos com Static na mesma
declaração.
Atribuindo um valor. O código que consome uma ReadOnly propriedade não pode definir seu valor.
Mas o código que tem acesso ao armazenamento subjacente pode atribuir ou alterar o valor a qualquer
momento.
Você pode atribuir um valor a uma ReadOnly variável somente em sua declaração ou no construtor de
uma classe ou estrutura na qual ela está definida.
IMPORTANT
Se o tipo de dados da variável for um tipo de referência, como uma matriz ou instância de classe, seus membros poderão
ser alterados mesmo que a própria variável seja ReadOnly . O exemplo a seguir ilustra essa situação.
Quando inicializado, a matriz apontada characterArray() mantém "x", "y" e "z". Como a variável
characterArray é ReadOnly , você não pode alterar seu 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 dos membros da
matriz. Após uma chamada para o procedimento ChangeArrayElement , a matriz apontada characterArray()
mantém "x", "M" e "z".
Observe que isso é semelhante à declaração de um parâmetro de procedimento como ByVal, o que impede que
o procedimento altere o próprio argumento de chamada, mas permite alterar seus membros.
Exemplo
O exemplo a seguir define uma ReadOnly propriedade para a data em que um funcionário foi contratado. A
classe armazena o valor da propriedade internamente como uma Private variável e somente 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.
Class employee
' Only code inside class employee can change the value of hireDateValue.
Private hireDateValue As Date
' Any code that can access class employee can read property dateHired.
Public ReadOnly Property dateHired() As Date
Get
Return hireDateValue
End Get
End Property
End Class
Confira também
WriteOnly
Palavras-chave
Sombras (Visual Basic)
28/09/2021 • 2 minutes to read
Especifica que um elemento de programação declarado redeclares e oculta um elemento nomeado de forma
idêntica, ou conjunto de elementos sobrecarregados, em uma classe base.
Comentários
A principal finalidade do sombreamento (que também é conhecido como ocultação por nome) é preservar a
definição de seus membros de classe. A classe base pode passar por uma alteração que cria um elemento com o
mesmo nome que você já definiu. Se isso acontecer, o modificador força as referências por meio de sua classe a
serem resolvidas para o membro que você definiu, em vez de para Shadows o novo elemento de classe base.
O sombreamento e a substituição redefinem um elemento herdado, mas há diferenças significativas entre as
duas abordagens. Para obter mais informações, consulte Sombreamento Visual Basic.
Regras
Contexto de declaração. Você só pode Shadows usar no nível de classe. Isso significa que o contexto
de declaração de um elemento deve ser uma classe e não pode ser um arquivo Shadows de origem,
namespace, interface, módulo, estrutura ou procedimento.
Você pode declarar apenas um elemento de sombreamento em uma única instrução de declaração.
Modificadores combinados. Não é possível Shadows especificar junto com , ou na mesma Overloads
Overrides Static declaração.
Tipos de elemento. Você pode sombreamento de qualquer tipo de elemento declarado com qualquer
outro tipo. Se você sombrear uma propriedade ou procedimento com outra propriedade ou
procedimento, os parâmetros e o tipo de retorno não terão que corresponder àqueles na propriedade ou
procedimento da classe base.
Acessar. O elemento sombreado na classe base normalmente não está disponível de dentro da classe
derivada que o sombrea. No entanto, as considerações a seguir se aplicam.
Se o elemento de sombreamento não estiver acessível do código que se refere a ele, a referência
será resolvida para o elemento sombreado. Por exemplo, se um elemento sombra de um elemento
de classe base, o código que não tem permissão para acessar o elemento acessa Private o
elemento de classe base em vez Private disso.
Se você sombrear um elemento, ainda poderá acessar o elemento sombreado por meio de um
objeto declarado com o tipo da classe base. Você também pode acessá-lo por meio de MyBase .
O Shadows modificador pode ser usado nesses 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 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)
27/09/2021 • 3 minutes to read
Especifica que um ou mais elementos de programação declarados estão associados a uma classe ou estrutura
em tamanho grande, e não com uma instância específica da classe ou estrutura.
Regras
Contexto de declaração. Você pode usar Shared somente no nível do módulo. Isso significa que o
contexto de declaração de um Shared elemento deve ser uma classe ou estrutura e não pode ser um
arquivo de origem, namespace ou procedimento.
Modificadores combinados. Você não pode especificar Shared junto com Overrides, Overridable,
NotOverridable, MustOverrideou static na mesma declaração.
Acess. Você acessa um elemento compartilhado qualificando-o com seu nome de classe ou estrutura,
não com o nome da variável de uma instância específica de sua classe ou estrutura. Você não precisa
nem criar uma instância de uma classe ou estrutura para acessar seus membros compartilhados.
O exemplo a seguir chama o procedimento compartilhado IsNaN exposto pela Double estrutura.
Compar tilhamento implícito. Você não pode usar o Shared modificador em uma instrução const,
mas as constantes são compartilhadas implicitamente. Da mesma forma, você não pode declarar um
membro de um módulo ou uma interface para ser Shared , mas eles são compartilhados implicitamente.
Comportamento
Armazenamento. Uma variável ou evento compartilhado é armazenado na memória apenas uma vez,
independentemente de quantas instâncias você criar de sua classe ou estrutura. Da mesma forma, um
procedimento compartilhado ou propriedade mantém apenas um conjunto de variáveis locais.
Acessando por meio de uma variável de instância. É possível acessar um elemento compartilhado
qualificando-o com o nome de uma variável que contém uma instância específica de sua classe ou
estrutura. Embora isso normalmente funcione conforme o esperado, o compilador gera uma mensagem
de aviso e faz o acesso por meio do nome da classe ou da estrutura em vez da variável.
Acessando por meio de uma expressão de instância. Se você acessar um elemento compartilhado
por meio de uma expressão que retorna uma instância de sua classe ou estrutura, o compilador fará o
acesso por meio do nome da classe ou da estrutura em vez de avaliar a expressão. Esse acesso produz
resultados inesperados se você pretendia que a expressão execute outras ações, bem como o retorno da
instância. O exemplo a seguir ilustra essa situação.
Sub Main()
' The following line is the preferred way to access Total.
[Link] = 10
No exemplo anterior, o compilador gera uma mensagem de aviso duas vezes o código acessa a
propriedade compartilhada Total por meio de uma instância. Em cada caso, ele faz o acesso
diretamente por meio da classe ShareTotal e não faz uso de nenhuma instância. No caso da chamada
pretendida para o procedimento ReturnClass , isso significa que ele não gera uma chamada para
ReturnClass , portanto, a ação adicional de exibir "função ReturnClass () chamada" não é executada.
Confira também
Sombras
Estático
Tempo de vida no Visual Basic
Procedimentos
Estruturas
Objetos e classes
Estático (Visual Basic)
28/09/2021 • 2 minutes to read
Especifica que uma ou mais variáveis locais declaradas devem continuar a existir e manter seus valores mais
recentes após o término do procedimento no qual elas são declaradas.
Comentários
Normalmente, uma variável local em um procedimento deixa de existir assim que o procedimento para. Uma
variável estática continua existindo e retém seu valor mais recente. Na próxima vez em que o código chamar o
procedimento, a variável não será reinicializada e ainda manterá o valor mais recente que você atribuiu a ela.
Uma variável estática continua existindo durante o tempo de vida da classe ou do módulo em que ela está
definida.
Regras
Contexto de declaração. Você pode usar Static somente em variáveis locais. Isso significa que o
contexto de declaração para uma Static variável deve ser um procedimento ou um bloco em um
procedimento, e não pode ser um arquivo de origem, namespace, classe, estrutura ou módulo.
Você não pode usar Static dentro de um procedimento de estrutura.
Os tipos de dados de Static variáveis locais não podem ser inferidos. Para obter mais informações,
consulte inferência de tipo local.
Modificadores combinados. Você não pode especificar Static juntos com ReadOnly , Shadows ou
Shared na mesma declaração.
Comportamento
Quando você declara uma variável estática em um Shared procedimento, apenas uma cópia da variável estática
está disponível para o aplicativo inteiro. Você chama um Shared procedimento 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 .
A Static variável totalSales é inicializada como 0 somente uma vez. Cada vez que você inserir updateSales ,
totalSales ainda terá o valor mais recente que você calculou para ele.
O Static modificador pode ser usado neste contexto:
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)
27/09/2021 • 2 minutes to read
especifica que Visual Basic deve realizar marshaling de todas as cadeias de caracteres para valores Unicode,
independentemente do nome do procedimento externo que está sendo declarado.
quando você chama um procedimento definido fora do seu projeto, o compilador Visual Basic não tem acesso
às informações que ele deve ter para chamar o procedimento corretamente. Essas informações incluem onde o
procedimento está localizado, como ele é identificado, sua sequência de chamada e tipo de retorno e o conjunto
de caracteres da cadeia de caracteres que ele usa. A instrução Declare cria uma referência a um procedimento
externo e fornece essas informações necessárias.
A charsetmodifier parte na Declare instrução fornece as informações do conjunto de caracteres para realizar
marshaling de cadeias durante uma chamada para o procedimento externo. ele também afeta como Visual Basic
pesquisa o nome do procedimento externo no arquivo externo. o Unicode modificador especifica que Visual
Basic deve realizar marshaling de todas as cadeias de caracteres para valores Unicode e deve procurar o
procedimento sem modificar seu nome durante a pesquisa.
Se nenhum modificador de conjunto de caracteres for especificado, Ansi será o padrão.
Comentários
O Unicode modificador pode ser usado neste contexto:
Instrução Declare
Confira também
ANSI
Auto
Palavras-chave
Widening (Visual Basic)
27/09/2021 • 2 minutes to read
Indica que um operador de conversão ( ) converte uma classe ou estrutura em um tipo que pode conter todos
os valores possíveis da CType classe ou estrutura original.
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)
28/09/2021 • 2 minutes to read
Especifica que uma ou mais variáveis de membro declaradas se referem a uma instância de uma classe que
pode autar eventos.
Comentários
Quando uma variável é definida usando , você pode especificar declarativamente que um método trata os
eventos da variável WithEvents usando a Handles palavra-chave .
Você só pode WithEvents usar no nível de classe ou módulo. Isso significa que o contexto de declaração para
uma variável deve ser uma classe ou módulo e não pode ser um arquivo WithEvents de origem, namespace,
estrutura ou procedimento.
Você não pode usar WithEvents em um membro de estrutura.
Você pode declarar apenas variáveis individuais — não matrizes — com WithEvents .
Regras
Tipos de elemento. Você deve declarar WithEvents variáveis como variáveis de objeto para que elas possam
aceitar instâncias de classe. No entanto, você não pode declare-os como Object . Você deve declare-os como a
classe específica que pode autar os eventos.
O WithEvents modificador pode ser usado neste contexto: Instrução Dim
Exemplo
Dim WithEvents app As Application
Confira também
Alças
Palavras-chave
Eventos
WriteOnly (Visual Basic)
27/09/2021 • 2 minutes to read
Especifica que uma propriedade pode ser gravada, mas não lida.
Comentários
Regras
Contexto de declaração. Você pode usar WriteOnly somente no nível do módulo. Isso significa que o
contexto de declaração para uma WriteOnly propriedade deve ser uma classe, estrutura ou módulo e não pode
ser um arquivo de origem, namespace ou procedimento.
Você pode declarar uma propriedade como WriteOnly , mas não uma variável.
IMPORTANT
Ao definir e usar uma WriteOnly propriedade, considere as seguintes medidas de proteção adicionais:
Sobrecarga. Se a propriedade for um membro de uma classe, permita que ela seja padronizada como
não substituívele não a declare Overridable ou MustOverride . Isso impede que uma classe derivada faça
acesso indesejado por meio de uma substituição.
Nível de acesso. Se você mantiver os dados confidenciais da propriedade em uma ou mais variáveis,
declare-as como particulares para que nenhum outro código possa acessá-las.
Encripta. Armazene todos os dados confidenciais em formato criptografado em vez de em texto sem
formatação. Se um código mal-intencionado tiver acesso a essa área de memória, será mais difícil fazer o
uso dos dados. A criptografia também é útil se for necessário serializar os dados confidenciais.
Redefinir. Quando a classe, a estrutura ou o módulo que define a propriedade está sendo encerrado,
redefina os dados confidenciais para valores padrão ou para outros valores sem sentido. Isso fornece
proteção extra quando essa área de memória é liberada para acesso geral.
Persistência. Não persista nenhum dado confidencial, por exemplo, no disco, se você puder evitá-lo.
Além disso, não grave nenhum dado confidencial na área de transferência.
O WriteOnly modificador pode ser usado neste contexto:
Instrução Property
Confira também
ReadOnly (somente-leitura)
Privado
Palavras-chave
Módulos (Visual Basic)
27/09/2021 • 2 minutes to read
Visual Basic fornece vários módulos que permitem simplificar tarefas comuns em seu código, incluindo
manipular cadeias de caracteres, executar cálculos matemáticos, obter informações do sistema, executar
operações de arquivo e diretório e assim por diante. A tabela a seguir lista os módulos fornecidos Visual Basic.
Confira também
Referência da linguagem Visual Basic
Palavra-chave Nothing (Visual Basic)
27/09/2021 • 4 minutes to read
Representa o valor padrão de qualquer tipo de dados. Para tipos de referência, o valor padrão é a null
referência. Para tipos de valor, o valor padrão depende se o tipo de valor é anulável.
NOTE
para tipos de valores não anuláveis, Nothing em Visual Basic difere de null em C#. em 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 seu
tipo declarado. No 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 um 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 Value 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. Os 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 Value, o comportamento de Nothing dependerá se a variável é de um tipo de
dados anulável. Para representar um tipo de valor anulável, adicione um ? modificador ao nome do tipo. A
atribuição Nothing a uma variável anulável define o valor como null . Para obter mais informações e
exemplos, consulte tipos de valor anulável.
Se uma variável for de um tipo de valor que não permite valor nulo, Nothing a atribuição 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 isso para tipos escalares.
Module Module1
Sub Main()
Dim ts As TestStruct
Dim i As Integer
Dim b As Boolean
[Link]($"[Link]: {[Link]}")
[Link]($"[Link]: {[Link]}")
[Link]($"i: {i}")
[Link]($"b: {b}")
[Link]()
End Sub
Se uma variável for de um tipo de referência, a atribuição Nothing à variável a definirá como uma null
referência do tipo da variável. Uma variável que é definida como uma null referência não está associada a
nenhum objeto. O exemplo a seguir demonstra este:
Module Module1
Sub Main()
End Sub
Class TestClass
Public Field1 As Integer
' . . .
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 .
para cadeias de caracteres em Visual Basic, a cadeia vazia é igual a Nothing . Portanto, "" = Nothing é
verdadeiro.
O exemplo a seguir mostra as comparações que usam os Is IsNot operadores e:
Module Module1
Sub Main()
n = 4
[Link](n Is Nothing)
' Output: False
n = Nothing
[Link](n IsNot Nothing)
' Output: False
[Link]()
End Sub
Class TestClass
Public Field1 As Integer
Private field2 As Boolean
End Class
End Module
Se você declarar uma variável sem usar uma As cláusula e defini-la como Nothing , a variável terá um tipo de
Object . Um exemplo disso é Dim something = Nothing . Um erro de tempo de compilação ocorre nesse caso
quando o Option Strict está ativado e Option Infer é desativado.
Quando você atribui Nothing a uma variável de objeto, ele não faz mais referência a nenhuma instância de
objeto. Se a variável tiver referido anteriormente uma instância, defini-la como não Nothing terminará a
instância em si. A instância é encerrada e os recursos de memória e sistema associados a ela são liberados,
somente após o GC (coletor de lixo) detectar que não há nenhuma referência ativa restante.
Nothing difere do DBNull objeto, que representa uma variante não inicializada ou uma coluna de banco de
dados inexistente.
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)
27/09/2021 • 2 minutes to read
este artigo fornece links para outros artigos que documentam os Visual Basic objetos de tempo de execução e
contêm tabelas de seus procedimentos, propriedades e eventos de membro.
O objeto [Link] consiste nas seguintes classes: Fornece dados associados apenas ao aplicativo ou à DLL
atual. Nenhuma informação em nível de sistema pode ser
ApplicationBase fornece membros disponíveis em todos os alterada com [Link] .
projetos.
Alguns membros estão disponíveis apenas para aplicativos
WindowsFormsApplicationBase fornece membros disponíveis do Windows Forms ou de console.
nos aplicativos do Windows Forms.
Confira também
Referência da linguagem Visual Basic
Objeto [Link]
27/09/2021 • 2 minutes to read
Comentários
Para obter informações sobre os métodos e propriedades do [Link] objeto , consulte os seguintes
recursos:
ApplicationBase para membros que estão disponíveis em todos os projetos.
WindowsFormsApplicationBasepara membros que estão disponíveis em aplicativos Windows Forms.
ConsoleApplicationBase para membros que estão disponíveis em aplicativos de console.
Requisitos
Namespace: [Link]
Classe: WindowsFormsApplicationBase (a classe base fornece membros disponíveis em aplicativos de console
e sua classe base fornece os membros ConsoleApplicationBase que estão disponíveis em todos os
ApplicationBase projetos)
Assembly: Visual Basic biblioteca de runtime (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Fornece propriedades para obter informações sobre o aplicativo, como o número de versão, descrição,
assemblies carregados e assim por diante.
Comentários
Para obter informações sobre os métodos e propriedades do [Link] objeto , consulte
AssemblyInfo .
NOTE
Você pode usar propriedades da [Link] classe para obter informações sobre um arquivo em
disco.
Requisitos
Namespace: [Link]
Classe: AssemblyInfo
Assembly: Visual Basic biblioteca de runtime (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Fornece uma propriedade e métodos para gravar informações de evento e de exceção para os ouvintes de log
do aplicativo.
Comentários
Para obter informações sobre os métodos e as propriedades do [Link] objeto, consulte Log .
Para obter mais informações, consulte registrando informações do aplicativo.
NOTE
você também pode usar classes no .NET Framework para registrar informações de seu aplicativo. Para obter mais
informações, confira Aplicativos de rastreamento e instrumentação.
Requisitos
Namespace: [Link]
Classe: Log
Assembly: biblioteca de tempo de execução Visual Basic (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Fornece propriedades para manipular componentes do computador, como o áudio, o relógio, o teclado, o
sistema de arquivos e assim por diante.
Comentários
Para obter informações sobre os métodos e as propriedades do [Link] objeto, consulte Computer . A
classe base ServerComputer fornece os membros que estão disponíveis em todos os projetos.
Requisitos
Namespace: [Link]
Classe: Computer (a classe base ServerComputer fornece os membros que estão disponíveis em todos os
projetos).
Assembly: biblioteca de tempo de execução Visual Basic (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
Objeto [Link]
Objeto [Link]
Objeto [Link]
Objeto [Link]
Objeto [Link]
Objeto [Link]
Objeto [Link]
Objeto [Link]
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Comentários
Para obter informações sobre os métodos e as propriedades do [Link] objeto, consulte Audio .
Para obter mais informações, consulte tocando sons.
Requisitos
Namespace: [Link]
Classe: Audio
Assembly: biblioteca de tempo de execução Visual Basic (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Comentários
Para obter informações sobre os métodos e propriedades do [Link] objeto , consulte
ClipboardProxy .
Para obter mais informações, consulte Armazenamento de dados para e Leitura da Área de Transferência.
NOTE
Você também pode usar métodos da classe [Link] para manipular a Área de Transferência.
Requisitos
Namespace: [Link]
Classe: ClipboardProxy (fornece acesso a Clipboard )
Assembly: Visual Basic biblioteca de runtime (em [Link])
Confira também
Clipboard
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
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 propriedades do [Link] objeto , consulte Clock .
Requisitos
Namespace: [Link]
Classe: Clock
Assembly: Visual Basic biblioteca de runtime (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Comentários
Para obter informações sobre os métodos e as propriedades do [Link] objeto, consulte
FileSystem .
Para obter mais informações, consulte acesso a arquivos com Visual Basic.
NOTE
Você também pode usar classes no [Link] namespace para trabalhar com unidades, arquivos e diretórios.
Requisitos
Namespace: [Link]
Classe: FileSystemProxy (fornece acesso a FileSystem )
Assembly: biblioteca de tempo de execução Visual Basic (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Comentários
Para obter informações sobre os métodos e as propriedades do [Link]
objeto, consulte SpecialDirectories .
Para obter mais informações, consulte como recuperar o conteúdo do diretório meus documentos.
Requisitos
Namespace: [Link]
Classe: SpecialDirectoriesProxy (fornece acesso a SpecialDirectories )
Assembly: biblioteca de tempo de execução Visual Basic (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Fornece propriedades para obter informações sobre memória, assemblies carregados, nome e sistema
operacional do computador.
Comentários
Para obter informações sobre as propriedades do [Link] objeto, consulte ComputerInfo .
Requisitos
Namespace: [Link]
Classe: ComputerInfo
Assembly: Visual Basic biblioteca de runtime (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
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 [Link] objeto, consulte Keyboard
.
Para obter mais informações, consulte Acessando o teclado.
Requisitos
Namespace: [Link]
Classe: Keyboard
Assembly: biblioteca de tempo de execução Visual Basic (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Fornece propriedades para obter informações sobre o formato e a configuração do mouse instalado no
computador local.
Comentários
Para obter informações sobre os métodos e as propriedades do [Link] objeto, consulte Mouse .
Para obter mais informações, consulte acessando o mouse.
Requisitos
Namespace: [Link]
Classe: Mouse
Assembly: biblioteca de tempo de execução Visual Basic (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
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 propriedades do [Link] objeto , consulte Network .
Para obter mais informações, consulte Executando operações de rede.
Requisitos
Namespace: [Link]
Classe: Network
Assembly: Visual Basic biblioteca de runtime (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Comentários
Para obter informações sobre os métodos e propriedades do [Link] objeto , consulte Ports .
Para obter mais informações, consulte Acessando as portas do computador.
NOTE
Você também pode usar propriedades e métodos da [Link] classe para acessar as portas seriais do
computador.
Requisitos
Namespace: [Link]
Classe: Ports
Assembly: Visual Basic biblioteca de runtime (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Comentários
Para obter informações sobre os métodos e propriedades do [Link] objeto , consulte
RegistryProxy .
Para obter mais informações, consulte Lendo e escrevendo no Registro.
NOTE
Você também pode manipular o Registro usando métodos da [Link] classe .
Requisitos
Namespace: [Link]
Classe: RegistryProxy (fornece acesso a Registry )
Assembly: Visual Basic biblioteca de runtime (em [Link])
Confira também
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Fornece propriedades para acessar uma instância de cada Windows formulário declarado no projeto atual.
Comentários
O [Link] objeto fornece uma instância de cada formulário no projeto atual. O nome da propriedade é o
mesmo que o nome do formulário que a propriedade acessa.
Você pode acessar os formulários fornecidos pelo [Link] objeto usando o nome do formulário, sem
qualificação. Como o nome da propriedade é o mesmo que o nome do tipo do formulário, isso permite que
você acesse um formulário como se tivesse uma instância padrão. Por exemplo, [Link] é
equivalente a [Link] .
O [Link] objeto expõe apenas os formulários associados ao projeto atual. Ele não fornece acesso a
formulários declarados em DLLs referenciadas. Para acessar um formulário que uma DLL fornece, você deve
usar o nome qualificado do formulário, escrito como DllName. FormName.
Você pode usar a OpenForms propriedade para obter uma coleção de todos os formulários abertos do
aplicativo.
O objeto e suas propriedades estão disponíveis apenas para Windows aplicativos.
Propriedades
Cada propriedade do [Link] objeto fornece acesso a uma instância de um formulário no projeto atual. O
nome da propriedade é o mesmo que o nome do formulário que a propriedade acessa e o tipo de propriedade
é o mesmo que o tipo do formulário.
NOTE
Se houver uma colisão de nomes, o nome da propriedade para acessar um formulário será RootNamespace _ Namespace
_ FormName. Por exemplo, considere dois formulários chamados Se um desses formulários estiver no namespace raiz e no
namespace , você Form1. WindowsApplication1 Namespace1 acessará esse formulário por meio de
[Link].WindowsApplication1_Namespace1_Form1 .
O objeto fornece acesso à instância do formulário principal do aplicativo [Link] que foi criado na
inicialização. Para todos os outros formulários, o objeto cria uma nova instância do [Link] formulário
quando ele é acessado e a armazena. As tentativas subsequentes de acessar essa propriedade retornam essa
instância do formulário.
Você pode descartar um formulário atribuindo Nothing à propriedade para esse formulário. O setter de
propriedade chama Close o método do formulário e, em seguida, atribui ao valor Nothing armazenado. Se você
atribuir qualquer valor diferente Nothing da propriedade , o setter lançará uma ArgumentException exceção.
Você pode testar se uma propriedade do objeto [Link] armazena uma instância do formulário usando o
operador ou Is IsNot . Você pode usar esses operadores para verificar se o valor da propriedade é Nothing .
NOTE
Normalmente, o Is operador ou precisa ler o valor da propriedade para executar a IsNot comparação. No entanto, se
a propriedade atualmente armazena , a propriedade cria uma nova instância do formulário e Nothing retorna essa
instância. No entanto, Visual Basic compilador trata as propriedades do objeto de forma diferente e permite que o
operador ou verifique o status da propriedade sem [Link] Is alterar seu IsNot valor.
Exemplo
Este exemplo altera o título do formulário SidebarMenu padrão.
Para que este exemplo funcione, seu projeto deve ter um formulário chamado SidebarMenu .
Esse código funcionará somente em um projeto Windows Aplicativo.
Requisitos
Disponibilidade por Project tipo
T IP O DE P RO JETO DISP O N ÍVEL
Site Não
Confira também
OpenForms
Form
Close
Objetos
Operador Is
Operador IsNot
Como acessar formulários de aplicativo
Objeto [Link]
27/09/2021 • 2 minutes to read
Fornece uma propriedade e métodos para gravar informações de evento e de exceção para os ouvintes de log
do aplicativo.
Comentários
Para obter informações sobre os métodos e propriedades do [Link] objeto , consulte AspLog .
O [Link] objeto está disponível somente para [Link] aplicativos. Para aplicativos cliente, use o objeto
[Link].
Requisitos
Namespace: [Link]
Classe: AspLog
Assembly: Visual Basic biblioteca de runtime (em [Link])
Objeto [Link]
27/09/2021 • 2 minutes to read
Comentários
O objeto [Link] contém informações sobre a solicitação HTTP atual.
O objeto [Link] está disponível somente para aplicativos do [Link].
Exemplo
o exemplo a seguir obtém a coleção de cabeçalho do [Link] objeto e usa o [Link] objeto para
gravá-lo na página [Link].
<script runat="server">
Public Sub ShowHeaders()
' Load the header collection from the Request object.
Dim coll As [Link]
coll = [Link]
Confira também
HttpRequest
Objeto [Link]
Objeto [Link]
27/09/2021 • 2 minutes to read
Obtém o HttpResponse objeto associado ao 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 [Link] objeto contém o HttpResponse objeto atual associado à página.
o [Link] objeto só está disponível para aplicativos [Link].
Exemplo
o exemplo a seguir obtém a coleção de cabeçalho do [Link] objeto e usa o [Link] objeto para
gravá-lo na página [Link].
<script runat="server">
Public Sub ShowHeaders()
' Load the header collection from the Request object.
Dim coll As [Link]
coll = [Link]
Confira também
HttpResponse
Objeto [Link]
Objeto [Link]
27/09/2021 • 3 minutes to read
Comentários
O [Link] objeto fornece acesso aos recursos do aplicativo e permite que você recupere dinamicamente
os recursos para seu aplicativo. Para obter mais informações, consulte Gerenciando recursos de aplicativos
(.net).
O [Link] objeto expõe apenas recursos globais. Ele não fornece acesso aos arquivos de recursos
associados aos formulários. Você deve acessar os recursos do formulário no formulário.
Você pode acessar os arquivos de recursos específicos da cultura do aplicativo a partir do [Link] objeto.
Por padrão, o [Link] objeto pesquisa os recursos do arquivo de recursos que corresponde à cultura na
UICulture propriedade. No entanto, você pode substituir esse comportamento e especificar uma cultura
específica a ser usada para os recursos. Para obter mais informações, consulte recursos em aplicativos .net.
Propriedades
As propriedades do [Link] objeto fornecem acesso somente leitura aos recursos do aplicativo. para
adicionar ou remover recursos, use o Designer de Project . você pode acessar os recursos adicionados por
meio do Designer de Project usando [Link]. resourcename.
você também pode adicionar ou remover arquivos de recursos selecionando seu projeto no Gerenciador de
Soluções e clicando em adicionar novo item ou adicionar item existente no menu Project . Você pode
acessar recursos adicionados dessa maneira usando [Link]. resourceFileName . resourceName.
Cada recurso tem um nome, categoria e valor, e essas configurações de recurso determinam como a
propriedade para acessar o recurso aparece no [Link] objeto. para recursos adicionados no Designer
de Project :
O nome determina o nome da propriedade,
Os dados de recurso são o valor da propriedade,
A categoria determina o tipo da propriedade:
Imagens Bitmap
Ícones Icon
Áudio UnmanagedMemoryStream
Classes
O [Link] objeto expõe cada arquivo de recurso como uma classe com propriedades compartilhadas. O
nome da classe é o mesmo que o 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 chamado Form1Title no
arquivo de recurso do aplicativo. Para que o exemplo funcione, o aplicativo deve ter uma cadeia de caracteres
chamada Form1Title em seu arquivo de recurso.
Sub SetFormTitle()
[Link] = [Link].Form1Title
End Sub
Exemplo 2
Este exemplo define o ícone do formulário para o ícone chamado Form1Icon que é armazenado no arquivo de
recurso do aplicativo. Para que o exemplo funcione, o aplicativo deve ter um ícone chamado Form1Icon em seu
arquivo de recurso.
Sub SetFormIcon()
[Link] = [Link].Form1Icon
End Sub
Exemplo 3
Este exemplo define a imagem de plano de fundo de um formulário para o recurso de imagem chamado
Form1Background , que está no arquivo de recurso de aplicativo. Para que este exemplo funcione, o aplicativo
deve ter um recurso de imagem chamado Form1Background em seu arquivo de recurso.
Sub SetFormBackgroundImage()
[Link] = [Link].Form1Background
End Sub
Exemplo 4
Este exemplo reproduz o som que é armazenado como um recurso de áudio chamado Form1Greeting no
arquivo de recurso do aplicativo. Para que o exemplo funcione, o aplicativo deve ter um recurso de áudio
chamado Form1Greeting em seu arquivo de recurso. o [Link] método está disponível somente
para aplicativos Windows Forms.
Sub PlayFormGreeting()
[Link]([Link].Form1Greeting,
[Link])
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 usada pelo [Link] objeto, o exemplo usa
ChangeUICulture .
Para que este exemplo funcione, o aplicativo deve ter uma cadeia de caracteres chamada Message em seu
arquivo de recurso e o aplicativo deve ter a versão de cultura francesa desse arquivo de recurso, [Link]-fr.
resx. Se o aplicativo não tiver a versão de cultura francesa do arquivo de recurso, o [Link] objeto
recuperará o recurso do arquivo de recurso de cultura padrão.
Sub ShowLocalizedMessage()
Dim culture As String = [Link]
[Link]("fr-FR")
MsgBox([Link])
[Link](culture)
End Sub
Confira também
Gerenciando recursos de aplicativo (.NET)
Recursos em aplicativos .NET
Objeto [Link]
27/09/2021 • 2 minutes to read
Comentários
O objeto fornece acesso às configurações do aplicativo e permite que você armazene e recupere dinamicamente
as configurações de propriedade e [Link] outras informações para seu aplicativo. Para obter mais
informações, consulte Gerenciando configurações de aplicativo (.NET).
Propriedades
As propriedades do objeto [Link] fornecem acesso às configurações do seu aplicativo. Para adicionar ou
remover configurações, use o Configurações Designer .
Cada configuração tem um Nome , Tipo , Escopo e Valor e essas configurações determinam como a
propriedade para acessar cada configuração aparece no [Link] objeto :
Nome determina o nome da propriedade.
O tipo determina o tipo da propriedade.
Escopo indica se a propriedade é somente leitura. Se o valor for Application , a propriedade será
somente leitura; se o valor for Usuário , a propriedade será leitura/gravação.
Value é o valor padrão da propriedade.
Métodos
M ÉTO DO DESC RIÇ Ã O
Tarefas
A tabela a seguir lista exemplos de tarefas que envolvem o [Link] objeto .
PA RA C O N SULT E
Ler uma configuração de aplicativo Como ler configurações do aplicativo no Visual Basic
Alterar uma configuração de usuário Como alterar configurações do usuário no Visual Basic
Criar uma grade de propriedades para configurações do Como criar grades de propriedades para configurações de
usuário usuário no Visual Basic
Exemplo
Este exemplo exibe o valor da configuração Nickname .
Sub ShowNickname()
MsgBox("Nickname is " & [Link])
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 [Link]
27/09/2021 • 2 minutes to read
Comentários
Para obter informações sobre os métodos e as propriedades do [Link] objeto, consulte
[Link] .
Para obter mais informações, consulte acessando dados do usuário.
Requisitos
Assembly: biblioteca de tempo de execução Visual Basic (em [Link])
Confira também
IPrincipal
CurrentPrincipal
User
Current
Objeto [Link]
27/09/2021 • 2 minutes to read
Fornece propriedades para criar e acessar uma única instância de cada serviço Web XML referenciado pelo
projeto atual.
Comentários
O objeto [Link] 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 [Link] . 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, consulte Acessando serviços Web de aplicativos.
O [Link] objeto 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ê deve
usar o nome qualificado do serviço Web, no formato DllName. WebServiceName. Para obter mais informações,
consulte Acessando serviços Web de aplicativos.
O objeto e suas propriedades não estão disponíveis para aplicativos Web.
Propriedades
Cada propriedade do [Link] objeto 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.
NOTE
Se houver uma colisão de nomes, o nome da propriedade para acessar um serviço Web será RootNamespace _
Namespace _ ServiceName. Por exemplo, considere dois serviços Web chamados Service1 . Se um desses serviços
estiver no namespace raiz e no namespace , você acessará esse WindowsApplication1 Namespace1 serviço usando
[Link].WindowsApplication1_Namespace1_Service1 .
Quando você acessa uma das propriedades do objeto pela primeira vez, ele cria uma nova instância do
[Link] serviço Web e a armazena. Os acessos subsequentes dessa propriedade retornam essa
instância do serviço Web.
Você pode descartar um serviço Web atribuindo Nothing à propriedade para esse serviço Web. O setter de
propriedade atribui Nothing ao valor armazenado. Se você atribuir qualquer valor diferente Nothing da
propriedade , o setter lançará uma ArgumentException exceção.
Você pode testar se uma propriedade do objeto armazena uma instância do [Link] serviço Web
usando o operador ou Is IsNot . Você pode usar esses operadores para verificar se o valor da propriedade é
Nothing .
NOTE
Normalmente, o Is operador ou precisa ler o valor da propriedade para executar a IsNot comparação. No entanto, se
a propriedade atualmente armazena , a propriedade cria uma nova instância do serviço Web e Nothing retorna essa
instância. No entanto, Visual Basic compilador trata as propriedades do objeto especialmente e permite que o operador
ou verifique o status da propriedade sem [Link] Is alterar seu IsNot valor.
Exemplo
Este exemplo chama FahrenheitToCelsius o método do serviço Web XML e retorna o TemperatureConverter
resultado.
Function ConvertFromFahrenheitToCelsius(
ByVal dFahrenheit As Double) As Double
Return [Link](dFahrenheit)
End Function
Para que este exemplo funcione, seu projeto deve fazer referência a um serviço Web chamado Converter e esse
serviço Web deve expor o método ConvertTemperature . Para obter mais informações, consulte Acessando
serviços Web de aplicativos.
Esse código não funciona em um projeto de aplicativo Web.
Requisitos
Disponibilidade por Project tipo
T IP O DE P RO JETO DISP O N ÍVEL
Site Não
Confira também
SoapHttpClientProtocol
ArgumentException
Como acessar serviços Web de aplicativo
Objeto TextFieldParser
27/09/2021 • 2 minutes to read
Sintaxe
Public Class TextFieldParser
Comentários
Para obter informações sobre os métodos e as propriedades do TextFieldParser objeto, consulte
TextFieldParser .
Para obter mais informações, consulte lendo de arquivos.
Requisitos
Namespace: [Link]
Classe: TextFieldParser
Assembly: biblioteca de tempo de execução Visual Basic (em [Link])
Operadores (Visual Basic)
27/09/2021 • 2 minutes to read
Nesta seção
Precedência de 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 nulos
Operadores aritméticos
Operadores de atribuição
Operadores de deslocamento de bits
Operadores de comparação
Operadores de concatenação
Operadores lógicos/bits
Operadores diversos
Seções relacionadas
referência de linguagem de Visual Basic
Precedência do operador no Visual Basic
27/09/2021 • 3 minutes to read
Quando várias operações ocorrem em uma expressão, cada parte é avaliada e resolvida em uma ordem
predeterminada chamada precedência de 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:
Os operadores aritméticos e de concatenação têm a ordem de precedência descrita na seção a seguir e
têm maior precedência do que os operadores de comparação, lógicos e bit a bit.
Todos os operadores de comparação têm precedência igual e têm maior precedência do que os
operadores lógicos e bit a bit, mas têm precedência menor do que os operadores aritméticos e de
concatenação.
Os operadores lógicos e bit a bit têm a ordem de precedência descrita na seção a seguir e têm
precedência menor do que os operadores aritméticos, de concatenação e de comparação.
Operadores com precedência igual são avaliados da esquerda para a direita na ordem em que aparecem
na expressão.
Ordem de precedência
Os operadores são avaliados na seguinte ordem de precedência:
Operador Await
Aguardam
Operadores aritméticos e de concatenação
Exponnização ( ^ )
Identidade unária e negação ( + , – )
Multiplicação e divisão de ponto flutuante ( * , / )
Divisão de inteiros ( \ )
Aritmética modular ( Mod )
Adição e subtração ( + , – )
Concatenação de cadeia de caracteres ( & )
Deslocamento de bit aritmético ( << , >> )
Operadores de comparação
Todos os operadores de comparação ( = ,,,,,,,, <> ... < <= > >= Is IsNot Like TypeOf Is )
Operadores lógicos e bit a bit
Negação ( Not )
Conjunção ( And , AndAlso )
Disjunção inclusiva ( Or , OrElse )
Disjunção exclusiva ( Xor )
Comentários
O = operador é apenas o operador de comparação de igualdade, não o operador de atribuição.
O operador de concatenação de cadeia de caracteres ( ) não é um operador aritmético, mas, na precedência, ele
é & agrupado com os operadores aritméticos.
Os Is IsNot operadores e são operadores de comparação de referência de objeto. Eles não comparam os
valores de dois objetos; eles verificam apenas para determinar se duas variáveis de objeto se referem à mesma
instância de objeto.
Capacidade de associação
Quando operadores de precedência igual aparecem juntos em uma expressão, por exemplo, 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.
Dim n1 As Integer = 96 / 8 / 4
Dim n2 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, em seguida, a divisão 12/4, o que resulta em
três. Como o compilador avalia as operações para da esquerda para a direita, a avaliação é a mesma quando
essa ordem é n1 explicitamente indicada para n2 . E n1 têm um resultado de n2 três. Por outro lado, tem
um resultado de 48, porque os parênteses forçam o n3 compilador a avaliar 8/4 primeiro.
Devido a esse comportamento, os operadores devem ser deixados associativos Visual Basic.
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
' The preceding line sets f to 7.0. Because of natural operator
' precedence and associativity, it is exactly equivalent to the
' following line.
f = (a - b) + ((c / d) * e)
' The following line overrides the natural operator precedence
' and left associativity.
g = (a - (b + c)) / (d * e)
' The preceding line sets g to 0.5.
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)
27/09/2021 • 8 minutes to read
Visual Basic determina o tipo de dados de resultado de uma operação com base nos tipos de dados dos
operandos. Em alguns casos, isso pode ser um tipo de dados com um intervalo maior do que o de um dos
operandos.
Aritmética decimal
Observe que o tipo de dados decimal não é ponto flutuante nem inteiro.
se um dos operandos de uma + operação,, – * / ou Mod for Decimal e o outro não for Single ou
Double , Visual Basic ampliará o outro operando para Decimal . Ele executa a operação em Decimal e o tipo de
dados de resultado é Decimal .
Aritmética de Floating-Point
Visual Basic executa a maioria das aritméticas de ponto flutuante em Double, que é o tipo de dados mais
eficiente para essas operações. no entanto, se um operando for único e o outro não for Double , Visual Basic
executará a operação no 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 de ^/e
O / operador é definido somente para os tipos de dados decimal, únicoe duplo . 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 para o / operador. Observe que essa 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.
Q UA LQ UER T IP O DE
DECIMAL SINGLE DOUBLE IN T EIRO
O ^ operador é definido somente para o Double tipo de dados. Visual Basic amplia cada operando conforme
necessário Double antes da operação, e o tipo de dados de resultado é sempre Double .
Aritmética de inteiro
O tipo de dados de resultado de uma operação de inteiro depende dos tipos de dados dos operandos. em geral,
Visual Basic usa as seguintes políticas para determinar o tipo de dados de resultado:
Se ambos os operandos de um operador binário tiverem o mesmo tipo de dados, o resultado terá esse
tipo de dados. Uma exceção é Boolean , que é forçada para Short .
Se um operando não assinado participar de um operando assinado, o resultado terá um tipo assinado
com pelo menos um intervalo grande como um dos operandos.
Caso contrário, o resultado geralmente tem o maior dos dois tipos de dados de operando.
Observe que o tipo de dados de resultado pode não ser o mesmo que o tipo de dados operando.
NOTE
O tipo de dados de resultado nem sempre é grande o suficiente para conter todos os valores possíveis resultantes da
operação. Uma OverflowException exceção pode 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 para os dois operadores unários + e – .
Unário Short SByte Byte Short UShort Integer UIntege long ULong
+ r
Unário Short SByte Short Short Integer Integer long long Decimal
–
<< , Short SByte Byte Short UShort Integer UIntege long ULong
>> r
se o operando esquerdo for Decimal , Single , Double ou String , Visual Basic tentar convertê-lo Long antes
da operação e o tipo de dados de resultado for Long . O operando à direita (o número de posições de bit a ser
deslocado) deve ser Integer ou um tipo que amplia para Integer .
Operadores +, –, * e mod binários
A tabela a seguir mostra os tipos de dados de resultado para o binário + e – os operadores e os * Mod
operadores e. Observe que essa 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 Decimal
SByte SByte SByte Short Short Integer Integer long long Decimal
Byte Short Short Byte Short UShort Integer UIntege long ULong
r
Short Short Short Short Short Integer Integer long long Decimal
UShort Integer Integer UShort Integer UShort Integer UIntege long ULong
r
Integer Integer Integer Integer Integer Integer Integer long long Decimal
UInteger long long UIntege long UIntege long UIntege long ULong
r r r
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 para o \ operador. Observe que essa 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 UIntege long ULong
r
Short Short Short Short Short Integer Integer long long long
BOOLEAN SBYTE BYTE SHORT USHORT INTEGER UINTEGER LONG ULONG
UShort Integer Integer UShort Integer UShort Integer UIntege long ULong
r
Integer Integer Integer Integer Integer Integer Integer long long long
UInteger long long UIntege long UIntege long UIntege long ULong
r r r
Long long long long long long long long long long
ULong long long ULong long ULong long ULong long ULong
Se um dos operadores for \ Decimal, Singleou Double,Visual Basic tentará convertê-lo em Long antes da
operação e o tipo de dados de resultado for Long .
O tipo de dados de resultado de uma operação lógica bit a bit depende dos tipos de dados dos operativos.
Observe que e são definidos apenas para e Visual Basic converte cada operand conforme AndAlso necessário
para antes de executar a OrElse Boolean Boolean operação.
=, <>, <, > , <=, and > = Operadores
Se ambos os operadores são Boolean , Visual Basic considera ser menor que True False . Se um tipo
numérico for comparado com String um , Visual Basic tenta converter o para antes da String Double
operação. Um Char ou Date um operand só pode ser comparado com outro operand do mesmo tipo de
dados. O tipo de dados de resultado é sempre Boolean .
Operador Not bit a bit
A tabela a seguir mostra os tipos de dados de resultado para o operador bit a Not bit.
Not Boolian SByte Byte Short UShort Integer UIntege long ULong
o r
Se o operand for , , ou , Visual Basic tentar convertê-lo em antes da operação e o tipo de dados Decimal Single
de resultado for Double String Long Long .
Operadores Bit a Bit And, Or e Xor
A tabela a seguir mostra os tipos de dados de resultado para os operadores bit a And bit Or , e Xor . Observe
que essa tabela é simétrica; para uma determinada combinação de tipos de dados de operand, o tipo de dados
de resultado é o mesmo, independentemente da ordem dos operadores.
Boolean Boolian SByte Short Short Integer Integer long long long
o
BOOLEAN SBYTE BYTE SHORT USHORT INTEGER UINTEGER LONG ULONG
SByte SByte SByte Short Short Integer Integer long long long
Byte Short Short Byte Short UShort Integer UIntege long ULong
r
Short Short Short Short Short Integer Integer long long long
UShort Integer Integer UShort Integer UShort Integer UIntege long ULong
r
Integer Integer Integer Integer Integer Integer Integer long long long
UInteger long long UIntege long UIntege long UIntege long ULong
r r r
Long long long long long long long long long long
ULong long long ULong long ULong long ULong long ULong
Se um operand for , , ou , Visual Basic tentar convertê-lo em antes da operação e o tipo de dados de resultado
for o mesmo que se esse Decimal Single Double String Long operand já tivesse sido Long .
Operadores diversos
O & operador é definido apenas para concatenação de String operadores. Visual Basic converte cada operand
conforme necessário para antes da operação, e o tipo de dados de resultado String é sempre String . Para
fins do operador , todas & as conversões para String são consideradas como sendo ampliadas, mesmo que
Option Strict seja On .
Os Is IsNot operadores e exigem que ambos os operadores sejam de um tipo de referência. A expressão ...
requer que o primeiro operand seja de um tipo de referência e o segundo TypeOf seja o nome de um tipo de
Is dados. Em todos esses casos, o tipo de dados de resultado é Boolean .
O Like operador é definido somente para correspondência de padrões de String operadores. Visual Basic
tenta converter cada operand conforme necessário antes String da operação. O tipo de dados de resultado é
sempre Boolean .
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)
28/09/2021 • 2 minutes to read
consulte uma das categorias listadas abaixo ou abra esta parte do sumário da ajuda para ver uma lista alfabética
de operadores de Visual Basic.
Categorias de operadores
O P ERA DO RES DESC RIÇ Ã O
Confira também
Operadores e expressões
Precedência do operador no Visual Basic
Operadores aritméticos (Visual Basic)
27/09/2021 • 2 minutes to read
Confira também
Precedência do operador no Visual Basic
Operadores aritméticos no Visual Basic
Operadores de atribuição (Visual Basic)
27/09/2021 • 2 minutes to read
Confira também
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operadores Bit Shift (Visual Basic)
27/09/2021 • 2 minutes to read
Confira também
Operadores Listados por Funcionalidade
Operadores de comparação (Visual Basic)
27/09/2021 • 5 minutes to read
Syntax
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Partes
result
Obrigatórios. Um Boolean valor que representa o resultado da comparação.
expression1 , expression2
Obrigatórios. Qualquer expressão.
comparisonoperator
Obrigatórios. Qualquer operador de comparação relacional.
object1 , object2
Obrigatórios. Qualquer nome de objeto de referência.
string
Obrigatórios. Qualquer expressão de String .
pattern
Obrigatórios. Qualquer String expressão ou intervalo de caracteres.
Comentários
A tabela a seguir contém uma lista dos operadores de comparação relacional e as condições que determinam
result se é True ou False .
NOTE
O operador = também é usado como um operador de atribuição.
O operador , o operador e o operador têm funcionalidades de comparação específicas que diferem Is IsNot
dos Like operadores na tabela anterior.
Comparando números
Quando você compara uma expressão do tipo Single com uma do tipo , a expressão é Double Single
convertida em Double . Esse comportamento é oposto ao comportamento encontrado no Visual Basic 6.
Da mesma forma, quando você compara uma expressão do tipo com uma expressão do Decimal tipo ou , a
expressão é Single Double Decimal convertida em ou Single Double . Para Decimal expressões, qualquer
valor fracionado menor que 1E-28 pode ser perdido. Essa perda de valor fracionável pode fazer com que dois
valores sejam comparados como iguais quando não são. Por esse motivo, você deve tomar 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.
Imprecisa de ponto flutuante
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
comparação de valor e o Operador Mod. Para obter mais informações, consulte Solução de problemas de tipos
de dados.
Option Compare Text bases comparações de cadeia de caracteres em uma ordem de classificação textual e sem
maiúsculas e minúsculas determinada pela localidade do aplicativo. Quando você definir Option Compare Text e
classificar os caracteres no exemplo anterior, a seguinte ordem de classificação de texto se aplica:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Dependência de localidade
Quando você definir Option Compare Text , o resultado de uma comparação de cadeia de caracteres pode
depender da localidade na qual 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 se deve aceitar uma tentativa de fazer logoff, deverá estar alerta para a
sensibilidade da localidade. Considere definir Option Compare Binary ou chamar o , que leva a localidade em
StrComp conta.
SE O S O P ERA DO RES SÃ O A C O M PA RA Ç Ã O É
Comparações numéricas tratam Nothing como 0. Comparações de cadeia de caracteres Nothing tratam como
"" (uma cadeia de caracteres vazia).
Sobrecarga
Os operadores de comparação relacional ( < . <= , , , , ) podem ser sobrecarregados, o que significa que uma
classe ou estrutura pode redefinir seu comportamento quando um operativo tem o tipo > >= dessa classe ou
= <> estrutura. Se o código usar qualquer um desses operadores em uma classe ou estrutura desse tipo,
certifique-se de entender o comportamento redefinido. Para obter mais informações, consulte Procedimentos
de operador.
Observe que o operador = pode ser sobrecarregado apenas como um operador de comparação relacional, não
como um operador de atribuição.
Exemplo
O exemplo a seguir mostra vários usos de operadores de comparação relacional, que você usa para comparar
expressões. Operadores de comparação relacional retornam um resultado que representa se a Boolean
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. Se a classificação é sensível a minúsculas ou não, depende
da configuração Comparação de Opções.
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
No exemplo anterior, a primeira comparação retorna False e as comparações restantes retornam True .
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)
27/09/2021 • 2 minutes to read
Confira também
[Link]
StringBuilder
Precedência do operador no Visual Basic
Operadores de concatenação no Visual Basic
Operadores lógicos/bit a bit (Visual Basic)
27/09/2021 • 2 minutes to read
Confira também
Precedência do operador no Visual Basic
Operadores lógicos e bit a bit no Visual Basic
Operadores diversos (Visual Basic)
27/09/2021 • 2 minutes to read
Confira também
Operadores listados por funcionalidade
&Operador (Visual Basic)
27/09/2021 • 2 minutes to read
Syntax
result = expression1 & expression2
Partes
result
Obrigatórios. Qualquer String Object variável ou.
expression1
Obrigatórios. Qualquer expressão com um tipo de dados que amplia para String .
expression2
Obrigatórios. Qualquer expressão com um tipo de dados que amplia para String .
Comentários
Se o tipo de dados de expression1 ou expression2 não for, mas se String expandir para String , ele será
convertido em String . Se um dos tipos de dados não for ampliado para String , o compilador gerará um
erro.
O tipo de dados de result é String . Se uma ou ambas as expressões forem avaliadas como Nothing ou se
tiverem um valor de [Link] , elas serão tratadas como uma cadeia de caracteres com um valor de "".
NOTE
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 seu código usar esse operador em uma classe ou
estrutura desse tipo, certifique-se de entender seu comportamento redefinido. Para obter mais informações, consulte
procedimentos de operador.
NOTE
O caractere de e comercial (&) também pode ser usado para identificar variáveis como tipo Long . Para obter mais
informações, consulte tipos de caracteres.
Exemplo
Este exemplo usa o & operador para forçar a concatenação de cadeia de caracteres. O resultado é um valor de
cadeia de caracteres que representa a concatenação dos dois operandos de cadeia de caracteres.
Dim sampleStr As String
sampleStr = "Hello" & " World"
' The preceding statement sets sampleStr to "Hello World".
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)
28/09/2021 • 2 minutes to read
Concatena uma String expressão a uma String variável ou propriedade e atribui o resultado à variável ou à
propriedade.
Syntax
variableorproperty &= expression
Partes
variableorproperty
Obrigatórios. Qualquer String variável ou propriedade.
expression
Obrigatórios. Qualquer expressão de String .
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 a propriedade não pode ser ReadOnly. O &= operador concatena a
String expressão à direita para a String variável ou propriedade à esquerda e atribui o resultado à variável
ou à propriedade à esquerda.
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 seu comportamento redefinido. Para obter mais informações, consulte
procedimentos de operador.
Exemplo
O exemplo a seguir usa o &= operador para concatenar duas String variáveis e atribuir o resultado à primeira
variável.
Confira também
Operador de&
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)
27/09/2021 • 2 minutes to read
Syntax
number1 * number2
Partes
T ERM O DEF IN IÇ Ã O
Resultado
O resultado é o produto do number1 e do number2 .
Comentários
O tipo de dados do resultado depende dos tipos dos operandos. A tabela a seguir mostra como o tipo de dados
do resultado é determinado.
T IP O S DE DA DO S DO O P ERA N DO T IP O DE DA DO S DE RESULTA DO
Ambas as expressões são tipos de dados integral (SByte, Um tipo de dados numérico apropriado para os tipos de
byte, Short, UShort, Integer, UInteger, Long, ULONG) dados do number1 e do number2 . Consulte as tabelas
"aritmética de inteiros" em tipos de dados de resultados do
operador.
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 seu código usar esse operador
em uma classe ou estrutura desse tipo, certifique-se de entender seu comportamento redefinido. Para obter
mais informações, consulte procedimentos de operador.
Exemplo
Este exemplo usa o * operador para multiplicar dois números. O resultado é o produto dos dois operandos.
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)
27/09/2021 • 2 minutes to read
Multiplica o valor de uma variável ou propriedade pelo valor de uma expressão e atribui o resultado à variável
ou propriedade .
Syntax
variableorproperty *= expression
Partes
variableorproperty
Obrigatórios. Qualquer variável numérica ou propriedade.
expression
Obrigatórios. Qualquer expressão numérica.
Comentários
O elemento à esquerda do operador pode ser uma variável escalar simples, uma propriedade *= ou um
elemento de uma matriz. A variável ou a propriedade não pode ser ReadOnly.
O operador primeiro multiplica o valor da expressão (no lado direito do operador) pelo valor da variável ou
propriedade (no lado esquerdo do *= operador). Em seguida, o operador atribui o resultado dessa operação à
variável ou propriedade .
Sobrecarga
O operador * pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu
comportamento quando um operador tem o tipo dessa classe ou estrutura. A sobrecarga do * operador afeta
o comportamento do *= operador. Se o código usar *= em uma classe ou estrutura que sobrecarregar ,
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 multiplicar uma Integer variável por segundo e atribuir o
resultado à primeira variável.
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)
27/09/2021 • 5 minutes to read
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.
Syntax
expression1 + expression2
ou
+expression1
Partes
T ERM O DEF IN IÇ Ã O
Resultado
Se expression1 e expression2 são numéricos, o resultado é sua soma aritmética.
Se expression2 estiver ausente, o + operador será o operador de identidade unária para o valor inalterado de
uma expressão. Nesse sentido, a operação consiste em reter o sinal de , portanto, expression1 o resultado será
negativo se for expression1 negativo.
Se expression1 e expression2 são cadeias de caracteres, o resultado é a concatenação de seus valores.
Se expression1 e são de tipos mistos, a ação tomada depende de seus tipos, seu conteúdo e a configuração
expression2 da instrução Option Strict. Para obter mais informações, consulte as tabelas em "Comentários".
Comentários
Em geral, + executa a adição aritmética quando possível e concatena somente quando ambas as expressões
são cadeias de caracteres.
Se nenhuma das expressões for Object um , Visual Basic as seguintes ações.
T IP O S DE DA DO S DE EXP RESSÕ ES A Ç Ã O P O R C O M P IL A DO R
Ambas as expressões são tipos de dados numéricos ( Adicionar. O tipo de dados de resultado é um tipo numérico
SByte , , , , , , , , , Byte ou Short UShort Integer apropriado para os tipos de dados expression1 de e
UInteger Long ULong Decimal Single Double ) expression2 . Consulte as tabelas "Aritmética de inteiro"
em Tipos de dados de resultados do operador.
Uma expressão é um tipo de dados numérico e a outra é Se Option Strict for On , gere um erro do compilador.
uma cadeia de caracteres
Se Option Strict for Off , converta implicitamente
String o para e Double adicione.
Uma expressão é um tipo de dados numérico e a outra é Adicione, com Nothing valor zero.
Nothing
Uma expressão é uma cadeia de caracteres e a outra é Concatenar, com Nothing valor como "".
Nothing
Se uma expressão for uma Object expressão, Visual Basic as ações a seguir.
T IP O S DE DA DO S DE EXP RESSÕ ES A Ç Ã O P O R C O M P IL A DO R
Object expression contém um valor numérico e o outro é Se Option Strict for On , gere um erro do compilador.
um tipo de dados numérico
Se Option Strict for Off , adicione.
Object expression contém um valor numérico e o outro é Se Option Strict for On , gere um erro do compilador.
do tipo String
Se Option Strict for Off , converta implicitamente
String o para e Double adicione.
Object expression contém uma cadeia de caracteres e a Se Option Strict for On , gere um erro do compilador.
outra é um tipo de dados numérico
Se Option Strict for Off , converta implicitamente a
cadeia de Object caracteres para e Double adicione.
Object expression contém uma cadeia de caracteres e a Se Option Strict for On , gere um erro do compilador.
outra é do tipo String
Se Option Strict for Off , converta implicitamente
Object em e String concatene.
Se ambas as expressões Object são expressões, Visual Basic as seguintes ações Option Strict Off (somente).
T IP O S DE DA DO S DE EXP RESSÕ ES A Ç Ã O P O R C O M P IL A DO R
Uma Object expressão contém um valor numérico e a Converta implicitamente a cadeia de Object caracteres
outra contém uma cadeia de caracteres Double em e adicione.
Se uma Object das expressões for avaliada como Nothing ou , o operador o tratará como DBNull um com um
valor de + String "".
NOTE
Ao usar o operador , talvez você não consiga determinar se a adição ou concatenação de cadeia de + caracteres
ocorrerá. Use o & operador para concatenação para eliminar a ambiguidade e fornecer código autodocumentado.
Sobrecarga
O + operador pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu
comportamento quando um operador tem o tipo dessa classe ou estrutura. Se seu código usar esse operador
em uma classe ou estrutura desse tipo, 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 adicionar números. Se os operadores são numéricos, Visual Basic
calcula o resultado aritmético. O resultado aritmético representa a soma dos dois operadores.
Você também pode usar o + operador para concatenar cadeias de caracteres. Se os operands são cadeias de
caracteres, Visual Basic concatena-os. O resultado da concatenação representa uma única cadeia de caracteres
que consiste no conteúdo dos dois operadores, um após o outro.
Se os operadores são de tipos mistos, o resultado depende da configuração da instrução Option Strict. O
exemplo a seguir ilustra o resultado quando Option Strict é On .
Option Strict On
Para eliminar a ambiguidade, você deve usar o & operador em vez de para + concatenação.
Confira também
Operador& de dados
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)
27/09/2021 • 2 minutes to read
Adiciona o valor de uma expressão numérica ao valor de uma variável numérica ou propriedade e atribui o
resultado à variável ou propriedade . Também pode ser usado para concatenar uma expressão a uma variável
ou propriedade e String atribuir o resultado à String variável ou propriedade .
Syntax
variableorproperty += expression
Partes
variableorproperty
Obrigatórios. Qualquer String variável ou variável numérica ou propriedade.
expression
Obrigatórios. Qualquer expressão ou String numérica.
Comentários
O elemento à esquerda do operador pode ser uma variável escalar simples, uma propriedade += ou um
elemento de uma matriz. A variável ou a propriedade não pode ser ReadOnly.
O operador adiciona o valor à direita à variável ou propriedade à esquerda e atribui o resultado à variável ou
+= propriedade à esquerda. O operador também pode ser usado para concatenar a expressão à direita para a
variável ou propriedade à esquerda e atribuir o resultado à variável ou propriedade += String à String
esquerda.
NOTE
Ao usar o operador , talvez você não consiga determinar se a adição ou concatenação de cadeia de += caracteres
ocorrerá. Use o &= operador para concatenação para eliminar a ambiguidade e fornecer código autodocumentado.
Esse operador de atribuição executará implicitamente as conversões de expansão, mas não de replicação, se o
ambiente de compilação impor semântica estrita. Para obter mais informações sobre essas conversões, consulte
Conversões de ampliação e restrição. Para obter mais informações sobre semântica estrita e permissiva,
consulte instrução Option Strict.
Se a semântica permissiva for permitida, o operador executará implicitamente uma variedade de conversões
numéricas e de cadeia de += caracteres idênticas àquelas executadas pelo + operador . Para obter detalhes
sobre essas conversões, consulte + Operador.
Sobrecarga
O + operador pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu
comportamento quando um operador tem o tipo dessa classe ou estrutura. A sobrecarga do + operador afeta
o comportamento do += operador. Se o código usar += em uma classe ou estrutura que sobrecarregar ,
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 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. Em ambos os casos, o resultado é atribuído à primeira variável.
Confira também
Operador +
Operadores de atribuição
Operadores aritméticos
Operadores de concatenação
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operador = (Visual Basic)
27/09/2021 • 2 minutes to read
Syntax
variableorproperty = value
Partes
variableorproperty
Qualquer variável que pode ser escrita ou qualquer propriedade.
value
Qualquer literal, constante ou expressão.
Comentários
O elemento à esquerda do sinal de igual ( ) pode ser uma variável escalar simples, uma propriedade ou um =
elemento de uma matriz. A variável ou a propriedade não pode ser ReadOnly. O = operador atribui o valor à
direita à variável ou propriedade à esquerda.
NOTE
O = operador também é usado como um operador de comparação. Para obter detalhes, consulte Operadores de
comparaçã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, consulte Procedimentos de operador.
Exemplo
O exemplo a seguir demonstra o operador de atribuição. O valor à direita é atribuído à variável à esquerda.
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)
27/09/2021 • 2 minutes to read
Retorna a diferença entre duas expressões numéricas ou o valor negativo de uma expressão numérica.
Syntax
expression1 – expression2
ou
–expression1
Partes
expression1
Obrigatórios. Qualquer expressão numérica.
expression2
Obrigatório, a menos que – o operador esteja calculando um valor negativo. Qualquer expressão numérica.
Resultado
O resultado é a diferença entre expression1 e ou o valor negado de expression2 expression1 .
O tipo de dados de resultado é um tipo numérico apropriado para os tipos de dados expression1 de e
expression2 . Consulte as tabelas "Aritmética de inteiro" em 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.
No segundo uso mostrado na sintaxe mostrada anteriormente, o operador é o operador de negação unária para
o – valor negativo de uma expressão. Nesse sentido, a negação consiste em reverter o sinal de para que
expression1 o resultado seja positivo se for expression1 negativo.
Se uma das expressões for avaliada como Nothing, – o operador a tratará como zero.
NOTE
O – operador pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu comportamento
quando um operador tem o tipo dessa classe ou estrutura. Se o código usar esse operador em uma classe ou estrutura
desse tipo, certifique-se de entender o 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,
negar um número.
Após a execução dessas instruções, binaryResult contém 124,45 e unaryResult contém -334,90.
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)
27/09/2021 • 2 minutes to read
Subtrai o valor de uma expressão do valor de uma variável ou propriedade e atribui o resultado à variável ou
propriedade .
Syntax
variableorproperty -= expression
Partes
variableorproperty
Obrigatórios. Qualquer variável numérica ou propriedade.
expression
Obrigatórios. Qualquer expressão numérica.
Comentários
O elemento à esquerda do operador pode ser uma variável escalar simples, uma propriedade -= ou um
elemento de uma matriz. A variável ou a propriedade não pode ser ReadOnly.
O operador primeiro subtrai o valor da expressão (no lado direito do operador) do valor da variável ou
propriedade (no lado esquerdo -= do operador). Em seguida, o operador atribui o resultado dessa operação à
variável ou propriedade .
Sobrecarga
O operador - (Visual Basic) pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir
seu comportamento quando um operador tem o tipo dessa classe ou estrutura. A sobrecarga do - operador
afeta o comportamento do -= operador. Se o código usar -= em uma classe ou estrutura que sobrecarregar ,
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 subtrair uma Integer variável de outra e atribuir o resultado à
última variável.
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)
27/09/2021 • 5 minutes to read
Syntax
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Partes
result
Obrigatórios. Um Boolean valor que representa o resultado da comparação.
expression1 , expression2
Obrigatórios. Qualquer expressão.
comparisonoperator
Obrigatórios. Qualquer operador de comparação relacional.
object1 , object2
Obrigatórios. Qualquer nome de objeto de referência.
string
Obrigatórios. Qualquer expressão de String .
pattern
Obrigatórios. Qualquer String expressão ou intervalo de caracteres.
Comentários
A tabela a seguir contém uma lista dos operadores de comparação relacional e as condições que determinam
result se é True ou False .
NOTE
O operador = também é usado como um operador de atribuição.
O operador , o operador e o operador têm funcionalidades de comparação específicas que diferem Is IsNot
dos Like operadores na tabela anterior.
Comparando números
Quando você compara uma expressão do tipo Single com uma do tipo , a expressão é Double Single
convertida em Double . Esse comportamento é oposto ao comportamento encontrado no Visual Basic 6.
Da mesma forma, quando você compara uma expressão do tipo com uma expressão do Decimal tipo ou , a
expressão é Single Double Decimal convertida em ou Single Double . Para Decimal expressões, qualquer
valor fracionado menor que 1E-28 pode ser perdido. Essa perda de valor fracionável pode fazer com que dois
valores sejam comparados como iguais quando não são. Por esse motivo, você deve tomar 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.
Imprecisa de ponto flutuante
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
comparação de valor e o Operador Mod. Para obter mais informações, consulte Solução de problemas de tipos
de dados.
Option Compare Text bases comparações de cadeia de caracteres em uma ordem de classificação textual e sem
maiúsculas e minúsculas determinada pela localidade do aplicativo. Quando você definir Option Compare Text e
classificar os caracteres no exemplo anterior, a seguinte ordem de classificação de texto se aplica:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Dependência de localidade
Quando você definir Option Compare Text , o resultado de uma comparação de cadeia de caracteres pode
depender da localidade na qual 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 se deve aceitar uma tentativa de fazer logoff, deverá estar alerta para a
sensibilidade da localidade. Considere definir Option Compare Binary ou chamar o , que leva a localidade em
StrComp conta.
SE O S O P ERA DO RES SÃ O A C O M PA RA Ç Ã O É
Comparações numéricas tratam Nothing como 0. Comparações de cadeia de caracteres Nothing tratam como
"" (uma cadeia de caracteres vazia).
Sobrecarga
Os operadores de comparação relacional ( < . <= , , , , ) podem ser sobrecarregados, o que significa que uma
classe ou estrutura pode redefinir seu comportamento quando um operativo tem o tipo > >= dessa classe ou
= <> estrutura. Se o código usar qualquer um desses operadores em uma classe ou estrutura desse tipo,
certifique-se de entender o comportamento redefinido. Para obter mais informações, consulte Procedimentos
de operador.
Observe que o operador = pode ser sobrecarregado apenas como um operador de comparação relacional, não
como um operador de atribuição.
Exemplo
O exemplo a seguir mostra vários usos de operadores de comparação relacional, que você usa para comparar
expressões. Operadores de comparação relacional retornam um resultado que representa se a Boolean
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. Se a classificação é sensível a minúsculas ou não, depende
da configuração Comparação de Opções.
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
No exemplo anterior, a primeira comparação retorna False e as comparações restantes retornam True .
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)
27/09/2021 • 5 minutes to read
Syntax
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Partes
result
Obrigatórios. Um Boolean valor que representa o resultado da comparação.
expression1 , expression2
Obrigatórios. Qualquer expressão.
comparisonoperator
Obrigatórios. Qualquer operador de comparação relacional.
object1 , object2
Obrigatórios. Qualquer nome de objeto de referência.
string
Obrigatórios. Qualquer expressão de String .
pattern
Obrigatórios. Qualquer String expressão ou intervalo de caracteres.
Comentários
A tabela a seguir contém uma lista dos operadores de comparação relacional e as condições que determinam
result se é True ou False .
NOTE
O operador = também é usado como um operador de atribuição.
O operador , o operador e o operador têm funcionalidades de comparação específicas que diferem Is IsNot
dos Like operadores na tabela anterior.
Comparando números
Quando você compara uma expressão do tipo Single com uma do tipo , a expressão é Double Single
convertida em Double . Esse comportamento é oposto ao comportamento encontrado no Visual Basic 6.
Da mesma forma, quando você compara uma expressão do tipo com uma expressão do Decimal tipo ou , a
expressão é Single Double Decimal convertida em ou Single Double . Para Decimal expressões, qualquer
valor fracionado menor que 1E-28 pode ser perdido. Essa perda de valor fracionável pode fazer com que dois
valores sejam comparados como iguais quando não são. Por esse motivo, você deve tomar 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.
Imprecisa de ponto flutuante
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
comparação de valor e o Operador Mod. Para obter mais informações, consulte Solução de problemas de tipos
de dados.
Option Compare Text bases comparações de cadeia de caracteres em uma ordem de classificação textual e sem
maiúsculas e minúsculas determinada pela localidade do aplicativo. Quando você definir Option Compare Text e
classificar os caracteres no exemplo anterior, a seguinte ordem de classificação de texto se aplica:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Dependência de localidade
Quando você definir Option Compare Text , o resultado de uma comparação de cadeia de caracteres pode
depender da localidade na qual 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 se deve aceitar uma tentativa de fazer logoff, deverá estar alerta para a
sensibilidade da localidade. Considere definir Option Compare Binary ou chamar o , que leva a localidade em
StrComp conta.
SE O S O P ERA DO RES SÃ O A C O M PA RA Ç Ã O É
Comparações numéricas tratam Nothing como 0. Comparações de cadeia de caracteres Nothing tratam como
"" (uma cadeia de caracteres vazia).
Sobrecarga
Os operadores de comparação relacional ( < . <= , , , , ) podem ser sobrecarregados, o que significa que uma
classe ou estrutura pode redefinir seu comportamento quando um operativo tem o tipo > >= dessa classe ou
= <> estrutura. Se o código usar qualquer um desses operadores em uma classe ou estrutura desse tipo,
certifique-se de entender o comportamento redefinido. Para obter mais informações, consulte Procedimentos
de operador.
Observe que o operador = pode ser sobrecarregado apenas como um operador de comparação relacional, não
como um operador de atribuição.
Exemplo
O exemplo a seguir mostra vários usos de operadores de comparação relacional, que você usa para comparar
expressões. Operadores de comparação relacional retornam um resultado que representa se a Boolean
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. Se a classificação é sensível a minúsculas ou não, depende
da configuração Comparação de Opções.
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
No exemplo anterior, a primeira comparação retorna False e as comparações restantes retornam True .
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)
27/09/2021 • 5 minutes to read
Syntax
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Partes
result
Obrigatórios. Um Boolean valor que representa o resultado da comparação.
expression1 , expression2
Obrigatórios. Qualquer expressão.
comparisonoperator
Obrigatórios. Qualquer operador de comparação relacional.
object1 , object2
Obrigatórios. Qualquer nome de objeto de referência.
string
Obrigatórios. Qualquer expressão de String .
pattern
Obrigatórios. Qualquer String expressão ou intervalo de caracteres.
Comentários
A tabela a seguir contém uma lista dos operadores de comparação relacional e as condições que determinam
result se é True ou False .
NOTE
O operador = também é usado como um operador de atribuição.
O operador , o operador e o operador têm funcionalidades de comparação específicas que diferem Is IsNot
dos Like operadores na tabela anterior.
Comparando números
Quando você compara uma expressão do tipo Single com uma do tipo , a expressão é Double Single
convertida em Double . Esse comportamento é oposto ao comportamento encontrado no Visual Basic 6.
Da mesma forma, quando você compara uma expressão do tipo com uma expressão do Decimal tipo ou , a
expressão é Single Double Decimal convertida em ou Single Double . Para Decimal expressões, qualquer
valor fracionado menor que 1E-28 pode ser perdido. Essa perda de valor fracionável pode fazer com que dois
valores sejam comparados como iguais quando não são. Por esse motivo, você deve tomar 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.
Imprecisa de ponto flutuante
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
comparação de valor e o Operador Mod. Para obter mais informações, consulte Solução de problemas de tipos
de dados.
Option Compare Text bases comparações de cadeia de caracteres em uma ordem de classificação textual e sem
maiúsculas e minúsculas determinada pela localidade do aplicativo. Quando você definir Option Compare Text e
classificar os caracteres no exemplo anterior, a seguinte ordem de classificação de texto se aplica:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Dependência de localidade
Quando você definir Option Compare Text , o resultado de uma comparação de cadeia de caracteres pode
depender da localidade na qual 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 se deve aceitar uma tentativa de fazer logoff, deverá estar alerta para a
sensibilidade da localidade. Considere definir Option Compare Binary ou chamar o , que leva a localidade em
StrComp conta.
SE O S O P ERA DO RES SÃ O A C O M PA RA Ç Ã O É
Comparações numéricas tratam Nothing como 0. Comparações de cadeia de caracteres Nothing tratam como
"" (uma cadeia de caracteres vazia).
Sobrecarga
Os operadores de comparação relacional ( < . <= , , , , ) podem ser sobrecarregados, o que significa que uma
classe ou estrutura pode redefinir seu comportamento quando um operativo tem o tipo > >= dessa classe ou
= <> estrutura. Se o código usar qualquer um desses operadores em uma classe ou estrutura desse tipo,
certifique-se de entender o comportamento redefinido. Para obter mais informações, consulte Procedimentos
de operador.
Observe que o operador = pode ser sobrecarregado apenas como um operador de comparação relacional, não
como um operador de atribuição.
Exemplo
O exemplo a seguir mostra vários usos de operadores de comparação relacional, que você usa para comparar
expressões. Operadores de comparação relacional retornam um resultado que representa se a Boolean
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. Se a classificação é sensível a minúsculas ou não, depende
da configuração Comparação de Opções.
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
No exemplo anterior, a primeira comparação retorna False e as comparações restantes retornam True .
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)
27/09/2021 • 5 minutes to read
Syntax
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Partes
result
Obrigatórios. Um Boolean valor que representa o resultado da comparação.
expression1 , expression2
Obrigatórios. Qualquer expressão.
comparisonoperator
Obrigatórios. Qualquer operador de comparação relacional.
object1 , object2
Obrigatórios. Qualquer nome de objeto de referência.
string
Obrigatórios. Qualquer expressão de String .
pattern
Obrigatórios. Qualquer String expressão ou intervalo de caracteres.
Comentários
A tabela a seguir contém uma lista dos operadores de comparação relacional e as condições que determinam
result se é True ou False .
NOTE
O operador = também é usado como um operador de atribuição.
O operador , o operador e o operador têm funcionalidades de comparação específicas que diferem Is IsNot
dos Like operadores na tabela anterior.
Comparando números
Quando você compara uma expressão do tipo Single com uma do tipo , a expressão é Double Single
convertida em Double . Esse comportamento é oposto ao comportamento encontrado no Visual Basic 6.
Da mesma forma, quando você compara uma expressão do tipo com uma expressão do Decimal tipo ou , a
expressão é Single Double Decimal convertida em ou Single Double . Para Decimal expressões, qualquer
valor fracionado menor que 1E-28 pode ser perdido. Essa perda de valor fracionável pode fazer com que dois
valores sejam comparados como iguais quando não são. Por esse motivo, você deve tomar 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.
Imprecisa de ponto flutuante
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
comparação de valor e o Operador Mod. Para obter mais informações, consulte Solução de problemas de tipos
de dados.
Option Compare Text bases comparações de cadeia de caracteres em uma ordem de classificação textual e sem
maiúsculas e minúsculas determinada pela localidade do aplicativo. Quando você definir Option Compare Text e
classificar os caracteres no exemplo anterior, a seguinte ordem de classificação de texto se aplica:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Dependência de localidade
Quando você definir Option Compare Text , o resultado de uma comparação de cadeia de caracteres pode
depender da localidade na qual 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 se deve aceitar uma tentativa de fazer logoff, deverá estar alerta para a
sensibilidade da localidade. Considere definir Option Compare Binary ou chamar o , que leva a localidade em
StrComp conta.
SE O S O P ERA DO RES SÃ O A C O M PA RA Ç Ã O É
Comparações numéricas tratam Nothing como 0. Comparações de cadeia de caracteres Nothing tratam como
"" (uma cadeia de caracteres vazia).
Sobrecarga
Os operadores de comparação relacional ( < . <= , , , , ) podem ser sobrecarregados, o que significa que uma
classe ou estrutura pode redefinir seu comportamento quando um operativo tem o tipo > >= dessa classe ou
= <> estrutura. Se o código usar qualquer um desses operadores em uma classe ou estrutura desse tipo,
certifique-se de entender o comportamento redefinido. Para obter mais informações, consulte Procedimentos
de operador.
Observe que o operador = pode ser sobrecarregado apenas como um operador de comparação relacional, não
como um operador de atribuição.
Exemplo
O exemplo a seguir mostra vários usos de operadores de comparação relacional, que você usa para comparar
expressões. Operadores de comparação relacional retornam um resultado que representa se a Boolean
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. Se a classificação é sensível a minúsculas ou não, depende
da configuração Comparação de Opções.
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
No exemplo anterior, a primeira comparação retorna False e as comparações restantes retornam True .
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)
27/09/2021 • 2 minutes to read
Syntax
result = pattern << amount
Partes
result
Obrigatórios. Valor numérico integral. O resultado do deslocamento do padrão de bit. O tipo de dados é o
mesmo que o de pattern .
pattern
Obrigatórios. Expressão numérica integral. O padrão de bit a ser deslocado. O tipo de dados deve ser um tipo
integral ( SByte , Byte , Short , UShort , Integer , UInteger , Long ou ULong ).
amount
Obrigatórios. Expressão numérica. O número de bits para deslocar o padrão de bit. O tipo de dados deve ser
Integer ou ampliado para Integer .
Comentários
Deslocamentos aritméticos não são circulares, o que significa que os bits deslocados uma extremidade do
resultado não são reintroduzidos na outra extremidade. Em um deslocamento aritmético à esquerda, os bits
deslocados além do intervalo do tipo de dados de resultado são descartados e as posições de bits vagadas à
direita são definidas como zero.
para evitar uma mudança de mais bits do que o resultado pode conter, Visual Basic mascara o valor de amount
com uma máscara de tamanho que corresponde ao tipo de dados de pattern . O binário e desses valores é
usado para o valor de deslocamento. As máscaras de tamanho são as seguintes:
M Á SC A RA DE TA M A N H O
T IP O DE DA DO S DE PATTERN M Á SC A RA DE TA M A N H O ( DEC IM A L ) ( H EXA DEC IM A L )
Se amount for zero, o valor de result será idêntico ao valor de pattern . Se amount for negativo, ele será
levado como um valor não assinado e mascarado com a máscara de tamanho apropriada.
As turnos aritméticos nunca geram exceções de estouro.
NOTE
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 seu código usar esse operador em uma
classe ou estrutura desse tipo, certifique-se de que você entendeu seu comportamento redefinido. Para obter mais
informações, consulte procedimentos de operador.
Exemplo
O exemplo a seguir usa o << operador para executar deslocamentos à esquerda aritméticos em valores
integrais. O resultado sempre tem o mesmo tipo de dados que a expressão que está sendo deslocada.
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)
27/09/2021 • 2 minutes to read
Executa um deslocamento aritmético para a esquerda no valor de uma variável ou propriedade e atribui o
resultado de volta à variável ou à propriedade.
Syntax
variableorproperty <<= amount
Partes
variableorproperty
Obrigatórios. Variável ou propriedade de um tipo integral ( SByte ,,,,, Byte Short UShort Integer UInteger ,
Long ou ULong ).
amount
Obrigatórios. Expressão numérica de um tipo de dados que amplia para Integer .
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 a propriedade não pode ser ReadOnly.
O <<= operador primeiro executa um deslocamento aritmético para a esquerda no valor da variável ou da
propriedade. Em seguida, o operador atribui o resultado dessa operação de volta para essa variável ou
propriedade.
Deslocamentos aritméticos não são circulares, o que significa que os bits deslocados uma extremidade do
resultado não são reintroduzidos na outra extremidade. Em um deslocamento aritmético à esquerda, os bits
deslocados além do intervalo do tipo de dados de resultado são descartados e as posições de bits vagadas à
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 seu comportamento redefinido. Para obter mais informações, consulte
procedimentos de operador.
Exemplo
O exemplo a seguir usa o <<= operador para deslocar o padrão de bits de uma Integer variável à esquerda
pelo valor especificado e atribuir o resultado à variável.
Dim var As Integer = 10
Dim shift As Integer = 3
var <<= shift
' The value of var is now 80.
Confira também
Operador de<<
Operadores de atribuição
Operadores Bit Shift
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operador de >> (Visual Basic)
27/09/2021 • 3 minutes to read
Syntax
result = pattern >> amount
Partes
result
Obrigatórios. Valor numérico integral. O resultado do deslocamento do padrão de bit. O tipo de dados é o
mesmo que o de pattern .
pattern
Obrigatórios. Expressão numérica integral. O padrão de bit a ser deslocado. O tipo de dados deve ser um tipo
integral ( SByte , Byte , Short , UShort , Integer , UInteger , Long ou ULong ).
amount
Obrigatórios. Expressão numérica. O número de bits para deslocar o padrão de bit. O tipo de dados deve ser
Integer ou ampliado para Integer .
Comentários
Deslocamentos aritméticos não são circulares, o que significa que os bits deslocados uma extremidade do
resultado não são reintroduzidos na outra extremidade. Em um deslocamento aritmético à direita, os bits
deslocados além da posição do bit mais à direita são descartados e o bit mais à esquerda (sinal) é propagado
para as posições de bits vagas à esquerda. Isso significa que pattern , se o tiver um valor negativo, as posições
vagas serão definidas como um; caso contrário, elas serão definidas como zero.
Observe que os tipos de dados Byte , UShort , UInteger e ULong não são assinados, portanto, não há
nenhum bit de sinal para se propagar. Se pattern for de qualquer tipo não assinado, as posições vagadas
sempre serão definidas como zero.
para evitar a mudança por mais bits do que o resultado pode conter, Visual Basic mascara o valor de amount
com uma máscara de tamanho correspondente ao tipo de dados de pattern . O binário e desses valores é
usado para o valor de deslocamento. As máscaras de tamanho são as seguintes:
M Á SC A RA DE TA M A N H O
T IP O DE DA DO S DE PATTERN M Á SC A RA DE TA M A N H O ( DEC IM A L ) ( H EXA DEC IM A L )
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 seu código usar esse operador
em uma classe ou estrutura desse tipo, 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 executar deslocamentos aritméticos à direita em valores integrais.
O resultado sempre tem o mesmo tipo de dados que a expressão que está sendo deslocada.
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)
27/09/2021 • 2 minutes to read
Executa um deslocamento aritmético para a direita no valor de uma variável ou propriedade e atribui o
resultado de volta à variável ou à propriedade.
Syntax
variableorproperty >>= amount
Partes
variableorproperty
Obrigatórios. Variável ou propriedade de um tipo integral ( SByte ,,,,, Byte Short UShort Integer UInteger ,
Long ou ULong ).
amount
Obrigatórios. Expressão numérica de um tipo de dados que amplia para Integer .
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 a propriedade não pode ser ReadOnly.
O >>= operador primeiro executa um deslocamento aritmético à direita no valor da variável ou da propriedade.
Em seguida, o operador atribui o resultado dessa operação de volta à variável ou à propriedade.
Deslocamentos aritméticos não são circulares, o que significa que os bits deslocados uma extremidade do
resultado não são reintroduzidos na outra extremidade. Em um deslocamento aritmético à direita, os bits
deslocados além da posição de bits mais à direita são descartados e o bit mais à esquerda é propagado para as
posições de bits vagas à esquerda. Isso significa que variableorproperty , se o tiver um valor negativo, as
posições vagas serão definidas como um. Se variableorproperty for positivo ou se seu tipo de dados for um
tipo não assinado, as posições vagadas 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 seu comportamento redefinido. Para obter mais informações, consulte
procedimentos de operador.
Exemplo
O exemplo a seguir usa o >>= operador para deslocar o padrão de bits de uma Integer variável pelo valor
especificado e atribuir o resultado à variável.
Dim var As Integer = 10
Dim shift As Integer = 2
var >>= shift
' The value of var is now 2 (two bits were lost off the right end).
Confira também
Operador de>>
Operadores de atribuição
Operadores Bit Shift
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Instruções
Operador / (Visual Basic)
27/09/2021 • 2 minutes to read
Syntax
expression1 / expression2
Partes
expression1
Obrigatórios. Qualquer expressão numérica.
expression2
Obrigatórios. Qualquer expressão numérica.
Resultado
O resultado é o quociente completo de expression1 dividido por expression2 , incluindo qualquer restante.
o operador \ (Visual Basic) retorna o quociente inteiro, que remove o resto.
Comentários
O tipo de dados do resultado depende dos tipos dos operandos. A tabela a seguir mostra como o tipo de dados
do resultado é determinado.
T IP O S DE DA DO S DO O P ERA N DO T IP O DE DA DO S DE RESULTA DO
Antes da divisão ser executada, todas as expressões numéricas integrais são ampliadas para Double . se você
atribuir o resultado a um tipo de dados integral, Visual Basic tentará converter o resultado de Double para esse
tipo. Isso pode gerar uma exceção se o resultado não couber nesse tipo. Em particular, consulte "tentativa de
divisão por zero" nesta página de ajuda.
Se expression1 ou expression2 for avaliado como Nothing, ele será tratado como zero.
Integral (assinada ou não assinada) Tentativa de conversão de volta para tipo integral gera
OverflowException porque tipos integrais não podem aceitar
PositiveInfinity , NegativeInfinity , ou NaN
NOTE
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 seu código usar esse operador em uma classe ou
estrutura desse tipo, certifique-se de entender seu comportamento redefinido. Para obter mais informações, consulte
procedimentos de operador.
Exemplo
Este exemplo usa o / operador para executar a divisão de ponto flutuante. O resultado é o quociente dos dois
operandos.
As expressões no exemplo anterior retornam valores de 2,5 e 3,333333. Observe que o resultado é sempre
ponto flutuante ( Double ), embora ambos os operandos sejam constantes de inteiro.
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)
27/09/2021 • 2 minutes to read
Divide o valor de uma variável ou propriedade pelo valor de uma expressão e atribui o resultado de ponto
flutuante à variável ou à propriedade.
Syntax
variableorproperty /= expression
Partes
variableorproperty
Obrigatórios. Qualquer variável numérica ou propriedade.
expression
Obrigatórios. Qualquer expressão numérica.
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 a propriedade não pode ser ReadOnly.
Em /= primeiro lugar, o operador divide o valor da variável ou da propriedade (no lado esquerdo do operador)
pelo valor da expressão (no lado direito do operador) do. Em seguida, o operador atribui o resultado de ponto
flutuante dessa operação à variável ou à propriedade.
Essa instrução atribui um Double valor à variável ou à propriedade à esquerda. Se Option Strict for On ,
variableorproperty deve ser um Double . se Option Strict for Off , Visual Basic executará uma conversão
implícita e atribuirá o valor resultante a variableorproperty , com um possível erro no tempo de execução. Para
obter mais informações, consulte conversões de alargamento e estreitamento e instrução Option Strict.
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 seu comportamento redefinido. Para obter mais informações,
consulte procedimentos de operador.
Exemplo
O exemplo a seguir usa o /= operador para dividir uma Integer variável por um segundo e atribuir o
quociente à primeira variável.
Syntax
expression1 \ expression2
Partes
expression1
Obrigatórios. Qualquer expressão numérica.
expression2
Obrigatórios. Qualquer expressão numérica.
Resultado
O resultado é o quociente inteiro de expression1 dividido por expression2 , que descarta qualquer restante e
retém apenas a parte inteira. Isso é conhecido como truncamento.
O tipo de dados de resultado é um tipo numérico apropriado para os tipos de dados de expression1 e
expression2 . Consulte as tabelas "aritmética de inteiros" em tipos de dados de resultados do operador.
o operador/(Visual Basic) retorna o quociente completo, que retém o restante na parte fracionária.
Comentários
antes de executar a divisão, Visual Basic tenta converter qualquer expressão numérica de ponto flutuante para
Long . Se Option Strict for On , ocorrerá um erro do compilador. Se Option Strict for Off , um
OverflowException será possível se o valor estiver fora do intervalo do tipo de dados Long. A conversão em
Long também está sujeita ao arredondamento do banco. Para obter mais informações, consulte "partes
fracionárias" em funções de conversão de tipo.
Se expression1 ou expression2 for avaliado como Nothing, ele será tratado como zero.
Exemplo
O exemplo a seguir usa o \ operador para executar a divisão de inteiro. O resultado é um inteiro que
representa o quociente inteiro dos dois operandos, com o restante Descartado.
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 =
27/09/2021 • 2 minutes to read
Divide o valor de uma variável ou propriedade pelo valor de uma expressão e atribui o resultado inteiro à
variável ou propriedade .
Syntax
variableorproperty \= expression
Partes
variableorproperty
Obrigatórios. Qualquer variável numérica ou propriedade.
expression
Obrigatórios. Qualquer expressão numérica.
Comentários
O elemento à esquerda do operador pode ser uma variável escalar simples, uma propriedade \= ou um
elemento de uma matriz. A variável ou a propriedade não pode ser ReadOnly.
O operador divide o valor de uma variável ou propriedade à esquerda pelo valor à direita e atribui o resultado
inteiro à variável ou propriedade à \= esquerda
Para obter mais informações sobre a divisão de inteiros, consulte Operador (Visual Basic).
Sobrecarga
O \ operador pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu
comportamento quando um operador tem o tipo dessa classe ou estrutura. A sobrecarga do \ operador afeta
o comportamento do \= operador. Se o código usar \= em uma classe ou estrutura que sobrecarregar ,
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 dividir uma Integer variável por segundo e atribuir o resultado
inteiro à primeira variável.
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)
27/09/2021 • 2 minutes to read
Syntax
number ^ exponent
Partes
number
Obrigatórios. Qualquer expressão numérica.
exponent
Obrigatórios. Qualquer expressão numérica.
Resultado
O resultado é number elevado à potência de , sempre como um exponent Double valor.
Comentários
Visual Basic sempre executa a exponização no Tipo de Dados Duplo.
O valor de exponent pode ser fracionado, negativo ou ambos.
Quando mais de uma exponnização é executada em uma única expressão, o operador é avaliado conforme ele é
encontrado da ^ esquerda para a direita.
NOTE
O ^ operador pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu comportamento
quando um operador tem o tipo dessa classe ou estrutura. Se seu código usar esse operador em uma classe ou estrutura
desse tipo, 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 aumentar um número para a potência de um expoente. O resultado
é o primeiro operand elevado à potência do segundo.
Dim exp1, exp2, exp3, exp4, exp5, exp6 As Double
exp1 = 2 ^ 2
exp2 = 3 ^ 3 ^ 3
exp3 = (-5) ^ 3
exp4 = (-5) ^ 4
exp5 = 8 ^ (1.0 / 3.0)
exp6 = 8 ^ (-1.0 / 3.0)
exp4 = -5 ^ 4 seria calculado como –(5 para a quarta potência), o que resultaria em -625.
seria calculado como (8 para a potência -1 ou 0,125) dividido por 3,0, o que resultaria
exp6 = 8 ^ -1.0 / 3.0
em 0,0416666666666666666666666666666666666666667.
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)
27/09/2021 • 2 minutes to read
Gera o valor de uma variável ou propriedade para a potência de uma expressão e atribui o resultado de volta à
variável ou à propriedade.
Syntax
variableorproperty ^= expression
Partes
variableorproperty
Obrigatórios. Qualquer variável numérica ou propriedade.
expression
Obrigatórios. Qualquer expressão numérica.
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 a propriedade não pode ser ReadOnly.
O ^= operador primeiro gera o valor da variável ou da propriedade (no lado esquerdo do operador) para a
potência do valor da expressão (no lado direito do operador).... Em seguida, o operador atribui o resultado dessa
operação de volta à variável ou à propriedade.
Visual Basic sempre executa exponenciação no tipo de dados Double. Os operandos de qualquer tipo diferente
são convertidos em Double e o resultado é sempre Double .
O valor de expression pode ser fracionário, negativo ou ambos.
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 seu comportamento redefinido. Para obter mais informações, consulte
procedimentos de operador.
Exemplo
O exemplo a seguir usa o ^= operador para aumentar o valor de uma Integer variável para a potência de
uma segunda variável e atribuir o resultado à primeira variável.
Testa o valor do operando esquerdo para NULL ( Nothing ) antes de executar uma operação de acesso de
membro ( ?. ) ou de índice ( ?() ); retorna Nothing se o operando à esquerda for avaliado como Nothing .
Observe que em expressões que normalmente retornam tipos de valor, o operador NULL-Conditional retorna
um Nullable<T> .
Esses operadores ajudam a escrever menos código para lidar com verificações nulas, especialmente quando
decrescentes em estruturas de dados. Por exemplo:
Para comparação, o código alternativo para a primeira dessas expressões sem um operador condicional nulo é:
Às vezes, você precisa tomar 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 exemplo a seguir):
Você pode encurtar seu código e evitar a verificação manual de NULL usando o operador NULL-Conditional da
seguinte maneira:
Os operadores condicionais nulos estão entrando em curto-circuito. Se uma operação em uma cadeia de acesso
de membro condicional e operações de índice forem retornadas Nothing , o restante da execução da cadeia
será interrompido. No exemplo a seguir, C(E) não é avaliado se A , B ou C é avaliado como Nothing .
A?.B?.C?(E)
Outro uso para acesso de membro condicional nulo é invocar delegados de forma segura para thread com
muito menos código. O exemplo a seguir define dois tipos, a NewsBroadcaster e a NewsReceiver . Os itens de
notícias são enviados ao destinatário pelo [Link] delegado.
Se não houver nenhum elemento na SendNews lista de invocação, o SendNews delegado lançará um
NullReferenceException . Antes de operadores condicionais NULL, o código como o seguinte garantiu que a lista
de invocação de delegado não foi Nothing :
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
?. e? () operadores condicionais nulos (Visual Basic)
28/09/2021 • 2 minutes to read
Testa o valor do operando esquerdo para NULL ( Nothing ) antes de executar uma operação de acesso de
membro ( ?. ) ou de índice ( ?() ); retorna Nothing se o operando à esquerda for avaliado como Nothing .
Observe que em expressões que normalmente retornam tipos de valor, o operador NULL-Conditional retorna
um Nullable<T> .
Esses operadores ajudam a escrever menos código para lidar com verificações nulas, especialmente quando
decrescentes em estruturas de dados. Por exemplo:
Para comparação, o código alternativo para a primeira dessas expressões sem um operador condicional nulo é:
Às vezes, você precisa tomar 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 exemplo a seguir):
Você pode encurtar seu código e evitar a verificação manual de NULL usando o operador NULL-Conditional da
seguinte maneira:
Os operadores condicionais nulos estão entrando em curto-circuito. Se uma operação em uma cadeia de acesso
de membro condicional e operações de índice forem retornadas Nothing , o restante da execução da cadeia
será interrompido. No exemplo a seguir, C(E) não é avaliado se A , B ou C é avaliado como Nothing .
A?.B?.C?(E)
Outro uso para acesso de membro condicional nulo é invocar delegados de forma segura para thread com
muito menos código. O exemplo a seguir define dois tipos, a NewsBroadcaster e a NewsReceiver . Os itens de
notícias são enviados ao destinatário pelo [Link] delegado.
Se não houver nenhum elemento na SendNews lista de invocação, o SendNews delegado lançará um
NullReferenceException . Antes de operadores condicionais NULL, o código como o seguinte garantiu que a lista
de invocação de delegado não foi Nothing :
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)
27/09/2021 • 2 minutes to read
Syntax
AddressOf procedurename
Partes
procedurename
Obrigatórios. Especifica o procedimento a ser referenciado pelo delegado recém-criado.
Comentários
O AddressOf operador 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.
O operador pode ser usado como o operador de um construtor delegado ou pode ser usado em um contexto
no qual o tipo do delegado pode ser determinado AddressOf pelo compilador.
Exemplo 1
Este exemplo usa o AddressOf operador para designar um delegado para manipular Click o evento de um
botão.
Exemplo 2
O exemplo a seguir usa o AddressOf operador para designar a função de inicialização para um thread.
Sub UseThread()
Dim t As New [Link](AddressOf CountSheep)
[Link]()
End Sub
Confira também
Instrução Declare
Instrução Function
Instrução Sub
Representantes
Operador And (Visual Basic)
27/09/2021 • 3 minutes to read
Executa uma conjunção lógica em duas Boolean expressões, ou uma conjunção bit a bit em duas expressões
numéricas.
Syntax
result = expression1 And expression2
Partes
result
Obrigatórios. Qualquer Boolean ou expressão numérica. Para comparação booliana, result é a conjunção
lógica de dois Boolean valores. No caso de operações bit-a-bit, result é um valor numérico que representa a
conjunção de bit de dois padrões de bit numérico.
expression1
Obrigatórios. Qualquer Boolean ou expressão numérica.
expression2
Obrigatórios. Qualquer Boolean ou expressão numérica.
Comentários
Para comparação booliana, result é True se e somente se for expression1 e expression2 for avaliado como
True . A tabela a seguir ilustra como o result é determinado.
NOTE
Em uma comparação Booleana, o And operador sempre avalia as duas expressões, o que pode incluir fazer chamadas de
procedimento. O Operador AndAlso executa um curto-circuito, o que significa que expression1 , se for False ,
expression2 não será avaliado.
Quando aplicado a valores numéricos, o And operador executa uma comparação bit a bit de bits posicionados
de forma idêntica em duas expressões numéricas e define o bit correspondente de result acordo com a tabela
a seguir.
SE O B IT IN EXPRESSION1 FOR E O B IT IN EXPRESSION2 É O B IT EM RESULT É
1 1 1
1 0 0
0 1 0
0 0 0
NOTE
Uma vez que os operadores lógicos e bit-a-or têm uma precedência mais baixa do que outros operadores aritméticos e
relacionais, todas as operações de bit-nte devem estar entre parênteses para garantir resultados precisos
Tipos de dados
se os operandos contiverem uma Boolean expressão e uma expressão numérica, Visual Basic converterá a
Boolean expressão 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 é Boolean . Para uma comparação de bits, o tipo
de dados de resultado é um tipo numérico apropriado para os tipos de dados de expression1 e expression2 .
Consulte a tabela "comparações relacionais e de bits-bit" em tipos de dados de resultados do operador.
NOTE
O And 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 seu código usar esse operador em uma
classe ou estrutura desse tipo, certifique-se de entender seu comportamento redefinido. Para obter mais informações,
consulte procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o And operador para executar uma conjunção lógica em duas expressões. O resultado é
um Boolean valor que representa se ambas as expressões são True .
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck As Boolean
firstCheck = a > b And b > c
secondCheck = b > a And b > c
Exemplo 2
O exemplo a seguir usa o And operador para executar uma conjunção lógica em bits individuais de duas
expressões numéricas. O bit no padrão de resultado será definido se os bits correspondentes nos operandos
estiverem definidos como 1.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (a And b)
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)
27/09/2021 • 2 minutes to read
Syntax
result = expression1 AndAlso expression2
Partes
T ERM O DEF IN IÇ Ã O
Comentários
Uma operação lógica é chamada de curto-circuito se o código compilado puder ignorar a avaliação de uma
expressão, dependendo 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 pode
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 as duas expressões forem avaliadas como True , result será True . A tabela a seguir ilustra como o
result é determinado.
Tipos de dados
O AndAlso operador é definido somente para o tipo de dados booliano. Visual Basic converte cada operando
conforme necessário Boolean antes de avaliar a expressão. se você atribuir o resultado a um tipo numérico,
Visual Basic o converterá de Boolean para esse tipo, isso False se tornará 0 e True se tornará -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 tem o tipo dessa classe ou estrutura. Sobrecarregar
os And operadores e IsFalse afeta o comportamento do AndAlso operador. Se o seu código usa AndAlso em
uma classe ou estrutura que sobrecarrega And e, certifique-se de IsFalse entender seu comportamento
redefinido. Para obter mais informações, consulte procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o AndAlso operador para executar uma conjunção lógica em duas expressões. O
resultado é um Boolean valor que representa se a expressão conjunta inteira é verdadeira. Se a primeira
expressão for False , a segunda não será avaliada.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b AndAlso b > c
secondCheck = b > a AndAlso b > c
thirdCheck = a > b AndAlso c > b
O exemplo anterior produz resultados de True , False , e False , respectivamente. No cálculo de secondCheck
, a segunda expressão não é avaliada porque a primeira já é False . No entanto, a segunda expressão é avaliada
no cálculo de thirdCheck .
Exemplo 2
O exemplo a seguir mostra um Function procedimento que pesquisa um determinado valor entre os
elementos de uma matriz. Se a matriz estiver vazia ou se o comprimento da matriz tiver sido excedido, a While
instrução não testará o elemento de matriz em relação ao valor de pesquisa.
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)
02/10/2021 • 4 minutes to read
Você aplica o Await operador a um operando em um método assíncrono ou expressão lambda para suspender
a execução do método até que a tarefa esperada seja concluída. A tarefa representa um trabalho em andamento.
O método no qual Await é usado deve ter um modificador assíncrono . 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.
NOTE
As palavras-chave Async e Await foram introduzidas no Visual Studio 2012. Para obter uma introdução à
programação assíncrona, consulte programação assíncrona com Async e Await.
Normalmente, a tarefa à qual você aplica o Await operador é o valor de retorno de uma chamada para um
método que implementa o padrão assíncrono baseado em tarefa, ou seja, um Task ou um Task<TResult> .
No código a seguir, o HttpClient método GetByteArrayAsync retorna getContentsTask , a Task(Of Byte()) . A
tarefa é uma promessa de produzir a matriz de bytes real quando a operação é concluída. O operador Await é
aplicado a getContentsTask para suspender a execução em SumPageSizesAsync até que getContentsTask seja
concluída. Enquanto isso, o controle é retornado ao chamador de SumPageSizesAsync . Quando getContentsTask
for concluído, a expressão Await resulta em uma matriz de bytes.
' To use the HttpClient type in desktop apps, you must include a using directive and add a
' reference for the [Link] namespace.
Dim client As HttpClient = New HttpClient()
' . . .
Dim getContentsTask As Task(Of Byte()) = [Link](url)
Dim urlContents As Byte() = Await getContentsTask
' Equivalently, now that you see how it works, you can write the same thing in a single line.
'Dim urlContents As Byte() = Await [Link](url)
' . . .
End Function
IMPORTANT
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 for aplicado ao resultado de uma chamada de método que retorna um Task(Of TResult) , o tipo da
Await
Await expressão será TResult. Se Await for aplicado ao resultado de uma chamada de método que retorna um
Task , a Await expressão não retornará um valor. O exemplo a seguir ilustra a diferença.
' Await used with a method that returns a Task(Of TResult).
Dim result As TResult = Await AsyncMethodThatReturnsTaskTResult()
Uma Await expressão ou instrução não bloqueia o thread no qual está sendo executada. Em vez disso, faz com
que o compilador inscreva o restante do método assíncrono, após a Await expressão, como uma continuação
na tarefa esperada. 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.
Uma Await expressão só pode ocorrer no corpo de um método de circunscrição ou expressão lambda que é
marcada por um Async modificador. O termo Await serve como uma palavra-chave somente nesse contexto.
Em outro local, ele será interpretado como um identificador. Dentro do Async método ou da expressão lambda,
uma Await expressão não pode ocorrer em uma expressão de consulta, no Catch Finally bloco ou de uma
tentativa... Capturar... Instrução Finally, na expressão de variável de controle de loop de um For For Each loop
ou, no corpo de uma instrução SyncLock .
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çará a exceção.
Se você aguardar um método assíncrono de retorno de tarefa que é cancelado, o Await operador relançará um
OperationCanceledException .
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 [Link]. 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.
Para obter exemplos de tratamento de erros em métodos assíncronos, consulte try... Capturar... Instrução Finally.
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 Await operador, WaitSynchronously é executado de forma síncrona, apesar do uso
do Async modificador em sua definição e uma chamada para [Link] em seu corpo.
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles [Link]
' Call the method that runs asynchronously.
Dim result As String = Await WaitAsynchronouslyAsync()
' The following method runs synchronously, despite the use of Async.
' You cannot move or resize the Form1 window while [Link]
' is running because the UI thread is blocked.
Public Async Function WaitSynchronously() As Task(Of String)
' Import [Link] for the Sleep method.
[Link](10000)
Return "Finished"
End Function
Confira também
Programação assíncrona com Async e Await
Walkthrough: acessando a Web usando Async e Await
Async
Operador DirectCast (Visual Basic)
27/09/2021 • 2 minutes to read
Comentários
DirectCast o não usa as rotinas auxiliares de tempo de execução Visual Basic para conversão, para que possa
fornecer um desempenho um pouco melhor do que CType ao converter de e para o tipo de dados Object .
Você usa a DirectCast palavra-chave semelhante à maneira como usa a função CType e a palavra-chave do
Operador TryCast . Você fornece uma expressão como o primeiro argumento e um tipo para convertê-lo como
o segundo argumento. DirectCast requer uma relação de herança ou de implementação entre os tipos de
dados dos dois argumentos. Isso significa que um tipo deve herdar ou implementar o outro.
Erros e falhas
DirectCast gera 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 for restrita, ela poderá falhar em tempo de execução. Se isso acontecer, o tempo de
execução gera um InvalidCastException erro.
Palavras-chave de conversão
Uma comparação das palavras-chave de conversão de tipo é a seguinte:
FA L H A DE T EM P O DE
PA L AVRA - C H AVE T IP O S DE DA DO S REL A Ç Ã O DE A RGUM EN TO EXEC UÇ Ã O
Operador TryCast Somente tipos de referência Um tipo deve herdar ou Não retorna nada
implementar o outro tipo
Exemplo
O exemplo a seguir demonstra dois usos de DirectCast , um que falha em tempo de execução e um que é bem
sucedido.
Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New [Link]
Dim c As [Link]
' The following conversion succeeds.
c = DirectCast(f, [Link])
No exemplo anterior, o tipo de tempo de execução de q é Double . CType tem sucesso porque Double pode
ser convertido em Integer . No entanto, a primeira DirectCast falha em tempo de execução porque o tipo de
tempo de execução de Double não tem nenhuma relação de herança com Integer , embora exista uma
conversão. O segundo DirectCast é executado com sucesso porque converte de tipo Form para tipo Control ,
do qual Form herda.
Confira também
[Link]
Conversões de Widening e Narrowing
Conversões implícitas e explícitas
Expressão de função (Visual Basic)
27/09/2021 • 3 minutes to read
Syntax
Function ( [ parameterlist ] ) expression
- or -
Function ( [ parameterlist ] )
[ statements ]
End Function
Partes
T ERM O DEF IN IÇ Ã 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,
consulte instrução delegate e conversão de delegado reduzida.
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 em um valor para o parâmetro.
Exemplo 2
Como alternativa, você pode declarar e executar a função ao mesmo tempo.
Exemplo 3
Veja a seguir um exemplo de uma expressão lambda que incrementa seu argumento e retorna o valor. O
exemplo mostra a sintaxe da expressão lambda de linha única e de várias linhas para uma função. Para obter
mais exemplos, consulte expressões lambda.
Exemplo 4
As expressões lambda são a base de muitos dos operadores de consulta na consulta de Language-Integrated
(LINQ) e podem ser usadas explicitamente em consultas baseadas em método. O exemplo a seguir mostra uma
consulta LINQ típica, seguida pela conversão da consulta em formato de método.
Dim londonCusts = From cust In [Link]
Where [Link] = "London"
Select cust
Para obter mais informações sobre métodos de consulta, consulte consultas. Para obter mais informações sobre
operadores de consulta padrão, consulte 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 booleanas
Operador If
Conversão de delegado reduzida
Operador GetType (Visual Basic)
27/09/2021 • 2 minutes to read
Retorna um Type objeto para o tipo especificado. O Type objeto fornece informações sobre o tipo, como suas
propriedades, métodos e eventos.
Sintaxe
GetType(typename)
Parâmetros
PA RÂ M ET RO DESC RIÇ Ã O
Comentários
O GetType operador retorna o objeto para o Type typename especificado. Você pode passar o nome de
qualquer tipo definido em typename . Isso inclui o seguinte:
Qualquer Visual Basic de dados, como Boolean ou Date .
Qualquer .NET Framework classe, estrutura, módulo ou interface, como [Link] ou
[Link] .
Qualquer classe, estrutura, módulo ou interface definida pelo seu aplicativo.
Qualquer matriz definida pelo seu aplicativo.
Qualquer delegado definido pelo seu aplicativo.
Qualquer enumeração definida por Visual Basic, o .NET Framework ou seu aplicativo.
Se você quiser obter o objeto de tipo de uma variável de objeto, use o [Link] método .
O GetType operador pode ser útil na seguinte circunstância:
Você deve acessar os metadados de um tipo em tempo de executar. O Type objeto fornece metadados, como
membros de tipo e informações de implantação. Você precisa disso, por exemplo, para refletir sobre um
assembly. Para obter mais informações, consulte também [Link] .
Exemplo
Os exemplos a seguir mostram o GetType operador em uso.
' 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
[Link]
[Link]
Operador GetXmlNamespace (Visual Basic)
27/09/2021 • 2 minutes to read
Syntax
GetXmlNamespace(xmlNamespacePrefix)
Partes
xmlNamespacePrefix Opcional. A cadeia de caracteres que identifica o prefixo do namespace XML. Se fornecido,
essa cadeia de caracteres deve ser um identificador XML válido. Para obter mais informações, consulte nomes
de elementos XML declarados e atributos. Se nenhum prefixo for especificado, o namespace padrão será
retornado. Se nenhum namespace padrão for especificado, o namespace vazio será retornado.
Valor Retornado
O XNamespace objeto que corresponde ao prefixo do namespace XML.
Comentários
O GetXmlNamespaceoperador Obtém o XNamespace objeto que corresponde ao prefixo de namespace XML
xmlNamespacePrefix .
Você pode usar prefixos de namespace XML diretamente em literais XML e propriedades de eixo XML. No
entanto, você deve usar o GetXmlNamespace operador para converter um prefixo de namespace em um
XNamespace objeto antes de poder usá-lo em seu código. você pode acrescentar um nome de elemento não
qualificado a um XNamespace objeto para obter um objeto totalmente qualificado XName , que muitos
métodos de LINQ to XML exigem.
Exemplo
O exemplo a seguir importa ns como um prefixo de namespace XML. Em seguida, ele usa o prefixo do
namespace para criar um literal XML e acessar o primeiro nó filho que tem o nome qualificado ns:phone . Em
seguida, ele passa esse nó filho para a ShowName sub-rotina, que constrói um nome qualificado usando o
GetXmlNamespace operador. ShowName Em seguida, a sub-rotina passa o nome qualificado para o Ancestors
método para obter o ns:contact nó pai.
' Place Imports statements at the top of your program.
Imports <xmlns:ns="[Link]
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 Module
Quando você chama [Link]() , ele exibe uma caixa de mensagem que contém o
seguinte texto:
Name: Patrick Hines
Confira também
Instrução Imports (namespace XML)
Acessando XML no Visual Basic
Operador If (Visual Basic)
27/09/2021 • 3 minutes to read
Usa a avaliação de curto-circuito para retornar condicionalmente um dos dois valores. O If operador pode ser
chamado com três argumentos ou com dois argumentos.
Syntax
If( [argument1,] argument2, argument3 )
Um operador chamado com três argumentos funciona como uma função, exceto pelo fato de If IIf usar a
avaliação de curto-circuito. Uma função sempre avalia todos os três argumentos, enquanto um operador que
tem três argumentos avalia IIf If apenas dois deles. O primeiro If argumento é avaliado e o resultado é
lançado como um valor ou Boolean True False . Se o valor for True , será avaliado e seu valor será
argument2 retornado, mas não será argument3 avaliado. Se o valor da Boolean expressão for , será avaliado e
seu valor será False argument3 retornado, mas não será argument2 avaliado. Os exemplos a seguir ilustram o
uso de If quando três argumentos são usados:
' This statement prints TruePart, because the first argument is true.
[Link](If(True, "TruePart", "FalsePart"))
' This statement prints FalsePart, because the first argument is false.
[Link](If(False, "TruePart", "FalsePart"))
Dim number = 3
' With number set to 3, this statement prints Positive.
[Link](If(number >= 0, "Positive", "Negative"))
number = -1
' With number set to -1, this statement prints Negative.
[Link](If(number >= 0, "Positive", "Negative"))
O exemplo a seguir ilustra o valor da avaliação de curto-circuito. O exemplo mostra duas tentativas de dividir
variável number por divisor variável, exceto quando divisor é zero. Nesse caso, um 0 deve ser retornado e
nenhuma tentativa deve ser feita para executar a divisão porque um erro de tempo de execução resultaria.
Como a expressão usa a avaliação de curto-circuito, ela avalia o segundo ou o terceiro If argumento,
dependendo do valor do primeiro argumento. Se o primeiro argumento for true, o divisor não será zero e será
seguro avaliar o segundo argumento e executar a divisão. Se o primeiro argumento for false, 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 resultado de erro. No entanto, IIf como não usa a avaliação de curto-circuito, o
segundo argumento é avaliado mesmo quando o primeiro argumento é false. Isso causa um erro de divisão por
zero em tempo de executar.
number = 12
' When the divisor is 0, IIf causes a run-time error, but If does not.
divisor = 0
[Link](If(divisor <> 0, number \ divisor, 0))
' [Link](IIf(divisor <> 0, number \ divisor, 0))
Quando o Boolean argumento é omitido, o primeiro argumento deve ser uma referência ou um tipo de valor
anulado. Se o primeiro argumento for avaliada como Nothing , o valor do segundo argumento será retornado.
Em todos os outros casos, o valor do primeiro argumento é retornado. O exemplo a seguir ilustra como essa
avaliação funciona:
' Variable first is a nullable type.
Dim first? As Integer = 3
Dim second As Integer = 6
second = Nothing
' Variable first <> Nothing, so the value of first is returned again.
[Link](If(first, second))
first = Nothing
second = 6
' Variable first = Nothing, so 6 is returned.
[Link](If(first, second))
Confira também
IIf
Tipos de valor que podem ser anulados
Nothing
Operador Is (Visual Basic)
27/09/2021 • 2 minutes to read
Syntax
result = object1 Is object2
Partes
result
Obrigatórios. Qualquer Boolean valor.
object1
Obrigatórios. Qualquer Object nome.
object2
Obrigatórios. Qualquer Object nome.
Comentários
O Is operador 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 ambos se object2 referirem exatamente à mesma instância de
objeto, será ; se não result True fizerem isso, result será False .
NOTE
A Is palavra-chave também é usada em Selecionar... Instrução Case.
Exemplo
O exemplo a seguir usa o Is operador para comparar pares de referências de objeto. Os resultados são
atribuídos a um Boolean valor que representa se os dois objetos são idênticos.
Dim myObject As New Object
Dim otherObject As New Object
Dim yourObject, thisObject, thatObject As Object
Dim myCheck As Boolean
yourObject = myObject
thisObject = myObject
thatObject = otherObject
' The following statement sets myCheck to True.
myCheck = yourObject Is thisObject
' The following statement sets myCheck to False.
myCheck = thatObject Is thisObject
' The following statement sets myCheck to False.
myCheck = myObject Is thatObject
thatObject = myObject
' The following statement sets myCheck to True.
myCheck = thisObject Is thatObject
Como demonstra o exemplo anterior, você pode usar o operador para testar objetos de limite antecipado Is e
de limite tardia.
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)
27/09/2021 • 2 minutes to read
NOTE
O IsFalse operador 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 seu código usar esse operador em uma
classe ou estrutura desse tipo, certifique-se de entender seu comportamento redefinido. Para obter mais informações,
consulte procedimentos de operador.
Exemplo
O exemplo de código a seguir define o contorno de uma estrutura que inclui definições para os IsFalse
IsTrue operadores e.
Public Structure p
Dim a As Double
Public Shared Operator IsFalse(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsFalse of w.
Return b
End Operator
Public Shared Operator IsTrue(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsTrue of w.
Return b
End Operator
End Structure
Confira também
Operador IsTrue
Como definir um operador
Operador AndAlso
Operador IsNot (Visual Basic)
27/09/2021 • 2 minutes to read
Syntax
result = object1 IsNot object2
Partes
result
Comentários
O IsNot operador 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 ambos se referirem exatamente à mesma instância de
objeto, result será False ; se não forem, result é True .
IsNot é o oposto do Is operador. A vantagem do IsNot é que você pode evitar uma sintaxe estranha com
Not e Is , que pode ser difícil de ler.
Você pode usar os Is IsNot operadores e para testar os objetos de ligação antecipada e de associação tardia.
Exemplo
O exemplo de código a seguir usa o Is operador e o IsNot operador para realizar a mesma comparação.
NOTE
O IsTrue operador 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 seu código usar esse operador em uma
classe ou estrutura desse tipo, certifique-se de entender seu comportamento redefinido. Para obter mais informações,
consulte procedimentos de operador.
Exemplo
O exemplo de código a seguir define o contorno de uma estrutura que inclui definições para os IsFalse
IsTrue operadores e.
Public Structure p
Dim a As Double
Public Shared Operator IsFalse(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsFalse of w.
Return b
End Operator
Public Shared Operator IsTrue(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsTrue of w.
Return b
End Operator
End Structure
Confira também
Operador IsFalse
Como definir um operador
Operador OrElse
Operador Like (Visual Basic)
27/09/2021 • 6 minutes to read
IMPORTANT
No momento, não há suporte para o operador Like no .NET Core e .NET Standard projetos.
Syntax
result = string Like pattern
Partes
result
Obrigatórios. Qualquer Boolean variável. O resultado é Boolean um valor que indica se o satisfaz ou não o
string pattern .
string
Obrigatórios. Qualquer expressão de String .
pattern
Obrigatórios. Qualquer String expressão em conformidade com as convenções de correspondência de
padrões descritas em "Comentários".
Comentários
Se o valor em string satisfaça o padrão contido em pattern , result será True . Se a cadeia de caracteres
não atender ao padrão, result será False . Se e string são pattern cadeias de caracteres vazias, o resultado
é 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
A correspondência de padrões integrado fornece uma ferramenta versátil para comparações de cadeia de
caracteres. Os recursos de correspondência de padrões permitem que você corresponde a cada caractere em
um caractere específico, um caractere curinga, uma lista de caracteres string ou um intervalo de caracteres. A
tabela a seguir mostra os caracteres permitidos em pattern e o que eles corresponderem.
Listas de caracteres
Um grupo de um ou mais caracteres ( ) entre colchetes ( ) pode ser usado para corresponder a qualquer
caractere único em e pode incluir quase qualquer código de caractere, incluindo charlist [ ] string dígitos.
Um ponto de exclamação ( ) no início de significa que uma corresponder será feita se qualquer caractere, exceto
os caracteres ! charlist charlist em, for encontrado em string . Quando usado entre colchetes externos,
o ponto de exclamação corresponde a si mesmo.
Caracteres Especiais
Para corresponder aos caracteres especiais colchete esquerdo ( ), 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
contém um de um grupo de caracteres ou nenhum string caractere, poderá usar duas Like vezes. Para ver
um exemplo, consulte Como corresponder uma cadeia de caracteres a 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, resulta em uma corresponder se a posição de caractere correspondente
em contiver qualquer caractere dentro do intervalo – e resulta em uma combinação se a posição de caractere
correspondente contiver qualquer caractere fora do [A–Z] string intervalo – A Z [!H–L] H L .
Quando você especifica um intervalo de caracteres, eles devem aparecer em ordem de classificação crescente,
ou seja, do mais baixo para o mais alto. Portanto, [A–Z] é um padrão válido, mas não [Z–A] é.
Vários intervalos de caracteres
Para especificar vários intervalos para a mesma posição de caractere, coloque-os entre os mesmos colchetes
sem delimitadores. Por exemplo, resulta em uma combinação se a posição de caractere correspondente em
contém qualquer caractere dentro do [A–CX–Z] intervalo – ou do intervalo – string A C X Z .
Uso do hífen
Um hífen ( ) pode aparecer no início (após um ponto de exclamação, se for o caso) ou no final de para –
charlist corresponder a si mesmo. Em qualquer outro local, o hífen identifica um intervalo de caracteres
delimitados pelos caracteres em ambos os lados do hífen.
Sequência de colagem
O significado de um intervalo especificado depende da ordenação de caracteres em tempo de execução,
conforme determinado por e pela configuração de localidade do sistema em que o Option Compare código está
sendo executado. Com Option Compare Binary , o intervalo corresponde a , , , e [A–E] A B C D E . Com
Option Compare Text , corresponde a , , , , , [A–E] , , A , a , , , À e à B b C c D d E e . O intervalo
não é igual Ê ou porque ê os caracteres acentos são organizados após caracteres não acentos na ordem de
classificação.
Caracteres digraph
Em alguns idiomas, há caracteres alfabéticos que representam dois caracteres separados. Por exemplo, várias
linguagens usam o caractere æ para representar os caracteres e quando a eles aparecem e juntos. O Like
operador reconhece que o único caractere digraph e os dois caracteres individuais são equivalentes.
Quando um idioma que usa um caractere digraph é especificado nas configurações de localidade do sistema,
uma ocorrência do único caractere digraph em ou corresponde à sequência de dois caracteres equivalente na
outra cadeia pattern de caracteres. string Da mesma forma, um caractere digraph entre colchetes (por si só,
em uma lista ou em um intervalo) corresponde à sequência equivalente de dois pattern caracteres em string
.
Sobrecarga
O Like operador pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu
comportamento quando um operador tem o tipo dessa classe ou estrutura. Se seu código usar esse operador
em uma classe ou estrutura desse tipo, certifique-se de entender seu comportamento redefinido. Para obter
mais informações, consulte Procedimentos de operador.
Exemplo
Este exemplo usa o operador Like para comparar cadeias de caracteres com vários padrões. Os resultados vão
para uma Boolean variável que indica se cada cadeia de caracteres satisfaz o padrão.
Dim testCheck As Boolean
' The following statement returns True (does "F" satisfy "F"?)
testCheck = "F" Like "F"
' The following statement returns False for Option Compare Binary
' and True for Option Compare Text (does "F" satisfy "f"?)
testCheck = "F" Like "f"
' The following statement returns False (does "F" satisfy "FFF"?)
testCheck = "F" Like "FFF"
' The following statement returns True (does "aBBBa" have an "a" at the
' beginning, an "a" at the end, and any number of characters in
' between?)
testCheck = "aBBBa" Like "a*a"
' The following statement returns True (does "F" occur in the set of
' characters from "A" through "Z"?)
testCheck = "F" Like "[A-Z]"
' The following statement returns False (does "F" NOT occur in the
' set of characters from "A" through "Z"?)
testCheck = "F" Like "[!A-Z]"
' The following statement returns True (does "a2a" begin and end with
' an "a" and have any single-digit number in between?)
testCheck = "a2a" Like "a#a"
' 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 character set "c" through "e"?)
testCheck = "aM5b" Like "a[L-P]#[!c-e]"
' The following statement returns True (does "BAT123khg" begin with a
' "B", followed by any single character, followed by a "T", and end
' with zero or more characters of any type?)
testCheck = "BAT123khg" Like "B?T*"
' The following statement returns False (does "CAT123khg"?) begin with
' a "B", followed by any single character, followed by a "T", and
' end with zero or more characters of any type?)
testCheck = "CAT123khg" Like "B?T*"
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)
27/09/2021 • 3 minutes to read
Syntax
result = number1 Mod number2
Partes
result
Obrigatórios. Qualquer variável numérica ou propriedade.
number1
Obrigatórios. Qualquer expressão numérica.
number2
Obrigatórios. Qualquer expressão numérica.
Resultado
O resultado é o restante após number1 ser dividido por number2 . Por exemplo, a expressão 14 Mod 4 é
avaliada como 2.
NOTE
Há uma diferença entre o resto e o módulo em matemática, com resultados diferentes para números negativos. O
operador no Visual Basic, o operador .NET Framework e a instrução IL de Mod op_Modulus rem subjacente executam
uma operação de resto.
O resultado de uma Mod operação retém o sinal do dividendo, number1 e, portanto, pode ser positivo ou
negativo. O resultado está sempre no intervalo (- number2 , number2 ), exclusivo. Por exemplo:
Public Module Example
Public Sub Main()
[Link]($" 8 Mod 3 = {8 Mod 3}")
[Link]($"-8 Mod 3 = {-8 Mod 3}")
[Link]($" 8 Mod -3 = {8 Mod -3}")
[Link]($"-8 Mod -3 = {-8 Mod -3}")
End Sub
End Module
' The example displays the following output:
' 8 Mod 3 = 2
' -8 Mod 3 = -2
' 8 Mod -3 = 2
' -8 Mod -3 = -2
Comentários
Se ou number1 for um valor de ponto flutuante, o restante do ponto flutuante da divisão será number2
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 number1 de e number2 .
Se number1 ou for avaliada como number2 Nothing, ela será tratada como zero.
Os operadores relacionados incluem o seguinte:
O operador \ (Visual Basic) retorna o quociente inteiro de uma divisão. Por exemplo, a expressão 14 \ 4
é avaliada como 3.
O operador /(Visual Basic) retorna o quociente completo, incluindo o restante, como um número de
ponto flutuante. Por exemplo, a expressão 14 / 4 é avaliada como 3,5.
Fórmula equivalente
A expressão a Mod b é equivalente a qualquer uma das fórmulas a seguir:
a - (b * (a \ b))
a - (b * Fix(a / b))
Sobrecarga
O Mod operador pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu
comportamento. Se o código se aplica a uma instância de uma classe ou estrutura que inclui essa sobrecarga,
certifique-se de entender Mod o comportamento redefinido. Para obter mais informações, consulte
Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o Mod operador para dividir dois números e retornar apenas o restante. Se qualquer
número for um número de ponto flutuante, o resultado será um número de ponto flutuante que representa o
restante.
[Link](10 Mod 5)
' Output: 0
[Link](10 Mod 3)
' Output: 1
[Link](-10 Mod 3)
' Output: -1
[Link](12 Mod 4.3)
' Output: 3.4
[Link](12.6 Mod 5)
' Output: 2.6
[Link](47.9 Mod 9.35)
' Output: 1.15
Exemplo 2
O exemplo a seguir demonstra a possível imprecisa de operadores de ponto flutuante. Na primeira instrução, os
operadores são e 0,2 é uma fração binária infinitamente repetida com um valor armazenado Double de
0,20000000000000000001. Na segunda instrução, o caractere de tipo literal força os dois D operadores
Decimal a e 0,2 tem uma representação precisa.
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
27/09/2021 • 2 minutes to read
O operador NameOf obtém o nome de uma variável, tipo ou membro como uma cadeia de caracteres constante:
Como mostra o exemplo anterior, no caso de um tipo e um namespace, o nome produzido geralmente não é
totalmente qualificado.
O operador NameOf é avaliado no tempo de compilação e não tem efeitos no tempo de execução.
Você pode usar o operador NameOf para tornar o código de verificação de argumentos mais passível de
manutenção:
Confira também
Visual Basic Referência de linguagem
Operadores (Visual Basic)
Operador New (Visual Basic)
27/09/2021 • 2 minutes to read
Introduz uma cláusula para criar uma nova instância de objeto, especifica uma restrição de construtor em um
parâmetro de tipo ou identifica um procedimento como New Sub um construtor de classe.
Comentários
Em uma declaração ou instrução de atribuição, uma cláusula deve especificar uma classe definida da New 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 uma instrução de atribuição. Quando a
instrução é executado, ela chama o construtor apropriado da classe especificada, passando os argumentos que
você forneceu. O exemplo a seguir demonstra isso criando instâncias de uma classe que tem dois construtores,
um que não aceita parâmetros e outro que aceita um parâmetro de cadeia de Customer caracteres:
' For customer2, call the constructor that takes the name of the
' customer as an argument.
Dim customer2 As New Customer("Blue Yonder Airlines")
' With Option Infer set to On, the following declaration declares
' and instantiates a new instance of Customer.
Dim customer4 = New Customer("Coho Winery")
Como as matrizes são classes, New o pode criar uma nova instância de matriz, conforme mostrado no exemplo
a seguir:
' The following example requires that Option Infer be set to On.
Dim intArray3() = New Integer() {6, 7, 8}
O CLR (Common Language Runtime) gerará um erro OutOfMemoryException se não houver memória
suficiente para criar a nova instância.
NOTE
A palavra-chave também é usada em listas de parâmetros de tipo para especificar que o tipo fornecido deve expor um
construtor sem New parâmetros acessível. Para obter mais informações sobre parâmetros de tipo e restrições, consulte
Lista de tipos.
Para criar um procedimento de construtor para uma classe, de definido o nome de um procedimento como a
Sub New palavra-chave . Para obter mais informações, consulte Tempo de vida do objeto: como os objetos são
criados e destruídos.
A New palavra-chave pode ser usada nesses contextos:
Instrução Dim
De
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)
27/09/2021 • 2 minutes to read
Executa negação lógica em uma expressão Boolean ou negação bit a bit em uma expressão numérica.
Syntax
result = Not expression
Partes
result
Obrigatórios. Qualquer Boolean ou expressão numérica.
expression
Obrigatórios. Qualquer Boolean ou expressão numérica.
Comentários
Para Boolean expressões, a tabela a seguir ilustra como é result determinado.
True False
False True
Para expressões numéricas, o operador inverte os valores de bit de qualquer expressão numérica e define o bit
correspondente em de acordo Not com a tabela a result seguir.
1 0
0 1
NOTE
Como os operadores lógicos e bit a bit têm uma precedência menor do que outros operadores aritméticos e relacionais,
qualquer operação bit a bit deve ser entre parênteses para garantir a execução precisa.
Tipos de dados
Para uma negação booliana, o tipo de dados do resultado é Boolean . Para uma negação bit a bit, o tipo de
dados de resultado é o mesmo que o de expression . No entanto, se expression for Decimal , o resultado será
Long .
Sobrecarga
O Not operador pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu
comportamento quando seu operador tem o tipo dessa classe ou estrutura. Se seu código usar esse operador
em uma classe ou estrutura desse tipo, certifique-se de entender seu comportamento redefinido. Para obter
mais informações, consulte Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o Not operador para executar negação lógica em uma Boolean expressão. O resultado
é Boolean um valor que representa o inverso do valor da expressão.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck As Boolean
firstCheck = Not (a > b)
secondCheck = Not (b > a)
Exemplo 2
O exemplo a seguir usa Not o operador para executar a negação lógica dos 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 do operand,
incluindo o bit de sinal.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (Not a)
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)
27/09/2021 • 3 minutes to read
Executa uma disjunção lógica em duas expressões ou uma disjunção bit a bit Boolean em duas expressões
numéricas.
Syntax
result = expression1 Or expression2
Partes
result
Obrigatórios. Qualquer Boolean ou expressão numérica. Para Boolean comparação, result é a disjunção
lógica inclusiva de dois Boolean valores. Para operações bit a bit, é um valor numérico que representa a
disjunção bit a bit result inclusiva de dois padrões de bits numéricos.
expression1
Obrigatórios. Qualquer Boolean ou expressão numérica.
expression2
Obrigatórios. Qualquer Boolean ou expressão numérica.
Comentários
Para Boolean comparação, result será se e somente se ambos e False expression1 expression2 avaliarem
como False . A tabela a seguir ilustra como result é determinado.
NOTE
Em uma Boolean comparação, o Or operador sempre avalia ambas as expressões, o que pode incluir fazer chamadas
de procedimento. O operador OrElse executa um curto-circuito, o que significa que, se expression1 for , não será
True expression2 avaliado.
Para operações bit a bit, o operador executa uma comparação bit a bit de bits posicionados de forma idêntica
em duas expressões numéricas e define o bit correspondente em de acordo com Or a tabela a result seguir.
SE B IT IN EXPRESSION1 FOR E B IT IN EXPRESSION2 É O B IT EM RESULT É
1 1 1
1 0 1
0 1 1
0 0 0
NOTE
Como os operadores lógicos e bit a bit têm uma precedência menor do que outros operadores aritméticos e relacionais,
qualquer operação bit a bit deve ser entre parênteses para garantir a execução precisa.
Tipos de dados
Se os operadores consistem em uma expressão e uma expressão numérica, Visual Basic converte a expressão
em um valor numérico (–1 para e 0 para ) e executa uma operação Boolean Boolean bit a True False bit.
Para uma Boolean comparação, o tipo de dados do resultado é Boolean . Para uma comparação bit a bit, o tipo
de dados de resultado é um tipo numérico apropriado para os tipos de dados de expression1 e expression2 .
Consulte a tabela "Comparações relacionais e bit a bit" em Tipos de dados de resultados do operador.
Sobrecarga
O Or operador pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu
comportamento quando um operador tem o tipo dessa classe ou estrutura. Se seu código usar esse operador
em uma classe ou estrutura desse tipo, certifique-se de entender seu comportamento redefinido. Para obter
mais informações, consulte Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o Or operador para executar uma disjunção lógica inclusiva em duas expressões. O
resultado é Boolean um valor que representa se uma das duas expressões é True .
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b Or b > c
secondCheck = b > a Or b > c
thirdCheck = b > a Or c > b
Exemplo 2
O exemplo a seguir usa Or o operador para executar a disjunção lógica inclusiva nos bits individuais de duas
expressões numéricas. O bit no padrão de resultado será definido se um dos bits correspondentes nos
operadores estiver definido como 1.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (a Or b)
secondPattern = (a Or c)
thirdPattern = (b Or c)
Confira também
Operadores lógicos/bit a bit (Visual Basic)
Precedência do operador no Visual Basic
Operadores Listados por Funcionalidade
Operador OrElse
Operadores lógicos e bit a bit no Visual Basic
Operador OrElse (Visual Basic)
27/09/2021 • 2 minutes to read
Syntax
result = expression1 OrElse expression2
Partes
result
Obrigatórios. Qualquer expressão de Boolean .
expression1
Obrigatórios. Qualquer expressão de Boolean .
expression2
Obrigatórios. Qualquer expressão de Boolean .
Comentários
Uma operação lógica é chamada de curto-circuito se o código compilado puder ignorar a avaliação de uma
expressão, dependendo 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 pode
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 ou ambas as expressões forem avaliadas como True , result será True . A tabela a seguir ilustra
como o result é determinado.
Tipos de dados
O OrElse operador é definido somente para o tipo de dados booliano. Visual Basic converte cada operando
conforme necessário Boolean antes de avaliar a expressão. se você atribuir o resultado a um tipo numérico,
Visual Basic o converterá de Boolean para esse tipo, isso False se tornará 0 e True se tornará -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 tem o tipo dessa classe ou estrutura. Sobrecarregar
os Or operadores e IsTrue afeta o comportamento do OrElse operador. Se o seu código usa OrElse em
uma classe ou estrutura que sobrecarrega Or e, certifique-se de IsTrue entender seu comportamento
redefinido. Para obter mais informações, consulte procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o OrElse operador para executar a disjunção lógica em duas expressões. O resultado é
um Boolean valor que representa se uma das duas expressões é true. Se a primeira expressão for True , a
segunda não será avaliada.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b OrElse b > c
secondCheck = b > a OrElse b > c
thirdCheck = b > a OrElse c > b
O exemplo anterior produz resultados de True , True e False respectivamente. No cálculo de firstCheck , a
segunda expressão não é avaliada porque a primeira já é True . No entanto, a segunda expressão é avaliada no
cálculo de secondCheck .
Exemplo 2
O exemplo a seguir mostra uma If instrução... Then que contém duas chamadas de procedimento. Se a
primeira chamada retornar True , o segundo procedimento não será chamado. Isso poderá produzir resultados
inesperados se o segundo procedimento executar tarefas importantes que sempre devem ser executadas
quando esta seção do código for executada.
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)
27/09/2021 • 2 minutes to read
Syntax
Sub ( [ parameterlist ] ) statement
- or -
Sub ( [ parameterlist ] )
[ statements ]
End Sub
Partes
T ERM O DEF IN IÇ Ã O
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 Delegate Statement e Relaxed Delegate Conversion.
Confira também
Instrução Sub
Expressões lambda
Operadores e expressões
Instruções
Conversão de delegado reduzida
Operador TryCast (Visual Basic)
27/09/2021 • 2 minutes to read
Introduz uma operação de conversão de tipo que não lança uma exceção.
Comentários
Se uma tentativa de conversão falhar CType e DirectCast ambos lançarem um InvalidCastException erro. Isso
pode afetar negativamente o desempenho do seu aplicativo. TryCast retorna Nothing, de modo que, em vez de
precisar lidar com uma possível exceção, você só precisa testar o resultado retornado em relação a Nothing .
Use a TryCast palavra-chave da mesma maneira que 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. TryCast opera somente em tipos de referência, como classes e interfaces. Ela requer uma
relação de herança ou implementação entre os dois tipos. Isso significa que um tipo deve herdar ou
implementar o outro.
Erros e falhas
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 restringindo, ela poderá falhar em tempo de operaçã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.
FA L H A N O T EM P O DE
PA L AVRA - C H AVE T IP O S DE DA DO S REL A Ç Ã O DE A RGUM EN TO EXEC UTA R
Operador DirectCast Quaisquer tipos de dados Um tipo deve herdar ou Lança InvalidCastException
implementar o outro tipo
TryCast Somente tipos de referência Um tipo deve herdar ou Não retorna nada
implementar o outro tipo
Exemplo
O exemplo a seguir mostra como usar TryCast .
Function PrintTypeCode(ByVal obj As Object) As String
Dim objAsConvertible As IConvertible = TryCast(obj, IConvertible)
If objAsConvertible Is Nothing Then
Return [Link]() & " does not implement IConvertible"
Else
Return "Type code is " & [Link]()
End If
End Function
Confira também
Conversões de Widening e Narrowing
Conversões implícitas e explícitas
Operador TypeOf (Visual Basic)
27/09/2021 • 2 minutes to read
Verifica se o tipo de runtime do resultado de uma expressão é compatível com o tipo especificado.
Syntax
result = TypeOf objectexpression Is typename
Partes
result
Retornado. Um valor Boolean .
objectexpression
Obrigatórios. Qualquer expressão que seja avaliada como um tipo de referência.
typename
Obrigatórios. Qualquer nome de tipo de dados.
Comentários
O operador determina se o tipo de tempo de run TypeOf time de objectexpression é compatível com
typename . A compatibilidade depende da categoria de tipo de typename . A tabela a seguir mostra como a
compatibilidade é determinada.
Se o tipo de tempo de run-time de objectexpression satisfaça o critério de compatibilidade, result será True
. Caso contrário, result é False . Se objectexpression for nulo, TypeOf ... Is False retornará e ... IsNot
retornará True .
TypeOf é sempre usado com a Is palavra-chave para construir uma expressão ... ou com a TypeOf Is IsNot
palavra-chave para construir uma TypeOf expressão ... IsNot .
Exemplo
O exemplo a seguir usa expressões ... para testar a compatibilidade de tipo TypeOf Is de duas variáveis de
referência de objeto com vários tipos de dados.
A refInteger variável tem um tipo de tempo de run-time de Integer . Ele é compatível com Integer , mas
não com Double . A refForm variável tem um tipo de tempo de run-time de Form . Ele é compatível com Form
porque esse é seu tipo, com porque herda de e com porque Control Form Control IComponent Form herda de ,
que implementa Component IComponent . No entanto, refForm não é compatível com Label .
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)
27/09/2021 • 3 minutes to read
Executa uma exclusão lógica em duas Boolean expressões ou uma exclusão bit a bit em duas expressões
numéricas.
Syntax
result = expression1 Xor expression2
Partes
result
Obrigatórios. Qualquer Boolean variável numérica ou . Para comparação booliana, result é a exclusão lógica
(disjunção lógica exclusiva) de dois Boolean valores. Para operações bit a bit, é um valor numérico que
representa a exclusão bit a bit (disjunção bit a bit result exclusiva) de dois padrões de bits numéricos.
expression1
Obrigatórios. Qualquer Boolean ou expressão numérica.
expression2
Obrigatórios. Qualquer Boolean ou expressão numérica.
Comentários
Para comparação booliana, resultserá se e somente se exatamente um de e for avaliada como True
expression1 expression2 True . Ou seja, se e somente se expression1 e expression2 avaliarem como valores
Boolean opostos. A tabela a seguir ilustra como result é determinado.
NOTE
Em uma comparação booliana, o Xor operador sempre avalia ambas as expressões, o que pode incluir a tomada de
chamadas de procedimento. Não há nenhum equivalente de curto-circuito para Xor , porque o resultado sempre
depende de ambos os operadores. Para operadores lógicos de curto-circuito, consulte Operador AndAlso e Operador
OrElse.
Para operações bit a bit, o operador executa uma comparação bit a bit de bits posicionados de forma idêntica
em duas expressões numéricas e define o bit correspondente em de acordo com Xor a tabela a result seguir.
1 1 0
1 0 1
0 1 1
0 0 0
NOTE
Como os operadores lógicos e bit a bit têm uma precedência menor do que outros operadores aritméticos e relacionais,
qualquer operação bit a bit deve ser entre parênteses para garantir a execução precisa.
Por exemplo, 5 Xor 3 é 6. Para ver por que isso é assim, converta 5 e 3 em suas 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 operadores consistem em uma expressão e uma expressão numérica, Visual Basic converte a expressão
em um valor numérico (–1 para e 0 para ) e executa uma operação Boolean Boolean bit a True False bit.
Para uma Boolean comparação, o tipo de dados do resultado é Boolean . Para uma comparação bit a bit, o tipo
de dados de resultado é um tipo numérico apropriado para os tipos de dados de expression1 e expression2 .
Consulte a tabela "Comparações relacionais e bit a bit" em Tipos de dados de resultados do operador.
Sobrecarga
O Xor operador pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu
comportamento quando um operador tem o tipo dessa classe ou estrutura. Se seu código usar esse operador
em uma classe ou estrutura desse tipo, certifique-se de entender seu comportamento redefinido. Para obter
mais informações, consulte Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o Xor operador para executar a exclusão lógica (disjunção lógica exclusiva) em duas
expressões. O resultado é um Boolean valor que representa se exatamente uma das expressões é True .
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b Xor b > c
secondCheck = b > a Xor b > c
thirdCheck = b > a Xor c > b
Exemplo 2
O exemplo a seguir usa o operador para executar a exclusão Xor lógica (disjunção lógica exclusiva) nos bits
individuais de duas expressões numéricas. O bit no padrão de resultado será definido se exatamente um dos
bits correspondentes nos operadores estiver definido como 1.
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)
27/09/2021 • 2 minutes to read
esta página lista as propriedades que são membros de Visual Basic módulos. outras propriedades que são
membros de objetos Visual Basic específicos são listadas em objetos.
Confira também
Referência da linguagem Visual Basic
Consultas (Visual Basic)
28/09/2021 • 2 minutes to read
Visual Basic permite que você crie Language-Integrated linq (consulta) em seu código.
Nesta seção
Cláusula Aggregate
Descreve a cláusula , que aplica uma ou mais funções Aggregate de agregação a uma coleção.
Cláusula Distinct
Descreve a cláusula , que restringe os valores da variável de intervalo atual para eliminar valores Distinct
duplicados nos resultados da consulta.
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 , que agrupa os elementos de um resultado de consulta e pode ser usada para aplicar
funções Group By de agregação a cada grupo.
Cláusula Group Join
Descreve a cláusula Group Join , que combina duas coleções em uma única coleção hierárquica.
Cláusula Join
Descreve a Join cláusula , que combina duas coleções em uma única coleção.
Cláusula Let
Descreve a cláusula , que calcula um valor e o atribui Let a uma nova variável na consulta.
Cláusula Order By
Descreve a Order By cláusula , que especifica a ordem de classificação para colunas em uma consulta.
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 , que ignora um número especificado de elementos em Skip uma coleção e retorna os
elementos restantes.
Cláusula Skip While
Descreve a cláusula , que ignora elementos em uma coleção, desde que uma condição especificada seja e, em
Skip While true seguida, retorna os elementos restantes.
Cláusula Take
Descreve a Take cláusula , que retorna um número especificado de elementos contíguos do início de uma
coleção.
Cláusula Take While
Descreve a cláusula , que inclui elementos em uma coleção, desde que uma condição especificada seja e
Take While true ignore os elementos restantes.
Cláusula Where
Descreve a Where cláusula , 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)
27/09/2021 • 7 minutes to read
Syntax
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Partes
T ERM O DEF IN IÇ Ã O
Comentários
A Aggregate cláusula pode ser usada para incluir funções de agregação em suas consultas. As funções de
agregação executam verificações e computações em um conjunto de valores e retornam um único valor. Você
pode acessar o valor computado usando um membro do tipo de resultado da consulta. As funções de
agregação padrão que você pode usar são as All funções,,,,,, Any Average Count LongCount Max Min e
Sum . Essas funções são familiares aos desenvolvedores que estão familiarizados com agregações no SQL. Eles
são descritos na seção a seguir deste tópico.
O resultado de uma função de agregação é incluído no resultado da consulta como um campo do tipo de
resultado da consulta. Você pode fornecer um alias para o resultado da função de agregação para especificar o
nome do membro do tipo de resultado da consulta que conterá o valor de agregação. Se nenhum alias for
fornecido, o nome da função de agregação será usado.
A Aggregate cláusula pode iniciar uma consulta ou pode ser incluída como uma cláusula adicional em uma
consulta. Se a Aggregate cláusula iniciar uma consulta, o resultado será um valor único que é o resultado da
função de agregação especificada na Into cláusula. Se mais de uma função de agregação for especificada na
Into cláusula, a consulta retornará um único tipo com uma propriedade separada para referenciar o resultado
de cada função de agregação na Into cláusula. Se a Aggregate cláusula for incluída como uma cláusula
adicional em uma consulta, o tipo retornado na coleção de consulta terá uma propriedade separada para
referenciar o resultado de cada função de agregação na Into cláusula.
Funções de Agregação
A seguir estão as funções de agregação padrão que podem ser usadas com a Aggregate cláusula.
Tudo
Retorna true se todos os elementos na coleção atendem a uma condição especificada; caso contrário, retorna
false . A seguir, é mostrado um exemplo:
Qualquer
Retorna true se qualquer elemento na coleção satisfizer uma condição especificada; caso contrário, retornará
false . A seguir, é mostrado um exemplo:
Média
Calcula a média de todos os elementos na coleção ou computa uma expressão fornecida para todos os
elementos na coleção. A seguir, é mostrado um exemplo:
Contagem
Conta o número de elementos na coleção. Você pode fornecer uma Boolean expressão opcional para contar
apenas o número de elementos na coleção que atendem a uma condição. A seguir, é mostrado um exemplo:
Grupo
Refere-se aos resultados da consulta que são agrupados como resultado de uma Group By Group Join cláusula
or. A Group função é válida somente na Into cláusula de uma Group By cláusula or Group Join . Para obter
mais informações e exemplos, consulte cláusula Group by e Group Join.
LongCount
Conta o número de elementos na coleção. Você pode fornecer uma Boolean expressão opcional para contar
apenas o número de elementos na coleção que atendem a uma condição. Retorna o resultado como um Long .
Para obter um exemplo, consulte a Count função de agregação.
Max
Computa o valor máximo da coleção ou computa uma expressão fornecida para todos os elementos na coleção.
A seguir, é mostrado um exemplo:
Min
Computa o valor mínimo da coleção ou computa uma expressão fornecida para todos os elementos na coleção.
A seguir, é mostrado um exemplo:
Somar
Computa a soma de todos os elementos na coleção ou computa uma expressão fornecida para todos os
elementos na coleção. A seguir, é mostrado um exemplo:
Exemplo
O exemplo a seguir mostra como usar a Aggregate cláusula para aplicar funções de agregação a um resultado
de consulta.
Dim customerOrderTotal =
From cust In customers
Aggregate order In [Link]
Into Sum([Link]), MaxOrder = Max([Link]),
MinOrder = Min([Link]), Avg = Average([Link])
Imports [Link]
Module UserDefinedAggregates
Return medianValue
End Function
' "Cast" the collection of generic items as type Double and call the
' Median() method to calculate the median value.
<Extension()>
Function Median(Of T)(ByVal values As IEnumerable(Of T),
ByVal selector As Func(Of T, Double)) As Double
Return (From element In values Select selector(element)).Median()
End Function
End Module
O exemplo a seguir mostra as consultas de exemplo que chamam a Median função de agregação em uma
coleção do tipo Integer e uma coleção do tipo Double . A consulta que chama a Median função de agregação
na coleção de tipo Double chama a sobrecarga do Median método que aceita, como entrada, uma coleção do
tipo Double . A consulta que chama a Median função de agregação na coleção de tipo Integer chama a
sobrecarga genérica do Median método.
Module Module1
Sub Main()
Dim numbers1 = {1, 2, 3, 4, 5}
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)
27/09/2021 • 2 minutes to read
Restringe os valores da variável de intervalo atual para eliminar valores duplicados em cláusulas de consulta
subsequentes.
Sintaxe
Distinct
Comentários
Você pode usar a Distinct cláusula para retornar uma lista de itens exclusivos. A Distinct cláusula faz com
que a consulta ignore os resultados da consulta duplicada. A Distinct cláusula aplica-se a valores duplicados
para todos os campos de retorno especificados pela Select cláusula . Se nenhuma cláusula for especificada, a
cláusula será aplicada à variável de intervalo para Select a consulta identificada na cláusula Distinct From .
Se a variável de intervalo não for um tipo imutável, a consulta ignorará apenas um resultado da consulta se
todos os membros do tipo corresponderem a um resultado de consulta existente.
Exemplo
A expressão de consulta a seguir une uma lista de clientes e uma lista de pedidos de clientes. A Distinct
cláusula é incluída para retornar uma lista de nomes de clientes exclusivos e datas de pedido.
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)
27/09/2021 • 2 minutes to read
Comentários
A Equals palavra-chave é usada nos seguintes contextos:
Cláusula Group Join
Cláusula Join
Confira também
Palavras-chave
Cláusula From (Visual Basic)
27/09/2021 • 3 minutes to read
Syntax
From element [ As type ] In collection [ _ ]
[, element2 [ As type2 ] In collection2 [, ... ] ]
Partes
T ERM O DEF IN IÇ Ã O
Comentários
A cláusula é usada para identificar os dados de origem de uma consulta e as variáveis usadas para se referir a
um From elemento da coleção de origem. Essas variáveis são chamadas de variáveis de intervalo. A cláusula é
necessária para uma consulta, exceto quando a cláusula é usada para identificar uma consulta que From retorna
apenas os resultados Aggregate agregados. Para obter mais informações, consulte Cláusula de agregação.
Você pode especificar várias From cláusulas em uma consulta para identificar várias coleções a serem unidas.
Quando várias coleções são especificadas, elas são iteradas de forma independente ou você pode uni-las se elas
estão relacionadas. Você pode unir coleções implicitamente usando a Select cláusula ou explicitamente usando
as Join Group Join cláusulas ou . Como alternativa, você pode especificar várias variáveis de intervalo e
coleções em uma única cláusula, com cada variável de intervalo relacionada e coleção separada das outras
From por uma vírgula. O exemplo de código a seguir mostra as duas opções de sintaxe para a From cláusula .
A From cláusula define o escopo de uma consulta, que é semelhante ao escopo de um For loop. Portanto, cada
element variável de intervalo no escopo de uma consulta deve ter um nome exclusivo. Como você pode
especificar várias cláusulas para uma consulta, as cláusulas subsequentes podem se referir a variáveis de
intervalo na cláusula ou podem se referir a variáveis de intervalo em From From uma cláusula From From
anterior. Por exemplo, o exemplo a seguir mostra uma cláusula aninhada em que a coleção na segunda cláusula
é baseada em uma propriedade da variável de intervalo From na primeira cláusula.
Cada From cláusula pode ser seguida por qualquer combinação de cláusulas de consulta adicionais para refinar
a consulta. Você pode refinar a consulta das seguintes maneiras:
Combine várias coleções implicitamente usando as From Select cláusulas e ou explicitamente usando
as Join Group Join cláusulas ou .
Use a Where cláusula para filtrar o resultado da consulta.
Classificar o resultado usando a Order By cláusula .
Agrupar resultados semelhantes usando a Group By cláusula .
Use a Aggregate cláusula para identificar funções de agregação a avaliar para todo o resultado da
consulta.
Use a Let cláusula para introduzir uma variável de iteração cujo valor é determinado por uma expressão
em vez de uma coleção.
Use a Distinct cláusula para ignorar resultados de consulta duplicados.
Identifique partes do resultado a ser retornada usando as Skip Take Skip While cláusulas , ,
Take While e .
Exemplo
A expressão de consulta a seguir usa uma From cláusula para declarar uma variável de intervalo para cada
objeto na cust Customer customers coleção. A Where cláusula usa a variável de intervalo para restringir a
saída aos clientes da região especificada. O For Each loop exibe o nome da empresa para cada cliente no
resultado da consulta.
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)
27/09/2021 • 2 minutes to read
Agrupa os elementos de um resultado de consulta. Também pode ser usado para aplicar funções de agregação a
cada grupo. A operação de agrupamento é baseada em uma ou mais chaves.
Syntax
Group [ listField1 [, listField2 [...] ] By keyExp1 [, keyExp2 [...] ]
Into aggregateList
Partes
listField1 , listField2
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 o para criar uma chave
composta.
aggregateList
Obrigatórios. Uma ou mais expressões que identificam como os grupos são agregados. Para identificar
um nome de membro para os resultados agrupados, use a Group palavra-chave, que pode estar em
qualquer uma das seguintes formas:
Into Group
-ou-
Comentários
Você pode usar a Group By cláusula para dividir os resultados de uma consulta em grupos. O agrupamento é
baseado em uma chave ou em uma chave composta que consiste em várias chaves. Os elementos associados
aos valores de chave correspondentes são incluídos no mesmo grupo.
Use o aggregateList parâmetro da Into cláusula e a Group palavra-chave para identificar o nome do membro
que é usado para fazer referência ao grupo. Você também pode incluir funções de agregação na Into cláusula
para computar valores para os elementos agrupados. Para obter uma lista de funções de agregação padrão,
consulte cláusula Aggregate.
Exemplo
O exemplo de código a seguir agrupa uma lista de clientes com base em seu local (país/região) e fornece uma
contagem dos clientes em cada grupo. Os resultados são ordenados por nome de país/região. Os resultados
agrupados são ordenados por nome de cidade.
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)
27/09/2021 • 3 minutes to read
Combina duas coleções em uma única coleção hierárquica. A operação de junção é baseada em chaves
correspondentes.
Syntax
Group Join element [As type] In collection _
On key1 Equals key2 [ And key3 Equals key4 [... ] ] _
Into expressionList
Partes
T ERM O DEF IN IÇ Ã O
key1 Equals key2 Obrigatórios. Identifica as chaves para as coleções que estão
sendo Unidas. Você deve usar o Equals operador para
comparar as chaves das coleções que estão sendo Unidas.
Você pode combinar condições de junção usando o And
operador para identificar várias chaves. O key1 parâmetro
deve ser da coleção no lado esquerdo do Join operador. O
key2 parâmetro deve ser da coleção no lado direito do
Join operador.
Comentários
A Group Join cláusula combina duas coleções com base em valores de chave correspondentes das coleções
que estão sendo Unidas. A coleção resultante pode conter um membro que faz referência a uma coleção de
elementos da segunda coleção que corresponde ao valor de chave da primeira coleção. Você também pode
especificar funções de agregação para aplicar aos elementos agrupados da segunda coleção. Para obter
informações sobre funções de agregação, consulte cláusula Aggregate.
Considere, por exemplo, uma coleção de gerentes e uma coleção de funcionários. Os elementos de ambas as
coleções têm uma propriedade ManagerID que identifica os funcionários que se reportam a um gerente
específico. Os resultados de uma operação de junção contêm um resultado para cada gerente e funcionário com
um valor de ManagerID correspondente. Os resultados de uma Group Join operação contêm a lista completa
de gerentes. Cada resultado do gerente teria um membro que referenciou a lista de funcionários que eram uma
correspondência para o gerente específico.
A coleção resultante de uma Group Join operação pode conter qualquer combinação de valores da coleção
identificada na From cláusula e as expressões identificadas na Into cláusula da Group Join cláusula. Para
obter mais informações sobre expressões válidas para a Into cláusula, consulte cláusula Aggregate.
Uma Group Join operação retornará todos os resultados da coleção identificada no lado esquerdo do
Group Join operador. Isso é verdadeiro mesmo se não houver nenhuma correspondência na coleção que está
sendo unida. Isso é como um LEFT OUTER JOIN no SQL.
Você pode usar a Join cláusula para combinar coleções em uma única coleção. Isso é equivalente a um
INNER JOIN em SQL.
Exemplo
O exemplo de código a seguir une duas coleções usando a Group Join cláusula.
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)
27/09/2021 • 3 minutes to read
Combina duas coleções em uma única coleção. A operação de junção é baseada em chaves correspondentes e
usa o Equals operador .
Syntax
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
Partes
element Necessário. A variável de controle para a coleção que está sendo unidas.
collection
Obrigatórios. A coleção a ser combinada com a coleção identificada no lado esquerdo do Join operador. Uma
Join cláusula pode ser aninhada em outra cláusula ou em uma cláusula Join Group Join .
joinClause
Opcional. Uma ou mais Join cláusulas adicionais para refinar ainda mais a consulta.
groupJoinClause
Opcional. Uma ou mais Group Join cláusulas adicionais para refinar ainda mais a consulta.
key1 Equals key2
Obrigatórios. Identifica as chaves para as coleções que estão sendo unidas. Você deve usar o Equals operador
para comparar as chaves das coleções que estão sendo unidas. Você pode combinar condições de junção
usando o And operador para identificar várias chaves. key1 deve ser da coleção no lado esquerdo do Join
operador . key2 deve ser da coleção no lado direito do Join operador.
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 Join cláusula combina duas coleções com base nos valores de chave correspondentes das coleções que
estão sendo unidas. A coleção resultante pode conter qualquer combinação de valores da coleção identificada
no lado esquerdo do operador e da Join coleção identificada na cláusula Join . A consulta retornará apenas
os resultados para os quais a condição especificada pelo Equals operador é atendida. Isso é equivalente a um
INNER JOIN em SQL.
Você pode usar várias Join cláusulas em uma consulta para unir duas ou mais coleções em uma única coleção.
Você pode executar uma junção implícita para combinar coleções sem a Join cláusula . Para fazer isso, inclua
várias cláusulas em sua cláusula e especifique uma cláusula que identifique as chaves que In você deseja usar
para a From Where junção.
Você pode usar a Group Join cláusula para combinar coleções em uma única coleção hierárquica. Isso é como
um LEFT OUTER JOIN em 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.
Exemplo 2
O exemplo de código a seguir une duas coleções usando a Join cláusula .
Imports [Link]
Imports [Link]
<SecurityPermission([Link])>
Public Sub ListProcesses()
Dim processDescriptions As New List(Of ProcessDescription)
[Link](New ProcessDescription With {
.ProcessName = "explorer",
.Description = "Windows Explorer"})
[Link](New ProcessDescription With {
.ProcessName = "winlogon",
.Description = "Windows Logon"})
[Link](New ProcessDescription With {
.ProcessName = "cmd",
.Description = "Command Window"})
[Link](New ProcessDescription With {
.ProcessName = "iexplore",
.Description = "Internet Explorer"})
End Class
Exemplo 3
O exemplo de código a seguir une duas coleções usando a Join cláusula com duas colunas de chave.
Imports [Link]
Imports [Link]
<SecurityPermission([Link])>
Public Sub ListProcesses()
Dim processDescriptions As New List(Of ProcessDescription2)
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)
27/09/2021 • 2 minutes to read
Syntax
Let variable = expression [, ...]
Partes
T ERM O DEF IN IÇ Ã O
Comentários
A cláusula permite computar valores para cada resultado de consulta e fazer referência a eles Let usando um
alias. O alias pode ser usado em outras cláusulas, como a Where cláusula . A cláusula permite que você crie 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 expression for Let usada.
Você pode incluir qualquer número de variable expression atribuições e na Let cláusula . Separe cada
atribuição com uma vírgula (,).
Exemplo
O exemplo de código a seguir usa Let a cláusula para calcular um desconto de 10% em produtos.
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)
27/09/2021 • 2 minutes to read
Syntax
Order By orderExp1 [ Ascending | Descending ] [, orderExp2 [...] ]
Partes
orderExp1 Necessário. Um ou mais campos do resultado da consulta atual que identificam como ordenar os
valores retornados. Os nomes de campo devem ser separados por vírgulas (,). Você pode identificar cada campo
como classificado em ordem crescente ou decrescente usando as Ascending Descending palavras-chave ou. Se
nenhuma Ascending Descending palavra-chave ou for especificada, a ordem de classificação padrão será
crescente. Os campos de ordem de classificação recebem precedência da esquerda para a direita.
Comentários
Você pode usar a Order By cláusula para classificar os resultados de uma consulta. A Order By cláusula só
pode classificar um resultado com base na variável de intervalo para o escopo atual. Por exemplo, a Select
cláusula apresenta um novo escopo em uma expressão de consulta com novas variáveis de iteração para esse
escopo. Variáveis de intervalo definidas antes de uma Select cláusula em uma consulta não estão disponíveis
após a Select cláusula. Portanto, se você quiser ordenar os resultados por um campo que não está disponível
na Select cláusula, deverá colocar a Order By cláusula antes da Select cláusula. Um exemplo de quando
você precisa fazer isso é quando deseja classificar sua consulta por campos que não são retornados como parte
do resultado.
Ordem crescente e decrescente para um campo é determinada pela implementação da IComparable interface
para o tipo de dados do campo. Se o tipo de dados não implementar a IComparable interface, a ordem de
classificação será ignorada.
Exemplo 1
A expressão de consulta a seguir usa uma From cláusula para declarar uma variável book de intervalo para a
books coleção. A Order By cláusula classifica o resultado da consulta por preço em ordem crescente (o
padrão). Os livros com o mesmo preço são classificados por título em ordem crescente. A Select cláusula
seleciona as Title Price Propriedades e como os valores retornados pela consulta.
Exemplo 2
A expressão de consulta a seguir usa a Order By cláusula para classificar o resultado da consulta por preço em
ordem decrescente. Os livros com o mesmo preço são classificados por título em ordem crescente.
Dim titlesDescendingPrice = From book In books
Order By [Link] Descending, [Link]
Select [Link], [Link]
Exemplo 3
A expressão de consulta a seguir usa uma Select cláusula para selecionar o título do livro, o preço, a data de
publicação e o autor. Em seguida, ele preenche Title os Price campos,, PublishDate e Author da variável de
intervalo para o novo escopo. A Order By cláusula ordena a nova variável de intervalo por nome do autor, título
do livro e, em seguida, Price. Cada coluna é classificada na ordem padrão (em ordem crescente).
Dim bookOrders =
From book In books
Select [Link], [Link], [Link], [Link]
Order By Author, Title, Price
Confira também
Introdução a LINQ no Visual Basic
Consultas
Cláusula SELECT
Cláusula from
Cláusula Select (Visual Basic)
27/09/2021 • 3 minutes to read
Syntax
Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]
Partes
var1
Opcional. Um alias que pode ser usado para referenciar os resultados da expressão de coluna.
fieldName1
Obrigatórios. O nome do campo a ser retornada no resultado da consulta.
Comentários
Você pode usar a Select cláusula para definir os resultados a retornar 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
retornado por uma consulta. A Select cláusula não é necessária para uma consulta. Se nenhuma cláusula for
especificada, a consulta retornará um tipo com base em todos os membros das variáveis de intervalo Select
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 é o tipo T criado.
A Select cláusula pode referenciar todas as variáveis no escopo atual. Isso inclui variáveis de intervalo
identificadas From na cláusula From (ou cláusulas). Ele também inclui quaisquer novas variáveis criadas com
um alias pelas cláusulas , , ou ou variáveis de uma cláusula anterior na Aggregate Let expressão de Group By
Group Join Select consulta. A Select cláusula 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 define o resultado da consulta como
um novo tipo anônimo com Select quatro membros: ProductName , , Price e Discount DiscountedPrice . Os
ProductName valores de membro e são Price retirados da variável de intervalo de produtos definida na From
cláusula . O DiscountedPrice valor do membro é calculado na cláusula Let . O Discount membro é um valor
estático.
A cláusula introduz um novo conjunto de variáveis de intervalo para cláusulas de consulta subsequentes e as
variáveis de intervalo anteriores Select não estão mais no escopo. A última Select cláusula em uma
expressão de consulta determina o valor de retorno da consulta. Por exemplo, a consulta a seguir retorna o
nome da empresa e a ID do pedido para cada pedido de cliente para o qual o total excede 500. A primeira
Select cláusula identifica as variáveis de intervalo para a Where cláusula e a segunda Select cláusula. A
segunda Select cláusula identifica os valores retornados pela consulta como um novo tipo anônimo.
Se a cláusula identificar um único item a ser retornada, a expressão de consulta retornará uma coleção Select
do tipo desse único item. Se a cláusula identificar vários itens a retornar, a expressão de consulta retornará uma
coleção de um novo tipo Select anônimo, com base nos itens selecionados. Por exemplo, as duas consultas a
seguir retornam coleções de dois tipos diferentes com base na Select cláusula . A primeira consulta retorna
uma coleção de nomes de empresa como cadeias de caracteres. A segunda consulta retorna uma coleção de
objetos Customer populados com os nomes da empresa e as informações de endereço.
Exemplo
A expressão de consulta a seguir usa uma From cláusula para declarar uma variável de intervalo para a cust
customers coleção. A Select cláusula seleciona o nome do cliente e o valor da ID e preenche as CompanyName
CustomerID colunas e da nova variável de intervalo. A For Each instrução loops sobre cada objeto retornado e
exibe as CompanyName CustomerID colunas e para cada registro.
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)
27/09/2021 • 2 minutes to read
Syntax
Skip count
Partes
count
Obrigatórios. Um valor ou uma expressão que é avaliada para o número de elementos da sequência a ignorar.
Comentários
A cláusula faz com que uma consulta ignore elementos no início de uma lista de resultados Skip e retorne os
elementos restantes. O número de elementos a ignorar é identificado pelo count parâmetro .
Você pode usar a Skip cláusula com a cláusula para retornar um intervalo de dados de qualquer segmento de
uma Take consulta. Para fazer isso, passe o índice do primeiro elemento do intervalo para a cláusula e o
tamanho do Skip intervalo para a cláusula Take .
Ao usar a cláusula em uma consulta, talvez você também precise garantir que os resultados sejam retornados
em uma ordem que permitirá que a cláusula ignore os Skip Skip resultados pretendido. Para obter mais
informações sobre como ordenar resultados da consulta, consulte Cláusula Order By.
Você pode usar a cláusula para especificar que apenas determinados elementos são SkipWhile ignorados,
dependendo de uma condição fornecida.
Exemplo
O exemplo de código a seguir usa a cláusula junto com a cláusula para Skip retornar dados de uma consulta
em Take páginas. A função usa a cláusula para ignorar os clientes na lista até o valor de índice inicial fornecido
e usa a cláusula para retornar uma página de clientes começando com esse valor GetCustomers Skip de Take
índice.
Public Sub PagingSample()
Dim pageNumber As Integer = 0
Dim pageSize As Integer = 10
[Link](vbCrLf)
pageNumber += 1
customersPage = GetCustomers(pageNumber * pageSize, pageSize)
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)
27/09/2021 • 2 minutes to read
Ignora elementos em uma coleção desde que uma condição especificada seja e, em true seguida, retorna os
elementos restantes.
Syntax
Skip While expression
Partes
T ERM O DEF IN IÇ Ã O
Comentários
A Skip While cláusula ignora elementos do início de um resultado de consulta até que o fornecido retorne
expression false. Depois expression de retornar , a consulta retorna todos os elementos false restantes. O
expression é ignorado para os resultados restantes.
A cláusula difere da cláusula em que a cláusula pode ser usada para excluir todos os elementos de uma consulta
que não atendem Skip While Where a uma condição Where específica. A Skip While cláusula exclui elementos
somente até a primeira vez em que a condição não é atendida. A Skip While cláusula é mais útil quando você
está trabalhando com um resultado de consulta ordenado.
Você pode ignorar um número específico de resultados do início de um resultado de consulta usando a Skip
cláusula .
Exemplo
O exemplo de código a seguir usa a cláusula para ignorar os resultados até que o primeiro cliente do
Skip While Estados Unidos seja encontrado.
Public Sub SkipWhileSample()
Dim customers = GetCustomerList()
' Return customers starting from the first U.S. customer encountered.
Dim customerList = From cust In customers
Order By [Link]
Skip While IsInternationalCustomer(cust)
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)
27/09/2021 • 2 minutes to read
Syntax
Take count
Partes
count
Obrigatórios. Um valor ou uma expressão que é avaliada como o número de elementos da sequência a ser
retornado.
Comentários
A Take cláusula 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 count
parâmetro.
Você pode usar a Take cláusula com a Skip cláusula 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 Skip
cláusula e o tamanho do intervalo para a Take cláusula. Nesse caso, a Take cláusula deve ser especificada
após a Skip cláusula.
Quando você usa a Take cláusula em uma consulta, também pode ser necessário garantir que os resultados
sejam retornados em uma ordem que permitirá que a Take cláusula inclua os resultados pretendidos. Para
obter mais informações sobre como ordenar os resultados da consulta, consulte cláusula order by.
Você pode usar a TakeWhile cláusula para especificar que apenas determinados elementos sejam retornados,
dependendo de uma condição fornecida.
Exemplo
O exemplo de código a seguir usa a Take cláusula junto com a Skip cláusula para retornar dados de uma
consulta em páginas. A função GetCustomers usa a Skip cláusula para ignorar os clientes na lista até o valor de
índice inicial fornecido e usa a Take cláusula para retornar uma página de clientes que inicia com esse valor de
índice.
Public Sub PagingSample()
Dim pageNumber As Integer = 0
Dim pageSize As Integer = 10
[Link](vbCrLf)
pageNumber += 1
customersPage = GetCustomers(pageNumber * pageSize, pageSize)
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)
27/09/2021 • 2 minutes to read
Inclui elementos em uma coleção, desde que uma condição especificada true seja e ignore os elementos
restantes.
Syntax
Take While expression
Partes
T ERM O DEF IN IÇ Ã O
Comentários
A Take Whilecláusula inclui elementos do início de um resultado de consulta até que o fornecido retorne
expression . Depois que expression o retornar , a consulta false ignorará todos os elementos
false
restantes. O expression é ignorado para os resultados restantes.
A cláusula difere da cláusula em que a cláusula pode ser usada para incluir todos os elementos de uma consulta
que atendem Take While Where a uma condição Where específica. A Take While cláusula inclui elementos
somente até a primeira vez em que a condição não é atendida. A Take While cláusula é mais útil quando você
está trabalhando com um resultado de consulta ordenado.
Exemplo
O exemplo de código a seguir usa a Take While cláusula para recuperar resultados até que o primeiro cliente
sem nenhum pedido seja encontrado.
Public Sub TakeWhileSample()
Dim customers = GetCustomerList()
' Return customers until the first customer with no orders is found.
Dim customersWithOrders = From cust In customers
Order By [Link] Descending
Take While HasOrders(cust)
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)
27/09/2021 • 3 minutes to read
Syntax
Where condition
Partes
condition
Obrigatórios. Uma expressão que determina se os valores do item atual na coleção são incluídos na coleção de
saída. A expressão deve ser avaliada como Boolean um valor ou o equivalente de um Boolean valor. Se a
condição for avaliada como , o elemento será incluído no resultado da consulta; caso contrário, o elemento será
excluído True do resultado da consulta.
Comentários
A Where cláusula permite filtrar dados de consulta selecionando apenas elementos que atendem a
determinados critérios. Elementos cujos valores fazem com Where que a cláusula seja avaliada como são True
incluídos no resultado da consulta; outros elementos são excluídos. A expressão usada em uma cláusula deve
ser avaliada como um ou o equivalente de um , como um Inteiro que é avaliada como quando Where Boolean
seu valor é Boolean False zero. Você pode combinar várias expressões em uma cláusula usando operadores
lógicos como Where , , , , , e And Or AndAlso OrElse Is IsNot .
Por padrão, as expressões de consulta não são avaliadas até que sejam acessadas, por exemplo, quando são
vinculadas a dados ou iteradas em um For loop. Como resultado, a Where cláusula não é avaliada até que a
consulta seja acessada. Se você tiver valores externos à consulta que são usados na cláusula , verifique se o
valor apropriado é usado na cláusula no momento em que Where Where a consulta é executada. Para obter
mais informações sobre a execução da consulta, consulte Escrevendo sua primeira consulta LINQ.
Você pode chamar funções dentro de uma cláusula para executar um cálculo ou operação em um valor do
Where elemento atual na coleção. Chamar uma função em uma cláusula pode fazer com que a consulta seja
executada imediatamente quando ela é definida em vez Where de quando é acessada. Para obter mais
informações sobre a execução da consulta, consulte Escrevendo sua primeira consulta LINQ.
Exemplo 1
A expressão de consulta a seguir usa uma From cláusula para declarar uma variável de intervalo para cada
objeto na cust Customer customers coleção. A Where cláusula usa a variável de intervalo para restringir a
saída aos clientes da região especificada. O For Each loop exibe o nome da empresa para cada cliente no
resultado da consulta.
Sub DisplayCustomersForRegion(ByVal customers As List(Of Customer),
ByVal region As String)
Exemplo 2
O exemplo a seguir usa And Or operadores lógicos e na Where cláusula .
' Get a list of elements that have an atomic number from 12 to 14,
' or that have a name that ends in "r".
Dim subset = From theElement In elements
Where ([Link] >= 12 And [Link] < 15) _
Or [Link]("r")
Order By [Link]
' Output:
' Aluminum 13
' Magnesium 12
' Silicon 14
' Sulfur 16
End Sub
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)
28/09/2021 • 2 minutes to read
Os tópicos nesta seção contêm tabelas da declaração do Visual Basic e instruções executáveis e de listas
importantes que se aplicam a muitas instruções.
Nesta seção
Instruções A-E
Instruções F-P
Instruções Q-Z
Cláusulas
Contextos de Declaração e Níveis de Acesso Padrão
Lista de Atributos
Lista de parâmetros
Lista de Tipos
Seções relacionadas
Referência da linguagem Visual Basic
Instruções A-E
27/09/2021 • 2 minutes to read
Confira também
Instruções F-P
Instruções Q-Z
Referência da linguagem Visual Basic
Instrução AddHandler
27/09/2021 • 2 minutes to read
Syntax
AddHandler event, AddressOf eventhandler
Partes
PA RT E DESC RIÇ Ã O
Comentários
As AddHandler instruções RemoveHandler e permitem que você inicie e pare a manipulação de eventos a
qualquer momento durante a execução do programa.
A assinatura do eventhandler procedimento deve corresponder à assinatura do evento event .
A Handles palavra-chave e AddHandler a instrução permitem que você especifique que procedimentos
específicos lidam com eventos específicos, mas há diferenças. A AddHandler instrução conecta procedimentos a
eventos em tempo de operação. Use a Handles palavra-chave ao definir um procedimento para especificar que
ele trata um evento específico. Para obter mais informações, consulte Handles.
NOTE
Para eventos AddHandler personalizados, a instrução invoca o acessador AddHandler do evento. Para obter mais
informações sobre eventos personalizados, consulte instrução event.
Exemplo
Sub TestEvents()
Dim Obj As New Class1
' Associate an event handler with an event.
AddHandler Obj.Ev_Event, AddressOf EventHandler
' Call the method to raise the event.
[Link]()
' Stop handling events.
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
' This event will not be handled.
[Link]()
End Sub
Sub EventHandler()
' Handle the event.
MsgBox("EventHandler caught event.")
End Sub
Confira também
Instrução RemoveHandler
Alças
Instrução Event
Eventos
Instrução Call (Visual Basic)
27/09/2021 • 2 minutes to read
Transfere o controle para Function um procedimento , ou Sub DLL (biblioteca de vínculo dinâmico).
Syntax
[ Call ] procedureName [ (argumentList) ]
Partes
PA RT E DESC RIÇ Ã O
Comentários
Você pode usar a Call palavra-chave ao chamar um procedimento. Para a maioria das chamadas de
procedimento, você não precisa usar essa palavra-chave.
Normalmente, você usa a Call palavra-chave quando a expressão chamada não começa com um identificador.
O uso da Call palavra-chave para outros usos não é recomendado.
Se o procedimento retornar um valor, a Call instrução o descartará.
Exemplo
O código a seguir mostra dois exemplos em que a Call palavra-chave é necessária para chamar um
procedimento. Em ambos os exemplos, a expressão chamada não começa com um identificador.
Sub TestCall()
Call (Sub() [Link]("Hello"))()
Class TheClass
Public Sub ShowText()
[Link](" 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)
27/09/2021 • 4 minutes to read
Declara o nome de uma classe e apresenta a definição das variáveis, propriedades, eventos e procedimentos
que a classe compõe.
Syntax
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _
Class name [ ( Of typelist ) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ statements ]
End Class
Partes
T ERM O DEF IN IÇ Ã O
- Publicada
- Protected
- Público
- Pessoal
- Amigo protegido
- Particular protegido
Comentários
Uma Class instrução 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, consulte objetos e classes.
Você pode usar Class somente no nível de namespace ou de módulo. Isso significa que o contexto de
declaração para uma classe deve 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 é 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 instâncias
de outras classes.
Classes padrão para acesso Friend . Você pode ajustar seus níveis de acesso com os modificadores de acesso.
Para obter mais informações, consulte níveis de acesso em Visual Basic.
Regras
Aninhamento. Você pode definir uma classe dentro de outra. A classe externa é chamada de classe
recipiente, e a classe interna é chamada de classe aninhada.
Herda. 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
Public classe não pode herdar de uma Friend classe.
Uma classe não pode herdar de uma classe aninhada dentro dela.
Implementação. Se a classe usar a instrução Implements, você deverá implementar todos os membros
definidos por cada interface especificada no interfacenames . Uma exceção a isso é a reimplementação
de um membro da classe base. Para obter mais informações, consulte "reimplementação" em
implementações.
Propriedade padrão. Uma classe pode especificar, no máximo, uma propriedade como sua propriedade
padrão. Para obter mais informações, consulte padrão.
Comportamento
Nível de acesso. Dentro de uma classe, você pode declarar cada membro com seu próprio nível de
acesso. Membros de classe assumem como padrão acesso público , Exceto variáveis e constantes, que
assumem como padrão o acesso privado . Quando uma classe tem acesso mais restrito que um de seus
membros, o nível de acesso da classe tem precedência.
Escopo. Uma classe está no escopo em todo o namespace, classe, estrutura ou módulo que o contém.
O escopo de cada membro de classe é a classe inteira.
Existência. 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, consulte instrução de módulo.
Os membros da classe têm tempos de vida, dependendo de como e onde eles são declarados. Para obter
mais informações, consulte tempo de vida em Visual Basic.
Aprovação. O código fora de uma classe deve qualificar o nome de um membro com o nome dessa
classe.
se o código dentro de uma classe aninhada fizer uma referência não qualificada a um elemento de
programação, Visual Basic pesquisará o elemento primeiro na classe aninhada e, em seguida, na classe
que a contém, e assim por diante para o elemento contendo mais externo.
Classes e módulos
Esses elementos têm muitas semelhanças, mas também há algumas diferenças importantes.
Terminologia. As versões anteriores Visual Basic reconhecimento de dois tipos de módulos: módulos de
classe (arquivos .cls) e módulos padrão (arquivos .bas). A versão atual chama essas classes e módulos,
respectivamente.
Membros compar tilhados. Você pode controlar se um membro de uma classe é um membro
compartilhado ou de instância.
Orientação do objeto. As classes são orientadas a objeto, mas os módulos não. Você pode criar uma
ou mais instâncias de uma classe. Para obter mais informações, consulte Objetos e classes.
Exemplo
O exemplo a seguir usa Class uma instrução para definir uma classe e vários membros.
Class BankAccount
Shared interestRate As Decimal
Private accountNumber As String
Private accountBalance As Decimal
Public holdOnAccount As Boolean = False
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)
27/09/2021 • 4 minutes to read
Syntax
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Const constantlist
Partes
attributelist
Opcional. Lista de atributos que se aplicam a todas as constantes declaradas nesta instrução. Consulte a lista de
atributos entre colchetes angulares (" < " e " > ").
accessmodifier
Opcional. Use isso para especificar qual código pode acessar essas constantes. Pode ser público, protegido,
amigo, amigo protegido, privadoou privado protegido.
Shadows
Opcional. Use isso para redeclarar e ocultar um elemento de programação em uma classe base. Consulte
Shadows.
constantlist
Obrigatórios. Lista de constantes que estão sendo declaradas nesta instrução.
constant [ , constant ... ]
PA RT E DESC RIÇ Ã 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 vários lugares em seu código. Se, em uma versão posterior, você precisar redefinir
o valor, a Const instrução será o único lugar necessário para fazer uma alteração.
Você pode usar Const somente no nível do módulo ou do procedimento. Isso significa que o contexto de
declaração para uma variável deve ser uma classe, estrutura, módulo, procedimento ou bloco, e não pode ser
um arquivo de origem, namespace ou interface. Para obter mais informações, consulte Contextos de declaração
e níveis de acesso padrão.
As constantes locais (dentro de um procedimento) assumem o padrão de acesso público e você não pode usar
nenhum modificador de acesso neles. As constantes de membro de classe e módulo (fora de qualquer
procedimento) são padrão para acesso privado e constantes de membro de estrutura padrão para acesso
público. Você pode ajustar seus níveis de acesso com os modificadores de acesso.
Regras
Contexto de declaração. Uma constante declarada no nível do módulo, fora de qualquer
procedimento, é uma constante membro; é um membro da classe, da estrutura ou do módulo que o
declara.
Uma constante declarada no nível de procedimento é uma constante local; é local para o procedimento
ou bloco que o declara.
Atributos. Você pode aplicar atributos somente a constantes de membro, não a constantes locais. Um
atributo contribui com informações para os metadados do assembly, o que não é significativo para
armazenamento temporário, como constantes locais.
Modificadores. Por padrão, todas as constantes são Shared , Static e ReadOnly . Você não pode usar
nenhuma dessas palavras-chave ao declarar uma constante.
No nível do procedimento, você não pode usar Shadows ou nenhum modificador de acesso para declarar
constantes locais.
Várias constantes. Você pode declarar várias constantes na mesma instrução de declaração,
especificando a constantname parte para cada uma. Várias constantes são separadas por vírgulas.
Tipos diferentes. Você pode especificar tipos de dados diferentes para constantes diferentes usando
uma As cláusula separada para cada variável que declarar. No entanto, você não pode declarar várias
constantes para serem do mesmo tipo usando uma As cláusula comum.
Inicialização. Você deve inicializar o valor de cada constante no constantlist . Você usa initializer o
para fornecer uma expressão a ser atribuída à constante. A expressão pode ser qualquer combinação de
literais, outras constantes que já estão definidas e membros de enumeração que já estão definidos. Você
pode usar operadores aritméticos e lógicos para combinar esses elementos.
Você não pode usar variáveis ou funções no 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 Char argumento, pois isso pode ser avaliado no momento da compilação.
Comportamento
Escopo. As constantes locais são acessíveis somente de dentro de seu procedimento ou bloco.
Constantes de membro podem ser acessadas de qualquer lugar dentro de sua classe, estrutura ou
módulo.
Aprovação. O código fora de uma classe, estrutura ou módulo deve qualificar o nome de uma constante
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 constante local dentro desse procedimento ou bloco.
Exemplo 1
O exemplo a seguir usa a Const instrução para declarar constantes para uso em vez de valores literais.
Exemplo 2
se você definir uma constante com o tipo Object de dados, o compilador 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 .
O exemplo anterior usa o ToString método no Type objeto retornado pelo Operador GetType, porque Type não
pode ser convertido em String using CStr .
Confira também
Asc
AscW
Instrução Enum
#Const diretiva
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)
27/09/2021 • 2 minutes to read
Sintaxe
Continue { Do | For | While }
Comentários
Você pode transferir de dentro de um loop , ou para a Do For próxima While iteração desse loop. O controle
passa imediatamente para o teste de condição de loop, que é equivalente à transferência para a instrução ou ou
para a instrução ou que For contém a cláusula ou While Do Loop Until 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 as mesmas que com a instrução GoTo.
Por exemplo, se um loop estiver totalmente contido em um bloco, um bloco ou um bloco, você poderá usar para
transferir Try Catch para fora do Finally Continue loop. Se, por outro lado, a estrutura ... estiver contida
dentro do loop, você não poderá usar para transferir o controle para fora do bloco e poderá usá-lo para
transferir para fora de um bloco ou somente se você transferir completamente para fora da Try End Try
estrutura ... Continue Finally Try Catch Try End Try .
Se você tiver loops aninhados do mesmo tipo, por exemplo, um loop dentro de outro loop, uma instrução
ignorará para a próxima iteração do loop mais interno que o Do Do Continue Do Do contém. Você não pode
Continue usar para ignorar para a próxima iteração de um loop que contém do mesmo tipo.
Se você tiver loops aninhados de tipos diferentes, por exemplo, um loop dentro de um loop, poderá pular para a
próxima Do iteração de um loop usando For Continue Do ou Continue For .
Exemplo
O exemplo de código a seguir usa a instrução para ignorar para a próxima coluna de uma matriz
Continue While se um divisor for zero. O Continue While está dentro de um For loop. Ele é transferido para a
While col < lastcol instrução , que é a próxima iteração do loop mais While interno que contém o For loop.
Dim row, col As Integer
Dim lastrow As Integer = 6
Dim lastcol As Integer = 10
Dim a(,) As Double = New Double(lastrow, lastcol) {}
Dim b(7) As Double
row = -1
While row < lastrow
row += 1
col = -1
While col < lastcol
col += 1
a(row, col) = 0
For i As Integer = 0 To [Link](0)
If b(i) = col Then
Continue While
Else
a(row, col) += (row + b(i)) / (col - b(i))
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
27/09/2021 • 8 minutes to read
Syntax
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Overloads ] _
Declare [ charsetmodifier ] [ Sub ] name Lib "libname" _
[ Alias "aliasname" ] [ ([ parameterlist ]) ]
' -or-
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Overloads ] _
Declare [ charsetmodifier ] [ Function ] name Lib "libname" _
[ Alias "aliasname" ] [ ([ parameterlist ]) ] [ As returntype ]
Partes
T ERM O DEF IN IÇ Ã O
- Público
- Protegido
- Amigo
- Privada
- Amigo Protegido
- Protegido Privado
- Ansi (padrão)
- Unicode
- Automático
-ou-
Comentários
Às vezes, você precisa chamar um procedimento definido em um arquivo (como uma DLL ou recurso de código)
fora do projeto. Quando você faz isso, o compilador 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 que ele usa. A
Declare instrução cria uma referência a um procedimento externo e fornece essas informações necessárias.
Você só pode Declare usar no nível do módulo. Isso significa que o contexto de declaração para uma referência
externa deve ser uma classe, estrutura ou módulo 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.
As referências externas assumem como padrão o acesso público. Você pode ajustar seus níveis de acesso com
os modificadores de acesso.
Regras
Atributos. Você pode aplicar atributos a uma referência externa. Qualquer atributo que você aplicar terá
efeito somente em seu projeto, não no arquivo externo.
Modificadores. Procedimentos externos são implicitamente Compartilhados. Você não pode usar a
Shared palavra-chave ao declarar uma referência externa e não pode alterar seu status compartilhado.
Um procedimento externo não pode participar de substituições, implementar membros de interface ou
manipular eventos. Da mesma forma, você não pode usar a palavra-chave Overrides , , , , ou em uma
Overridable NotOverridable MustOverride Implements Handles Declare instrução .
Nome do Procedimento Externo. Você não precisa dar a essa referência externa o mesmo nome (em )
que o nome do ponto de entrada do procedimento name em seu arquivo externo ( aliasname ). Você
pode usar uma Alias cláusula para especificar o nome do ponto de entrada. Isso pode ser útil se o
procedimento externo tiver o mesmo nome que um modificador Visual Basic reservado ou uma variável,
um procedimento ou qualquer outro elemento de programação no mesmo escopo.
NOTE
Os nomes de ponto de entrada na maioria das DLLs são sensíveis a minúsculas.
Número do procedimento externo. Como alternativa, você pode usar uma cláusula para especificar o
número ordinal do ponto de entrada dentro da tabela Alias de exportação do arquivo externo. Para
fazer isso, você começa aliasname com um sinal de número ( # ). Isso poderá ser útil se qualquer
caractere no nome do procedimento externo não for permitido no Visual Basic ou se o arquivo externo
exportar o procedimento sem um nome.
NOTE
Se o procedimento externo não tiver sido escrito para o .NET Framework, você deverá ter cuidado para que os
tipos de dados correspondam. Por exemplo, se você declarar uma referência externa a um procedimento Visual
Basic 6.0 com um parâmetro (16 bits no Visual Basic 6.0), deverá identificar o argumento correspondente como na
instrução , pois esse é o tipo inteiro de 16 bits no Integer Short Declare Visual Basic. Da mesma forma,
Long tem uma largura de dados diferente Visual Basic 6.0 e é implementado de maneira Date diferente.
Tipo de dados de retorno. Se o procedimento externo for um e for , você deverá especificar o tipo de
Function dados do valor retornado ao código de Option Strict On chamada. Pode ser qualquer tipo
de dados ou o nome de uma enumeração, estrutura, classe ou interface.
NOTE
O Visual Basic compilador não verifica se os tipos de dados são compatíveis com aqueles do procedimento
externo. Se houver uma incompatibilidade, o Common Language Runtime gerará uma MarshalDirectiveException
exceção em tempo de execução.
Tipos de dados padrão. Se for e você não especificar o tipo de dados de um parâmetro no , o
compilador Visual Basic converterá o argumento correspondente para o Tipo de Option Strict Off
Dados de parameterlist Objeto. Da mesma forma, se você não especificar returntype , o compilador
assume o tipo de dados de retorno como Object .
NOTE
Como você está lidando com um procedimento externo que pode ter sido escrito em uma plataforma diferente, é
perigoso fazer suposições sobre tipos de dados ou permitir que eles sejam padrão. É muito mais seguro especificar
o tipo de dados de cada parâmetro e do valor de retorno, se algum. Isso também melhora a capacidade de leitura
do seu código.
Comportamento
Escopo. Uma referência externa está no escopo em toda sua classe, estrutura ou módulo.
Vida. Uma referência externa tem o mesmo tempo de vida da classe, estrutura ou módulo no qual ela é
declarada.
Chamando um procedimento externo. Você chama um procedimento externo da mesma maneira
que chama um Function Sub procedimento ou — usando-o em uma expressão, caso ele retorne um
valor, ou especificando-o em uma instrução de chamada se ele não retornar um valor.
Você passa argumentos para o procedimento externo exatamente como especificado por parameterlist
na Declare instrução. Não leve em consideração como os parâmetros foram originalmente declarados
no arquivo externo. Da mesma forma, se houver um valor de retorno, use-o exatamente como
especificado por returntype na Declare instrução.
Conjuntos de caracteres. você pode especificar em charsetmodifier como Visual Basic deve realizar
marshaling de cadeias de caracteres ao chamar o procedimento externo. o Ansi modificador direciona
Visual Basic para empacotar todas as cadeias de caracteres para valores ANSI e o Unicode modificador o
direciona para empacotar todas as cadeias de caracteres para valores Unicode. o Auto modificador
direciona Visual Basic para empacotar cadeias de caracteres de acordo com as regras de .NET Framework
com base na referência externa name ou, aliasname se especificado. O valor padrão é Ansi .
charsetmodifier também especifica como Visual Basic deve procurar o procedimento externo dentro de
seu arquivo externo. Ansi e Unicode os dois Visual Basic diretos para pesquisá-lo sem modificar seu
nome durante a pesquisa. Auto direciona Visual Basic para determinar o conjunto de caracteres base da
plataforma de tempo de execução e possivelmente modificar o nome do procedimento externo, da
seguinte maneira:
em uma plataforma Unicode, como Windows, primeiro procure o procedimento externo sem
nenhuma modificação de nome. Se isso falhar, acrescente "W" ao final do nome do procedimento
externo e procure novamente.
Em uma plataforma ANSI, primeiro procure o procedimento externo sem nenhuma modificação
de nome. Se isso falhar, acrescente "A" ao final do nome do procedimento externo e procure
novamente.
Mecanismo. Visual Basic usa o mecanismo de invocação da plataforma .NET Framework (PInvoke) para
resolver e acessar procedimentos externos. A Declare instrução e a DllImportAttribute classe usam esse
mecanismo automaticamente e você não precisa de nenhum conhecimento do PInvoke. para obter mais
informações, consulte Walkthrough: chamando Windows APIs.
IMPORTANT
Se o procedimento externo for executado fora do Common Language Runtime (CLR), ele será um código não gerenciado.
quando você chama esse procedimento, por exemplo, uma Windows função de API ou um método COM, você pode
expor seu aplicativo a riscos de segurança. Para obter mais informações, consulte proteger as diretrizes de codificação para
código não gerenciado.
Exemplo 1
O exemplo a seguir declara uma referência externa a um Function procedimento que retorna o nome de
usuário atual. Em seguida, ele chama o procedimento externo GetUserNameA como parte do getUser
procedimento.
Exemplo 2
O DllImportAttribute fornece uma maneira alternativa de usar funções em código não gerenciado. O exemplo a
seguir declara uma função importada sem usar uma Declare instrução.
<DllImportAttribute("[Link]", EntryPoint:="MoveFileW",
SetLastError:=True, CharSet:=[Link],
ExactSpelling:=True,
CallingConvention:=[Link])>
Public Shared Function MoveFile(ByVal src As String,
ByVal dst As String) As Boolean
' This function copies a file from the path src to the path dst.
' Leave this function empty. The DLLImport attribute forces calls
' to MoveFile to be forwarded to MoveFileW in [Link].
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
27/09/2021 • 4 minutes to read
Usado para declarar um delegado. Um delegado é um tipo de referência que se refere a um Shared método de
um tipo ou a um método de instância de um objeto. Qualquer procedimento com parâmetros correspondentes
e tipos de retorno pode ser usado para criar uma instância dessa classe delegate. O procedimento pode ser
posteriormente invocado por meio da instância de delegado.
Syntax
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
Partes
T ERM O DEF IN IÇ Ã O
Comentários
A Delegate instrução define o parâmetro e os tipos de retorno de uma classe delegate. Qualquer procedimento
com parâmetros e tipos de retorno correspondentes pode ser usado para criar uma instância dessa classe
delegate. O procedimento pode ser posteriormente invocado por meio da instância delegar, chamando o
método do delegado Invoke .
Os delegados podem ser declarados no nível de namespace, módulo, classe ou estrutura, mas não dentro de um
procedimento.
Cada classe de delegado define um construtor que é passado para a especificação de um método do objeto. Um
argumento para o construtor delegado deve ser uma referência a um método ou uma expressão lambda.
Para especificar uma referência a um método, use a seguinte sintaxe:
AddressOf [ expression .] methodname
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.
Para especificar uma expressão lambda, use a seguinte sintaxe:
Function ([ parm As type , parm2 As type2 , ...]) expression
A assinatura da função deve corresponder a do tipo delegado. Para obter mais informações sobre expressões
lambda, consulte expressões lambda.
Para obter mais informações sobre delegados, confira Delegados.
Exemplo
O exemplo a seguir usa a Delegate instrução para declarar um delegado para operar em dois números e
retornar um número. O DelegateTest método usa uma instância de um delegado desse tipo e a usa para operar
em pares de números.
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
)
Dim ret As Double
ret = [Link](x, y) ' Call the method.
MsgBox(ret)
End Sub
Confira também
Operador AddressOf
Desse
Representantes
Como: Usar uma classe genérica
Tipos genéricos no Visual Basic
Covariância e contravariância
In
Fora
Instrução Dim (Visual Basic)
27/09/2021 • 13 minutes to read
Syntax
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Partes
attributelist
Opcional. Especifica que essas são variáveis de objeto que se referem a instâncias de uma classe que
pode gerar eventos. Consulte WithEvents.
variablelist
Obrigatórios. Lista de variáveis que estão sendo declaradas nesta instrução.
variable [ , variable ... ]
PA RT E DESC RIÇ Ã O
Comentários
o compilador Visual Basic usa a Dim instrução 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 conter
um Integer valor.
Você pode especificar qualquer tipo de dados ou o nome de uma enumeração, estrutura, classe ou interface.
Para um tipo de referência, você usa a New palavra-chave para criar uma nova instância da classe ou estrutura
especificada pelo tipo de dados. Se você usar New , você não usará uma expressão de inicializador. Em vez disso,
você fornece argumentos, se eles forem necessários, para o construtor da classe da qual você está criando a
variável.
Se Option Explicit for on (o padrão), o compilador exigirá uma declaração para cada variável que você usar.
Para obter mais informações, consulte instrução Option Explicit.
Se um inicializador for especificado e um tipo de dados não for especificado em uma As cláusula, a inferência
de tipos será usada para inferir o tipo de dados do inicializador. No exemplo a seguir, num1 e num2 são
fortemente tipadas como inteiros. Na segunda declaração, a inferência de tipos infere o tipo do valor 3.
A inferência de tipos aplica-se ao nível de procedimento. Ele não se aplica fora de um procedimento em uma
classe, estrutura, módulo ou interface. Para obter mais informações sobre a inferência de tipos, consulte
instrução Option Infer e inferência de tipo local.
Para obter informações sobre o que acontece quando um tipo de dados ou inicializador não é especificado,
consulte tipos de dados e valores padrão posteriormente 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 Student classe e usa um inicializador de objeto para inicializar propriedades.
Dim student1 As New Student With {.First = "Michael",
.Last = "Tucker"}
Para obter mais informações sobre inicializadores de objeto, consulte como: declarar um objeto usando um
inicializador de objeto, inicializadores de objeto: tipos nomeados e anônimose tipos anônimos.
Se você declarar mais de uma variável com uma As cláusula, não poderá fornecer um inicializador para esse
grupo de variáveis.
Você pode especificar tipos de dados diferentes para variáveis diferentes usando uma As cláusula separada
para cada variável que declarar. Cada variável usa o tipo de dados especificado na primeira As cláusula
encontrada após sua variablename parte.
Matrizes
Você pode declarar uma variável para conter uma matriz, que pode conter vários valores. Para especificar que
uma variável contém uma matriz, siga-a variablename imediatamente com 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
boundslist dentro dos parênteses. Para cada dimensão, boundslist especifica o limite superior e,
opcionalmente, o limite inferior. O limite inferior é sempre zero, independentemente de você especificá-lo ou
não. Cada índice pode variar de zero por seu valor de limite superior.
As duas instruções a seguir são equivalentes. Cada instrução declara uma matriz de 21 Integer elementos.
Quando você acessa a matriz, o índice pode variar de 0 a 20.
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.
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.
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 comprimento zero não tem o valor Nothing . Matrizes de comprimento
zero são exigidas por determinadas funções do Common Language Runtime. 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, envolvem os valores
de inicialização com chaves ( {} ).
Para matrizes multidimensionais, a inicialização para cada dimensão separada é entre chaves na dimensão
externa. Os elementos são especificados em ordem de linha principal.
T IP O DE DA DO S IN IC IA L IZ A DO R
ESP EC IF IC A DO ? ESP EC IF IC A DO ? EXEM P LO RESULTA DO
Se você especificar um tipo de dados, mas não especificar um inicializador, Visual Basic inicializa a variável com
o valor padrão para seu tipo de dados. A tabela a seguir mostra os valores de inicialização padrão.
T IP O DE DA DO S VA LO R PA DRÃ 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 seus elementos, cada elemento será inicializado como se fosse
uma variável separada.
Em uma classe ou estrutura, o A primeira vez que o procedimento é Quando o programa interrompe a
procedimento é Shared chamado em uma instância específica execução
ou na própria classe ou estrutura
Em uma classe ou estrutura, o A primeira vez que o procedimento é Quando a instância é liberada para
procedimento não é Shared chamado em uma instância específica coleta de lixo (GC)
Atributos e modificadores
Você pode aplicar atributos somente a variáveis de membro, não a variáveis locais. Um atributo contribui com
informações para os metadados do assembly, o que não é significativo para armazenamento temporário, como
variáveis locais.
No nível do módulo, você não pode usar o Static modificador para declarar variáveis de membro. No nível do
procedimento, você não pode usar Shared , , , ou nenhum Shadows ReadOnly WithEvents modificador de
acesso para declarar variáveis locais.
Você pode especificar qual código pode acessar uma variável fornecendo um accessmodifier . As variáveis de
membro de classe e módulo (fora de qualquer procedimento) assumem como padrão o acesso privado e as
variáveis de membro da estrutura assumem como padrão o acesso público. Você pode ajustar seus níveis de
acesso com os modificadores de acesso. Não é possível usar modificadores de acesso em variáveis locais
(dentro de um procedimento).
Você pode especificar WithEvents somente em variáveis de membro, não em variáveis locais dentro de um
procedimento. Se você especificar WithEvents , o tipo de dados da variável deverá ser um tipo de classe
específico, não Object . Não é possível declarar uma matriz com WithEvents . Para obter mais informações
sobre eventos, consulte Eventos.
NOTE
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 Dim instrução com várias opções.
Exemplo 2
O exemplo a seguir lista os números principais entre 1 e 30. O escopo de variáveis locais é descrito em
comentários de código.
Public Sub ListPrimes()
' The sb variable can be accessed only
' within the ListPrimes procedure.
Dim sb As New [Link]()
[Link]([Link])
' Output: 2 3 5 7 11 13 17 19 23 29
End Sub
Return True
End If
End Function
Exemplo 3
No exemplo a seguir, speedValue a variável é declarada no nível de classe. A Private palavra-chave é usada
para declarar a variável. A variável pode ser acessada por qualquer procedimento na Car classe .
[Link]([Link])
' Output: 45
Public Class Car
' The speedValue variable can be accessed by
' any procedure in the Car class.
Private speedValue As Integer = 0
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)
27/09/2021 • 4 minutes to read
Repete um bloco de instruções enquanto uma Boolean condição é True ou até que a condição se torne True .
Syntax
Do { While | Until } condition
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop
' -or-
Do
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop { While | Until } condition
Partes
T ERM O DEF IN IÇ Ã O
Comentários
Use uma Do...Loop estrutura quando você quiser repetir um conjunto de instruções um número indefinido de
vezes, até que uma condição seja satisfeita. Se você quiser repetir as instruções um número definido de vezes, o
para... A próxima instrução é geralmente uma opção melhor.
Você pode usar o While ou o Until para especificar condition , mas não ambos.
Você pode testar condition apenas uma vez, no início ou no fim do loop. Se você testar condition no início do
loop (na Do instrução), o loop pode não ser executado mesmo uma vez. Se você testar no final do loop (na
Loop instrução), 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 Do loops colocando um loop dentro de outro. Você também pode aninhar diferentes tipos
de estruturas de controle entre si. Para obter mais informações, consulte estruturas de controle aninhado.
NOTE
A Do...Loop estrutura oferece mais flexibilidade do que o while... Instrução End While porque ela permite que você
decida se deseja encerrar o loop quando condition parar de ser True ou quando ele se tornar o primeiro True . Ele
também permite que você teste condition no início ou no fim do loop.
Sair do
A instrução Exit do pode fornecer uma maneira alternativa de sair de um Do…Loop . Exit Do transfere o
controle imediatamente para a instrução que segue a Loop instrução.
Exit Do geralmente é usado depois que alguma condição é avaliada, por exemplo, em uma If...Then...Else
estrutura. Talvez você queira sair de um loop se detectar uma condição que o torne desnecessário ou impossível
para continuar a iteração, como um valor errado ou uma solicitação de encerramento. Um uso de Exit Do é
testar uma condição que poderia causar um loop infinito, que é um loop que poderia executar um número
grande ou mesmo infinito de vezes. Você pode usar Exit Do para escapar o loop.
Você pode incluir qualquer número de Exit Do instruções em qualquer lugar em um Do…Loop .
Quando usado em Do loops aninhados, Exit Do o transfere o controle do loop mais interno e para o 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 index variável seja maior que
10. A Until cláusula está no final do loop.
[Link]("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Exemplo 2
O exemplo a seguir usa uma While cláusula em vez de uma Until cláusula e condition é testada no início do
loop em vez de no final.
[Link]("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Exemplo 3
No exemplo a seguir, condition interrompe o loop quando a index variável é maior que 100. No If entanto,
a instrução no loop faz com que a Exit Do instrução pare o loop quando a variável de índice for maior que 10.
[Link]("")
' 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 OpenText método abre o arquivo e retorna um
StreamReader que lê os caracteres. Na Do...Loop condição, o Peek método de StreamReader determina se há
caracteres adicionais.
[Link]()
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)
27/09/2021 • 2 minutes to read
Apresenta um grupo de instruções a serem executadas ou compiladas se nenhum outro grupo de instruções
condicional tiver sido executado ou compilado.
Comentários
A Else palavra-chave pode ser usada nesses contextos:
Instrução If...Then...Else
Instrução Select...Case
#If... Diretiva then... #Else
Confira também
Palavras-chave
Instrução End
27/09/2021 • 2 minutes to read
Sintaxe
End
Comentários
Você pode posicionar a End instrução em qualquer lugar em um procedimento para forçar o aplicativo inteiro a
parar de ser executado. End Fecha todos os arquivos abertos com uma Open instrução e limpa todas as
variáveis do aplicativo. O aplicativo é fechado assim que não há nenhum outro programa contendo referências
a seus objetos e nenhum de seus códigos está em execução.
NOTE
a End instrução interrompe a execução do código abruptamente e não invoca o Dispose método ou ou Finalize
qualquer outro código de Visual Basic. As referências de objeto mantidas por outros programas são invalidadas. Se uma
End instrução for encontrada dentro de Try um Catch bloco ou, o controle não passará para o Finally bloco
correspondente.
A Stop instrução suspende a execução, mas, ao contrário End , não fecha nenhum arquivo ou limpa nenhuma
variável, a menos que seja encontrado em um arquivo executável compilado (.exe).
Como End o encerra o aplicativo sem participar de recursos que possam estar abertos, você deve tentar fechar
corretamente antes de usá-lo. Por exemplo, se seu aplicativo tiver qualquer formulário aberto, você deverá
fechá-lo antes que o controle atinja a End instrução.
Você deve usar com End moderação e somente quando precisar parar imediatamente. As maneiras normais de
encerrar um procedimento (instruçãoReturn e Exit Statement) não apenas fecham o procedimento de forma
limpa, mas também dão ao código de chamada a oportunidade de fechar corretamente. Um aplicativo de
console, por exemplo, pode simplesmente Return do Main procedimento.
IMPORTANT
A End instrução chama o Exit método da Environment classe no System namespace. Exit exige que você tenha
UnmanagedCode permissão. Se você não fizer isso, SecurityException ocorrerá um erro.
Quando seguido por uma palavra-chave adicional, a <keyword> instrução End delineia o final da definição do
procedimento ou bloco apropriado. Por exemplo, End Function encerra a definição de um Function
procedimento.
Exemplo
O exemplo a seguir usa a End instrução para encerrar a execução de código se o usuário solicitá-la.
Sub Form_Load()
Dim answer As MsgBoxResult
answer = MsgBox("Do you want to quit now?", [Link])
If answer = [Link] Then
MsgBox("Terminating program")
End
End If
End Sub
Confira também
SecurityPermissionFlag
Instrução Stop
<keyword>Instrução End
Instrução End <keyword> (Visual Basic)
27/09/2021 • 3 minutes to read
Quando seguido por uma palavra-chave adicional, termina a definição do bloco de instrução introduzido por
essa palavra-chave.
Syntax
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
PA RT E DESC RIÇ Ã O
Diretivas
Quando precedida por um sinal de número ( ), a palavra-chave encerra um bloco # End de pré-
processamento introduzido pela diretiva correspondente.
#End ExternalSource
#End If
#End Region
PA RT E DESC RIÇ Ã O
Comentários
A instrução End, sem uma palavra-chave adicional, encerra a execução imediatamente.
Notas do desenvolvedor de dispositivo inteligente
Não há suporte para a instrução sem uma End palavra-chave adicional.
Confira também
Instrução End
Instrução Enum (Visual Basic)
27/09/2021 • 8 minutes to read
Syntax
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
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 " < > ").
O atributo indica que o valor de uma instância da enumeração pode incluir vários membros de
enumeração e que cada membro representa um campo de bits no FlagsAttribute valor de enumeração.
accessmodifier
Opcional. Especifica qual código pode acessar essa enumeração. Um dos seguintes pode ser feito:
Público
Protegido
Friend
Privado
Amigo Protegido
Protegido Privado
Shadows
Opcional. Especifica que essa enumeração redeclares e oculta um elemento de programação nomeado de
forma idêntica, ou conjunto de elementos sobrecarregados, em uma classe base. Você pode especificar
Sombras somente na enumeração em si, não em nenhum de seus membros.
enumerationname
Obrigatórios. Nome da enumeração. Para obter informações sobre nomes válidos, consulte Nomes de
elemento declarados.
datatype
Obrigatórios. Lista de constantes de membro que estão sendo declaradas nesta instrução. Vários
membros aparecem em linhas de código-fonte individuais.
Cada member um tem a seguinte sintaxe e partes: [<attribute list>] member name [ = initializer ]
PA RT E DESC RIÇ Ã O
End Enum
Comentários
Se você tiver um conjunto de valores inalterados que estão logicamente relacionados uns aos outros, poderá
defini-los juntos em uma enumeração. Isso fornece nomes significativos para a enumeração e seus membros,
que são mais fáceis de lembrar do que seus valores. Em seguida, você pode usar os membros de enumeração
em muitos locais em seu código.
Os benefícios do uso de enumerações incluem o seguinte:
Reduz os erros causados pela transposição ou pela inedução de números.
Torna mais fácil alterar valores no futuro.
Facilita a leitura do código, o que significa que é menos provável que erros sejam introduzidos.
Garante a compatibilidade com o futuro. Se você usar enumerações, o código terá menos probabilidade
de falhar se, no futuro, alguém mudar os valores correspondentes aos nomes dos membros.
Uma enumeração tem um nome, um tipo de dados subjacente e um conjunto de membros. Cada membro
representa uma constante.
Uma enumeração declarada no nível de classe, estrutura, módulo ou interface, fora de qualquer procedimento, é
uma enumeração de membro. Ele é um membro da classe, da estrutura, do módulo ou da interface que o
declara.
As enumerações de membro podem ser acessadas de qualquer lugar em sua classe, estrutura, módulo ou
interface. O código fora de uma classe, estrutura ou módulo deve qualificar o nome de uma enumeração de
membro com o nome dessa classe, estrutura ou módulo. Você pode evitar a necessidade de usar nomes
totalmente qualificados adicionando uma instrução Imports ao arquivo de origem.
Uma enumeração declarada no nível do namespace, fora de qualquer classe, estrutura, módulo ou interface, é
um membro do namespace no qual ele aparece.
O contexto de declaração para uma enumeração deve ser um arquivo de origem, namespace, classe, estrutura,
módulo ou interface e não pode ser um procedimento. Para obter mais informações, consulte Contextos de
declaração e níveis de acesso padrão.
Você pode aplicar atributos a uma enumeração como um todo, mas não a seus membros individualmente. Um
atributo contribui com informações para os metadados do assembly.
Tipo de Dados
A Enum instrução pode declarar o tipo de dados de uma enumeração. Cada membro recebe o tipo de dados da
enumeração. Você pode especificar Byte , , , , , , ou Integer Long SByte Short UInteger ULong UShort .
Se você não especificar datatype para a enumeração, cada membro assume o tipo de dados de seu
initializer . Se você especificar datatype e , o tipo de dados de deverá ser initializer initializer
conversível em datatype . Se nem datatype nem initializer estiver presente, o tipo de dados assume como
padrão Integer .
Inicializando membros
A instrução pode inicializar o conteúdo dos membros selecionados no
Enum memberlist . Você usa
initializer para fornecer uma expressão a ser atribuída ao membro.
Se você não especificar para um membro, Visual Basic inicializa-o para zero (se ele for o primeiro em ) ou para
um valor maior que um do imediatamente initializer member memberlist member anterior.
A expressão fornecida em cada pode ser qualquer combinação de literais, outras constantes que já estão
definidas e membros de enumeração que já estão definidos, incluindo um membro anterior dessa initializer
enumeração. Você pode usar operadores aritméticos e lógicos para combinar esses elementos.
Não é possível usar variáveis ou funções no 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
Char argumento, pois isso pode ser avaliado em tempo de compilação.
Enumerações não podem ter valores de ponto flutuante. Se um membro for atribuído a um valor de ponto
flutuante e estiver definido como on, ocorrerá um Option Strict erro do compilador. Se Option Strict estiver
desligado, o valor será convertido automaticamente no Enum tipo .
Se o valor de um membro exceder o intervalo permitido para o tipo de dados subjacente ou se você inicializar
qualquer membro para o valor máximo permitido pelo tipo de dados subjacente, o compilador relata um erro.
Modificadores
As enumerações de membro de classe, estrutura, módulo e interface assumem como padrão o acesso público.
Você pode ajustar seus níveis de acesso com os modificadores de acesso. As enumerações de membro do
namespace assumem como padrão o acesso de amigo. Você pode ajustar seus níveis de acesso para público,
mas não para particular ou protegido. Para obter mais informações, consulte Níveis de acesso no Visual Basic.
Todos os membros de enumeração têm acesso público e você não pode usar nenhum modificador de acesso
neles. No entanto, se a enumeração em si tiver um nível de acesso mais restrito, o nível de acesso de
enumeração especificado terá precedência.
Por padrão, todas as enumerações são tipos e seus campos são constantes. Portanto, Shared as Static
ReadOnly palavras-chave , e não podem ser usadas ao declarar uma enumeração ou seus membros.
size = [Link]
' Continue processing...
End Sub
End Class
Exemplo 2
O método no exemplo a seguir está fora da Egg classe. Portanto, EggSizeEnum o é totalmente qualificado como
[Link] .
Exemplo 3
O exemplo a seguir usa a Enum instrução para definir um conjunto relacionado de valores constantes
nomeados. Nesse caso, os valores são cores que você pode optar por criar formulários de entrada de dados
para um banco de dado.
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
Exemplo 5
No exemplo a seguir, uma As cláusula é usada para especificar o datatype de uma enumeração.
Exemplo 6
O exemplo a seguir mostra como usar uma enumeração de bits. Vários valores podem ser atribuídos a uma
instância de uma enumeração bit a bit. A Enum declaração inclui o FlagsAttribute atributo, que indica que a
enumeração pode ser tratada como um conjunto de sinalizadores.
Enum EggSizeEnum
Jumbo
ExtraLarge
Large
Medium
Small
End Enum
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)
27/09/2021 • 2 minutes to read
Usado para liberar variáveis de matriz e desalocar a memória usada para seus elementos.
Syntax
Erase arraylist
Partes
arraylist
Obrigatórios. Lista de variáveis de matriz a serem apagadas. Várias variáveis são separadas por vírgulas.
Comentários
A Erase instrução só pode aparecer no nível do procedimento. Isso significa que você pode liberar matrizes
dentro de um procedimento, mas não no nível de classe ou módulo.
A Erase instrução é equivalente a atribuir Nothing a cada variável de matriz.
Exemplo
O exemplo a seguir usa a instrução para limpar duas matrizes e liberar sua memória Erase (1000 e 100
elementos de armazenamento, respectivamente). Em ReDim seguida, a instrução atribui uma nova instância de
matriz à matriz tridimensional.
Confira também
Nothing
Instrução ReDim
Instrução Error
27/09/2021 • 2 minutes to read
Syntax
Error errornumber
Partes
errornumber
Obrigatórios. Pode ser qualquer número de erro válido.
Comentários
Há Error suporte para a instrução para compatibilidade com compatibilidade com backward. No novo código,
especialmente ao criar objetos, use o método do objeto para gerar erros Err Raise em tempo de executar.
Se for definido, a instrução chamará o manipulador de erros depois que as propriedades do objeto são
errornumber Error Err atribuídas aos seguintes valores padrão:
P RO P RIEDA DE VA LO R
LastDLLError Zero.
Se nenhum manipulador de erros existir ou se nenhum estiver habilitado, uma mensagem de erro será criada e
exibida das propriedades Err do objeto.
NOTE
Alguns Visual Basic aplicativos host não podem criar objetos. Confira a documentação do aplicativo host para determinar
se ele pode criar classes e objetos.
Exemplo
Este exemplo usa a Error instrução para gerar o número de erro 11.
Requisitos
Namespace: [Link]
Assembly: Visual Basic biblioteca de runtime (em [Link])
Confira também
Clear
Err
Raise
Instrução On Error
Instrução Resume
Mensagens de erro
Instrução Event
27/09/2021 • 7 minutes to read
Syntax
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
[ <attrlist> ] AddHandler(ByVal value As delegatename)
[ statements ]
End AddHandler
[ <attrlist> ] RemoveHandler(ByVal value As delegatename)
[ statements ]
End RemoveHandler
[ <attrlist> ] RaiseEvent(delegatesignature)
[ statements ]
End RaiseEvent
End Event
Partes
PA RT E DESC RIÇ Ã O
interface . definedname
Comentários
Depois que o evento tiver sido declarado, use a RaiseEvent instrução para gerar o evento. Um evento típico
pode ser declarado e gerado conforme mostrado nos seguintes fragmentos:
Para lidar com um evento, você deve associá-lo a uma sub-rotina do manipulador de eventos usando a Handles
AddHandler instrução ou. As assinaturas da sub-rotina e do evento devem corresponder. Para manipular um
evento compartilhado, você deve usar a AddHandler instrução.
Você pode usar Event somente 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 Custom palavra-chave, fornece esse
controle permitindo que você defina 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 contar os segundos de 10 a 0. O código ilustra vários dos métodos,
propriedades e instruções relacionados ao evento. Isso inclui a RaiseEvent instrução.
A classe que gera um evento é a origem do evento, e os métodos que processam o evento são os
manipuladores de eventos. Uma origem de evento pode ter vários manipuladores para os eventos que ele gera.
Quando a classe gera o evento, esse evento é gerado em todas as classes que escolheram manipular eventos
para essa instância do objeto.
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 a 0 segundos.
Quando o tempo total (10 segundos) tiver decorrido, a primeira caixa de texto exibirá "concluído".
O código para Form1 especifica os Estados inicial e de terminal do formulário. Ele também contém o código
executado quando eventos são gerados.
para usar este exemplo, abra um novo projeto Windows Forms. Em seguida, adicione um botão Button1
chamado e uma caixa de texto chamada ao formulário TextBox1 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ódigos.
Adicione uma WithEvents variável à seção de declarações da Form1 classe :
Adicione o código a seguir ao código para Form1 . Substitua quaisquer procedimentos duplicados que possam
existir, como Form_Load ou Button_Click .
Private Sub Form1_Load() Handles [Link]
[Link] = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles [Link]
[Link](10.0, 0.1)
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = [Link]
Dim ElapsedTime As Double = 0
Pressione F5 para executar o exemplo anterior e clique no botão rotulado Iniciar . A primeira caixa de texto
começa a contar os segundos. Quando o tempo total (10 segundos) tiver decorrido, a primeira caixa de texto
exibirá "Done".
NOTE
O [Link] método não processa eventos da mesma maneira que o formulário. Para habilitar o
formulário para manipular os eventos diretamente, você pode usar multithreading. Para obter mais informações, consulte
Managed Threading.
Confira também
Instrução RaiseEvent
Instrução Implements
Eventos
Instrução AddHandler
Instrução RemoveHandler
Alças
Instrução Delegate
Como declarar eventos personalizados para conservar memória
Como declarar eventos personalizados para evitar bloqueio
Compartilhado
Sombras
Instrução Exit (Visual Basic)
27/09/2021 • 3 minutes to read
Sai de um procedimento ou bloco e transfere o controle imediatamente para a instrução após a chamada de
procedimento ou a definição de bloco.
Syntax
Exit { Do | For | Function | Property | Select | Sub | Try | While }
Instruções
Exit Do
Sai imediatamente do Do loop no qual ele aparece. A execução continua com a instrução após a Loop
instrução. Exit Do pode ser usado somente dentro de um Do loop. Quando usado dentro de Do loops
aninhados, Exit Do sai do loop mais interno e transfere o controle para o próximo nível mais alto de
aninhamento.
Exit For
Sai imediatamente do For loop no qual ele aparece. A execução continua com a instrução após a Next
instrução. Exit For pode ser usado somente dentro de um For loop... Next ou For Each .. Next . Quando
usado dentro de For loops aninhados, Exit For sai do loop mais interno e transfere o controle para o
próximo nível mais alto de aninhamento.
Exit Function
Sai imediatamente do Function procedimento no qual ele aparece. A execução continua com a instrução após a
instrução que chamou o Function procedimento. Exit Function pode ser usado somente dentro de um
Function procedimento.
Para especificar um valor de retorno, você pode atribuir o valor ao nome da função em uma linha antes da
Exit Function instrução. Para atribuir o valor de retorno e sair da função em uma instrução, em vez disso, você
pode usar a instrução return.
Exit Property
Sai imediatamente do Property procedimento no qual ele aparece. A execução continua com a instrução que
chamou o Property procedimento, ou seja, com a instrução solicitando ou definindo o valor da propriedade.
Exit Property pode ser usado somente dentro de um Get procedimento ou propriedade Set .
Para especificar um valor de retorno em um Get procedimento, você pode atribuir o valor ao nome da função
em uma linha antes da Exit Property instrução. Para atribuir o valor de retorno e sair do Get procedimento
em uma instrução, em vez disso, você pode usar a Return instrução.
Em um Set procedimento, a Exit Property instrução é equivalente à Return instrução.
Exit Select
Sai imediatamente do Select Case bloco no qual ele aparece. A execução continua com a instrução após a
End Select instrução. Exit Select pode ser usado somente dentro de uma Select Case instrução.
Exit Sub
Sai imediatamente do Sub procedimento no qual ele aparece. A execução continua com a instrução após a
instrução que chamou o Sub procedimento. Exit Sub pode ser usado somente dentro de um Sub
procedimento.
Em um Sub procedimento, a Exit Sub instrução é equivalente à Return instrução.
Exit Try
Sai imediatamente do Try bloco ou Catch em que ele aparece. A execução continua com o Finally bloco se
houver um, ou com a instrução após a End Try instrução, caso contrário. Exit Try pode ser usado somente
dentro de Try um Catch bloco ou e não dentro de um Finally bloco.
Exit While
Sai imediatamente do While loop no qual ele aparece. A execução continua com a instrução após a End While
instrução. Exit While pode ser usado somente dentro de um While loop. Quando usado em While loops
aninhados, o Exit While transfere o controle para o loop que é um nível aninhado acima do loop onde
Exit While ocorre.
Comentários
Não confunda Exit instruções com End instruções. Exit não define o fim de uma instrução.
Exemplo 1
No exemplo a seguir, a condição de loop para o loop quando a index variável é maior que 100. No If entanto,
a instrução no loop faz com que a Exit Do instrução pare o loop quando a variável de índice for maior que 10.
[Link]("")
' 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:
Exemplo 3
O exemplo a seguir usa a instrução return para atribuir o valor de retorno e sair da função:
Confira também
Instruções A-E
Instruções Q-Z
Referência da linguagem Visual Basic
Instrução For Each...Next (Visual Basic)
27/09/2021 • 13 minutes to read
Syntax
For Each element [ As datatype ] In group
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
Partes
T ERM O DEF IN IÇ Ã O
Exit For Opcional. Transfere o controle para fora do For Each loop.
Exemplo simples
Use um For Each loop ... quando quiser repetir um conjunto de instruções para cada elemento de uma coleção
ou Next matriz.
TIP
Um para... A próxima instrução 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 For Each loop ... geralmente é uma opção Next melhor.
No exemplo a seguir, o For Each ... Next A instrução itera por todos os elementos de uma coleção List.
Nested Loops
Você pode For Each aninhar loops colocando um loop dentro de outro.
O exemplo a seguir demonstra ... For Each aninhado Next Estruturas.
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,
consulte Estruturas de controle aninhadas.
Você pode colocar qualquer número de Exit For instruções em um For Each loop. Quando usado em loops
aninhados, faz com que a execução saia do loop mais interno e transfere o controle para o próximo For Each
nível mais alto de Exit For aninhamento.
Exit For geralmente é usado após uma avaliação de alguma condição, por exemplo, em um If ... Then ...
Else Estrutura. Talvez você queira usar Exit For para as seguintes condições:
Continuar a iterar é desnecessário ou impossível. Isso pode ser causado por um valor errado ou uma
solicitação de encerramento.
Uma exceção é capturada em um Try ... Catch ... Finally . Você pode Exit For usar no final do
Finally bloco.
Há um loop infinito, que é um loop que pode executar um número grande ou até infinito de vezes. Se
você detectar essa condição, poderá usar para Exit For escapar o loop. Para obter mais informações,
consulte Do... Instrução Loop.
Iterators
Você usa um iterador para executar uma iteração personalizada em uma coleção. Um iterador pode ser uma
função ou Get um acessador. Ele usa uma Yield instrução para retornar cada elemento da coleção um de cada
vez.
Chame um iterador usando uma For Each...Next instrução . Cada iteração do loop For Each chama o iterador.
Quando uma Yield instrução é atingida no iterador, a expressão na instrução é retornada e o Yield local atual
no código é mantido. A execução será reiniciada desse local na próxima vez que o iterador for chamado.
O exemplo a seguir usa uma função de iterador. A função de iterador tem Yield uma instrução que está dentro
de um For... Próximo loop. No método , cada iteração do corpo da instrução cria uma chamada para a função
ListEvenNumbers For Each de iterador, que passa para a próxima Yield instrução.
Public Sub ListEvenNumbers()
For Each number As Integer In EvenSequence(5, 18)
[Link](number & " ")
Next
[Link]("")
' Output: 6 8 10 12 14 16 18
End Sub
Implementação Técnica
Quando um For Each ... Next A instrução é Visual Basic avalia a coleção apenas uma vez, antes que o loop seja
iniciado. Se o bloco de instrução mudar ou , essas alterações element group não afetarão a iteração do loop.
Quando todos os elementos na coleção foram atribuídos sucessivamente a , o loop para e o controle passa para
a element For Each instrução após a Next instrução .
Se Option Infer estiver em (sua configuração padrão), o Visual Basic compilador poderá inferir o tipo de dados
de element . Se estiver desligado e não tiver sido declarado fora do element loop, você deverá declare-o na
For Each instrução . Para declarar o tipo de dados element de explicitamente, use uma As cláusula . A menos
que o tipo de dados do elemento seja definido fora do For Each constructo ... Next , seu escopo será o corpo
do loop. Observe que você não pode declarar element tanto fora quanto dentro do loop.
Opcionalmente, você pode element especificar na Next instrução . Isso melhora a capacidade de leitura do
programa, especialmente se você tiver For Each loops aninhados. Você deve especificar a mesma variável que
aparece 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
depuração do código. Alterar o valor de não afeta a coleção ou seus elementos, que foram group determinados
quando o loop foi inserido pela primeira vez.
Quando você estiver aninhando loops, se uma instrução de um nível de aninhamento externo for encontrada
antes do de um nível interno, o Next Next compilador sinaliza um erro. No entanto, o compilador poderá
detectar esse erro sobreposto somente se você especificar element em cada Next instrução.
Se o código depender de percorrer uma coleção em uma ordem específica, um loop ... não será a melhor opção,
a menos que você saiba as características do objeto enumerador que a For Each Next coleção expõe. A ordem
de travessia não é determinada por Visual Basic, mas pelo MoveNext método do objeto enumerador. Portanto,
talvez você não consiga prever qual elemento da coleção é o primeiro a ser retornado em ou qual é o próximo a
ser retornado após element um determinado elemento. Você pode obter resultados mais confiáveis usando
uma estrutura de loop diferente, como For ... Next ou ... Do Loop .
O runtime deve ser capaz de converter os elementos em group em element . A instrução [ ] controla se as
conversões de ampliação e restrição são permitidas ( está off, seu valor padrão) ou se apenas conversões de
ampliação são Option Strict Option Strict permitidas ( Option Strict está on). Para obter mais informações,
consulte Conversões de restrição.
O tipo de dados de deve ser um tipo de referência que se refere a uma coleção ou a uma group matriz
enumerável. Normalmente, isso significa que se refere a um objeto que implementa a interface do group
IEnumerable [Link] namespace ou IEnumerable<T> a interface do [Link]
namespace. [Link] define o GetEnumerator método , que retorna um objeto
enumerador para a coleção. O objeto enumerador implementa a [Link] interface do
[Link] namespace e expõe a propriedade e Current os métodos e Reset MoveNext . Visual Basic os
usa para percorrer a coleção.
Conversões de redução
Quando Option Strict é definido como , On conversões de restrição normalmente causam erros do
compilador. Em uma For Each instrução, no entanto, as conversões dos elementos no group para element são
avaliadas e executadas em tempo de execução, e os erros do compilador causados por conversões redutoras
são suprimidos.
No exemplo a seguir, a atribuição de m como o valor inicial para n não compila quando Option Strict está
on porque a conversão de um Long para um Integer é uma conversão de restrição. No For Each entanto, na
instrução, nenhum erro do compilador é relatado, mesmo que a atribuição number exija a mesma conversão de
Long para Integer . Na For Each instrução que contém um número grande, um erro de tempo de execução
ocorre quando ToInteger é aplicado ao número grande.
Option Strict On
Imports System
Module Program
Sub Main(args As String())
' The assignment of m to n causes a compiler error when
' Option Strict is on.
Dim m As Long = 987
'Dim n As Integer = m
' The For Each loop requires the same conversion but
' causes no errors, even when Option Strict is on.
For Each number As Integer In New Long() {45, 3, 987}
[Link](number & " ")
Next
[Link]()
' Output: 45 3 987
Chamadas de IEnumerator
quando a execução de um For Each loop... Next é iniciada, Visual Basic verifica se group refere-se a um objeto
de coleção válido. Caso contrário, ele gera uma exceção. Caso contrário, ele chamará o MoveNext método e a
Current Propriedade do objeto enumerador para retornar o primeiro elemento. Se MoveNext o indicar que não
há nenhum elemento seguinte, ou seja, se a coleção estiver vazia, o For Each loop será interrompido e o
controle passará para a instrução após a Next instrução. caso contrário, Visual Basic define element para o
primeiro elemento e executa o bloco de instrução.
cada vez que Visual Basic encontra a Next instrução, ele retorna para a For Each instrução. Novamente, ele
chama MoveNext e Current retorna 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 elemento seguinte
ou uma Exit For instrução é encontrada.
Modificando a coleção. O objeto enumerador retornado GetEnumerator normalmente não permite que você
altere a coleção adicionando, excluindo, substituindo ou reordenando quaisquer elementos. Se você alterar a
coleção depois de iniciar um For Each loop... Next , o objeto enumerador se tornará inválido e a próxima
tentativa de acessar um elemento causará uma InvalidOperationException exceção.
no entanto, esse bloqueio de modificação não é determinado por Visual Basic, mas sim pela implementação da
IEnumerable interface. É possível implementar IEnumerable de forma que permita modificações durante a
iteração. Se estiver pensando em fazer essa modificação dinâmica, certifique-se de entender as características
da IEnumerable implementação na coleção que você está usando.
Modificando elementos de coleção. A Current Propriedade do objeto Enumerator é ReadOnlye retorna uma
cópia local de cada elemento da coleção. Isso significa que você não pode modificar os elementos em um
For Each loop... Next . Qualquer modificação que você faça afeta apenas a cópia local de Current e não é
refletida de volta na coleção subjacente. No entanto, se um elemento for um tipo de referência, você poderá
modificar os membros da instância para a qual ele aponta. O exemplo a seguir modifica o BackColor membro
de cada thisControl elemento. No entanto, você não pode modificar a thisControl si mesmo.
O exemplo anterior pode modificar o BackColor membro de cada thisControl elemento, embora ele não
possa thisControl se modificar.
Atravessando matrizes. Como a Array classe implementa a IEnumerable interface, todas as matrizes expõem
o GetEnumerator método. Isso significa que você pode iterar por meio de uma matriz com um For Each loop...
Next . No entanto, você só pode ler os elementos da matriz. Você não pode alterá-los.
Exemplo 1
O exemplo a seguir lista todas as pastas em C:\ diretório usando a DirectoryInfo classe.
Exemplo 2
O exemplo a seguir ilustra um procedimento para a classificação de uma coleção. O exemplo classifica as
instâncias de uma Car classe que são armazenadas em um List<T> . A classe Car implementa a interface
IComparable<T>, que requer que o método CompareTo seja implementado.
Cada chamada para o CompareTo método faz uma única comparação 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.
No método ListCars , a instrução [Link]() classifica a lista. Essa chamada para o método Sort da List<T>
faz com que o método CompareTo seja chamado automaticamente para os objetos Car na List .
' Output:
' blue 50 car4
' blue 30 car5
' blue 20 car1
' green 50 car7
' green 10 car3
' red 60 car6
' red 50 car2
End Sub
Return compare
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)
27/09/2021 • 9 minutes to read
Syntax
For counter [ As datatype ] = start To end [ Step step ]
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
Partes
PA RT E DESC RIÇ Ã O
Exemplos simples
Você usa uma For estrutura... Next quando quiser repetir um conjunto de instruções por um número definido
de vezes.
No exemplo a seguir, a index variável começa com um valor de 1 e é incrementada com cada iteração do loop,
terminando após o valor de index chegar a 5.
No exemplo a seguir, a number variável começa em 2 e é reduzida por 0,25 em cada iteração do loop,
terminando após o valor de number chegar a 0. O Step argumento de -.25 reduz o valor de 0,25 em cada
iteração do loop.
TIP
Um tempo... Instrução End While ou do... Instrução de loop funciona bem quando você não sabe antecipadamente
quantas vezes executar as instruções no loop. No entanto, quando você espera executar o loop um número específico de
vezes, um For loop... Next é uma opção melhor. Você determina o número de iterações quando entra o loop pela
primeira vez.
Loops de aninhamento
Você pode aninhar For loops colocando um loop dentro de outro. O exemplo a seguir demonstra For
estruturas aninhadas... 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.
For indexA = 1 To 3
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New [Link]()
Ao aninhar loops, cada loop deve ter uma counter variável exclusiva.
Você também pode aninhar estruturas de controle de tipos diferentes entre si. Para obter mais informações,
consulte estruturas de controle aninhado.
Você pode colocar qualquer número de Exit For instruções em um For ... Next While. Quando usado dentro
de aninhado For ... 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 depois que você avalia alguma condição (por exemplo, em um If ... Then ...
Else estrutura). Talvez você queira usar Exit For o para as seguintes condições:
Continuar a iterar é desnecessário ou impossível. Um valor errado ou uma solicitação de encerramento
pode criar essa condição.
A Try ... Catch ... Finally a instrução captura uma exceção. Você pode usar Exit For no final do
Finally bloco.
Você tem um loop infinito, que é um loop que poderia executar um número grande ou mesmo infinito de
vezes. Se você detectar tal condição, poderá usar Exit For para escapar o loop. Para obter mais
informações, consulte do... Instrução loop.
Implementação Técnica
quando um For loop... Next é iniciado, Visual Basic avalia start , end e step . Visual Basic avalia esses
valores somente no momento e, em seguida, atribui start a counter . antes da execução do bloco de
instrução, Visual Basic counter se compara com end . Se counter já for maior que o end valor (ou menor se
step for negativo), o For loop terminará e o controle passará para a instrução que segue a Next instrução.
Caso contrário, o bloco de instrução será executado.
cada vez que Visual Basic encontra a Next instrução, ele é incrementado counter por step e retorna à For
instrução. Novamente, ele compara counter com end e, novamente, executa o bloco ou sai do loop,
dependendo do resultado. Esse processo continua até que counter passes end ou uma Exit For instrução
seja encontrada.
O loop não é interrompido até que counter tenha passado end . Se counter for igual a end , o loop
continuará. A comparação que determina se o bloco será executado counter <= end se step for positivo e
counter >= end se step for negativo.
Se você alterar o valor de counter enquanto estiver dentro de um loop, seu código poderá ser mais difícil de ler
e depurar. Alterar o 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.
Se você aninhar loops, o compilador sinalizará um erro se encontrar a Next instrução de um nível de
aninhamento externo antes da Next instrução de um nível interno. No entanto, o compilador pode detectar
esse erro sobreposto somente se você especificar counter em cada Next instrução.
Argumento Step
O valor de step pode ser positivo ou negativo. Esse parâmetro determina o processamento de loop de acordo
com a tabela a seguir:
O tipo de dados de counter determina o tipo da iteração, que deve ser um dos seguintes tipos:
A Byte ,,,,,,, SByte UShort Short UInteger Integer ULong Long , Decimal , Single ou Double .
Uma enumeração que você declara usando uma instrução enum.
Um Object .
Um tipo T que tem os seguintes operadores, em que B é um tipo que pode ser usado em uma
Boolean expressão.
Public Shared Operator >= (op1 As T, op2 As T) As B
Opcionalmente, você pode especificar a counter variável na Next instrução. Essa sintaxe melhora a
legibilidade do seu programa, especialmente se você tiver For loops aninhados. Você deve especificar a
variável que aparece na instrução correspondente For .
As start expressões, e step podem ser avaliadas como qualquer tipo de dados que amplia o tipo de
end
counter . Se você usar um tipo definido pelo usuário para counter , talvez seja necessário definir o CType
operador de conversão para converter os tipos de start , end ou step para o tipo de counter .
Exemplo 1
O exemplo a seguir remove todos os elementos de uma lista genérica. Em vez de um para cada... A próxima
instrução, o exemplo mostra uma For instrução... Next que itera em ordem decrescente. O exemplo usa essa
técnica porque o removeAt método faz com que os elementos após o elemento removido tenham um valor de
índice inferior.
Dim lst As New List(Of Integer) From {10, 20, 30, 40}
[Link]([Link])
' Output: 0
Exemplo 2
O exemplo a seguir itera através de uma enumeração que é declarada usando uma instrução enum.
Exemplo 3
No exemplo a seguir, os parâmetros de instrução usam uma classe que tem sobrecargas de operador para os +
- operadores,, >= e <= .
Private Class Distance
Public Property Number() As Double
Public Shared Operator -(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
Return New Distance([Link] - [Link])
End Operator
Public Shared Operator >=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return ([Link] >= [Link])
End Operator
Public Shared Operator <=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return ([Link] <= [Link])
End Operator
End Class
' 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)
28/09/2021 • 8 minutes to read
Syntax
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist |
Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Partes
attributelist
NotOverridable Overrides
Shared
Opcional. Lista de parâmetros de tipo para um procedimento genérico. Consulte lista de tipos.
parameterlist
Opcional. Lista de nomes de variáveis locais que representam os parâmetros deste procedimento.
Consulte a lista de parâmetros.
returntype
Obrigatório se Option Strict for On . Tipo de dados do valor retornado por este procedimento.
Implements
Opcional. Indica que este procedimento implementa um ou mais Function procedimentos, cada um
definido em uma interface implementada por este procedimento que contém a classe ou a estrutura.
Consulte a instrução Implements.
implementslist
Necessário se Implements for fornecido. Lista de Function procedimentos que estão sendo
implementados.
implementedprocedure [ , implementedprocedure ... ]
PA RT E DESC RIÇ Ã O
Handles
Opcional. Indica que esse procedimento pode manipular um ou mais eventos específicos. Consulte
identificadores.
eventlist
Necessário se Handles for fornecido. Lista de eventos que este procedimento manipula.
eventspecifier [ , eventspecifier ... ]
PA RT E DESC RIÇ Ã O
statements
Comentários
Todo o 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 o
contém.
Para retornar um valor para o código de chamada, use um Function procedimento; caso contrário, use um Sub
procedimento.
A Return instrução atribui simultaneamente o valor de retorno e sai da função, como mostra o exemplo a
seguir.
O exemplo a seguir atribui o valor de retorno ao nome da função myFunction e, em seguida, usa a
Exit Function instrução a ser retornada.
As Exit Function Return instruções e causam uma saída imediata de um Function procedimento. Qualquer
número de Exit Function Return instruções and pode aparecer em qualquer lugar no procedimento, e você
pode misturar Exit Function e Return demonstrativos.
Se você usar Exit Function sem atribuir um valor ao 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 .
NOTE
Um procedimento retorna ao chamador quando encontra o primeiro objeto aguardado que ainda não está concluído ou
chega ao final do procedimento, o que ocorrer Async Async primeiro.
Uma Async função pode ter um tipo de retorno de ou Task<TResult> Task . Um exemplo de uma Async função
que tem um tipo de retorno de é fornecido Task<TResult> abaixo.
Uma Async função não pode declarar nenhum parâmetro ByRef.
Uma Sub instrução também pode ser marcada com o Async modificador . Isso é usado principalmente para
manipuladores de eventos, em que um valor não pode ser retornado. Um procedimento não pode ser
aguardado e o chamador de um procedimento não pode capturar exceções que Async Sub Async Sub são
lançadas pelo Sub procedimento.
Para obter mais informações sobre funções, consulte Programação assíncrona com Async e Await, Controle
Flow em programas assíncronos e Tipos de retorno Async assíncronos.
Funções de iterador
Uma função de iterador executa uma iteração personalizada em uma coleção, como uma lista ou matriz. Uma
função de iterador usa a instrução Yield para retornar cada elemento um de cada vez. Quando uma instrução
Yield é atingida, o local atual no código é lembrado. A execução será reiniciada desse local na próxima vez que a
função iteradora for chamada.
Você chama um iterador do código do cliente usando um Para Cada... Próxima instrução.
O tipo de retorno de uma função de iterador pode ser IEnumerable IEnumerable<T> , , ou IEnumerator
IEnumerator<T> .
Para obter mais informações, consulte Iteradores.
Exemplo 1
O exemplo a seguir usa a instrução para declarar o nome, os parâmetros e o código que Function formam o
corpo de um Function procedimento. O ParamArray modificador permite que a função aceite um número
variável de argumentos.
Module Module1
Sub Main()
' In the following function call, CalcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
[Link]("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = CalcSum()
[Link]("Sum: " & returnedValue)
End Sub
End Module
Exemplo 3
No exemplo a seguir, DelayAsync é um que tem um tipo de retorno de Async Function Task<TResult> .
DelayAsync tem uma instrução Return que retorna um número inteiro. Portanto, a declaração de DelayAsync
função de precisa ter um tipo de retorno de Task(Of Integer) . Como o tipo de retorno é Task(Of Integer) , a
avaliação Await da expressão em produz um DoSomethingAsync inteiro. Isso é demonstrado nesta instrução:
Dim result As Integer = Await delayTask .
' Output:
' Result: 5
Confira também
Instrução Sub
Procedimentos de função
Lista de parâmetros
Instrução Dim
Instrução Call
De
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
27/09/2021 • 3 minutes to read
Declara um Get procedimento de propriedade usado para recuperar o valor de uma propriedade.
Syntax
[ <attributelist> ] [ accessmodifier ] Get()
[ statements ]
End Get
Partes
T ERM O DEF IN IÇ Ã O
- Protected
- Público
- Pessoal
- Protected Friend
Comentários
Cada propriedade deve ter um Get procedimento de propriedade, a menos que a propriedade esteja marcada
WriteOnly . O Get procedimento é usado para retornar o valor atual da propriedade.
Visual Basic chama automaticamente o procedimento de uma propriedade Get quando uma expressão solicita
o valor da propriedade.
O corpo da declaração de propriedade pode conter somente as propriedades Get e os Set procedimentos
entre a instrução de propriedade e a End Property instrução. Ele não pode armazenar nada além desses
procedimentos. Em particular, ele não pode armazenar o valor atual da propriedade. Você deve armazenar esse
valor fora da propriedade, porque se armazená-lo dentro de qualquer um dos procedimentos de propriedade, o
outro procedimento de propriedade não poderá acessá-lo. A abordagem usual é armazenar o valor em uma
variável privada declarada no mesmo nível da propriedade. Você deve definir um Get procedimento dentro da
propriedade à qual ele se aplica.
O Get procedimento assume como padrão o nível de acesso de sua propriedade contendo, a menos que você
use accessmodifier na Get instrução.
Regras
Níveis de acesso misto. Se você estiver definindo uma propriedade de leitura/gravação, poderá
opcionalmente especificar um nível de acesso diferente para o Get ou o Set procedimento, mas não
ambos. Se você fizer isso, o nível de acesso do 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
Get procedimento Private , mas não Public .
Se você estiver definindo uma ReadOnly propriedade, o Get procedimento representará a propriedade
inteira. Não é possível declarar um nível de acesso diferente para Get , pois isso definiria dois níveis de
acesso para a propriedade.
Tipo de retorno. A instrução Property pode declarar o tipo de dados do valor que ele retorna. O Get
procedimento retorna automaticamente esse tipo de dados. Você pode especificar qualquer tipo de
dados ou o nome de uma enumeração, estrutura, classe ou interface.
Se a Property instrução não especificar returntype , o procedimento retornará Object .
Comportamento
Retornando de um procedimento. Quando o Get procedimento retorna ao código de chamada, a
execução continua dentro da instrução que solicitou o valor da propriedade.
os procedimentos de propriedade podem retornar um valor usando a instrução return ou
Get
atribuindo o valor de retorno ao nome da propriedade. Para obter mais informações, consulte "valor de
retorno" na instrução function.
As Exit Property Return instruções e causam uma saída imediata de um procedimento de propriedade.
Qualquer número de Exit Property Return instruções and pode aparecer em qualquer lugar no
procedimento, e você pode misturar Exit Property e Return demonstrativos.
Valor de retorno. Para retornar um valor de um Get procedimento, você pode atribuir o valor ao
nome da propriedade ou incluí-lo em uma instrução return. A Return instrução atribui simultaneamente
o valor de Get retorno do procedimento e sai do procedimento.
Se você usar Exit Property sem atribuir um valor ao nome da propriedade, o Get procedimento
retornará o valor padrão para o tipo de dados da propriedade. Para obter mais informações, consulte
"valor de retorno" na instrução function.
O exemplo a seguir ilustra duas maneiras como a propriedade somente leitura quoteForTheDay pode
retornar o valor mantido na variável privada quoteValue .
Exemplo
O exemplo a seguir usa a Get instrução para retornar o valor de uma propriedade.
Class propClass
' Define a private local variable to store the property value.
Private currentTime As String
' Define the read-only property.
Public ReadOnly Property DateAndTime() As String
Get
' The Get procedure is called automatically when the
' value of the property is retrieved.
currentTime = CStr(Now)
' Return the date and time As a string.
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
27/09/2021 • 2 minutes to read
Syntax
GoTo line
Parte
line
Obrigatórios. Qualquer rótulo de linha.
Comentários
A GoTo instrução pode ramificar somente para linhas no procedimento em que ele aparece. A linha deve ter um
rótulo de linha que GoTo possa se referir. Para obter mais informações, consulte instruções de rótulo.
NOTE
GoTo as instruções podem dificultar a leitura e a manutenção do código. Sempre que possível, use uma estrutura de
controle em vez disso. Para obter mais informações, consulte Control Flow.
Você não pode usar uma GoTo instrução para ramificação de fora de um..., For Next For Each . Next
SyncLock End SyncLock Try Catch ..,...,... ... Finally , With ... End With , ou Using ... End Using Construction
para um rótulo dentro de.
B LO C O O U REGIÃ O RA M IF IC A N DO DE F O RA RA M IF IC A Ç Ã O DE DEN T RO
1 se houver Try . Catch .. ... Finally a construção é aninhada dentro de outra, um Catch bloco pode ramificar
no Try bloco em seu próprio nível de aninhamento, mas não em nenhum outro Try bloco. Um aninhado Try
... Catch ... Finally a construção deve estar contida completamente em Try um Catch bloco ou da construção
na qual está aninhada.
A ilustração a seguir mostra uma Try construção 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 GoTo instrução para ramificar para rótulos de linha em um procedimento.
Sub GoToStatementDemo()
Dim number As Integer = 1
Dim sampleString As String
' Evaluate number and branch to appropriate label.
If number = 1 Then GoTo Line1 Else GoTo Line2
Line1:
sampleString = "Number equals 1"
GoTo LastLine
Line2:
' The following statement never gets executed because number = 1.
sampleString = "Number equals 2"
LastLine:
' Write "Number equals 1" in the Debug window.
[Link](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)
27/09/2021 • 5 minutes to read
Syntax
' Multiline syntax:
If condition [ Then ]
[ statements ]
[ ElseIf elseifcondition [ Then ]
[ elseifstatements ] ]
[ Else
[ elsestatements ] ]
End If
Partes
condition
Obrigatórios. Expressão. Deve ser avaliada True como ou ou para um tipo de dados False implicitamente
conversível em Boolean .
Se a expressão for uma variável que pode ser anulada que é avaliada como Nothing , a condição será tratada
como se a expressão fosse e os blocos serão avaliados se existirem ou o bloco será executado se Boolean
False ElseIf Else existir.
Then
Necessário na sintaxe de linha única; opcional na sintaxe multilinha.
statements
Opcional. Uma ou mais instruções após If ... Then que serão executadas se condition for avaliada como
True .
elseifcondition
Necessário se ElseIf estiver presente. Expressão. Deve ser avaliada True como ou ou para um tipo de dados
False implicitamente conversível em Boolean .
elseifstatements
Opcional. Uma ou mais instruções após ElseIf ... Then que serão executadas se elseifcondition for avaliada
como True .
elsestatements
Opcional. Uma ou mais instruções que serão executadas se nenhuma expressão condition anterior ou for
avaliada como elseifcondition True .
End If
Encerra a versão multilinha do If ... Then ... Else Bloco.
Comentários
Sintaxe multilinha
Quando um If ... Then ... Else A instrução é encontrada, condition é testada. Se condition for , as instruções
a seguir serão True Then executadas. Se condition for , cada False ElseIf instrução (se houver alguma)
será avaliada na ordem. Quando um True elseifcondition é encontrado, as instruções imediatamente após o
associado ElseIf são executadas. Se nenhum elseifcondition for avaliada como ou se não houver instruções,
as instruções a seguir serão True ElseIf Else executadas. Depois de executar as instruções após Then , ou ,
a execução continua com a ElseIf Else instrução após End If .
As ElseIf Else cláusulas e são opcionais. Você pode ter quantas ElseIf cláusulas quiser em um If ... Then
... Else instrução , mas nenhuma ElseIf cláusula pode aparecer após uma cláusula Else . If ... Then ... Else
As instruções podem ser aninhadas entre si.
Na sintaxe multilinha, a If instrução deve ser a única instrução na primeira linha. As ElseIf instruções , e só
podem ser Else End If precedidas por um rótulo de linha. O If ... Then ... Else block deve terminar com
uma End If instrução .
TIP
A opção Selecionar... A instrução 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 If decisão Then
... . Todas as instruções devem estar na mesma linha e ser separadas por dois-pontos.
[Link](message)
End Sub
End Module
'This example displays output like the following:
' There are 4 items.
Module Nested
Public Sub Main()
' Run the function as part of the WriteLine output.
[Link]("Time Check is " & CheckIfTime() & ".")
End Sub
Module SingleLine
Public Sub Main()
' If A > 10, execute the three colon-separated statements in the order
' that they appear
If A > 10 Then A = A + 1 : B = B + A : C = C + B
End Sub
End Module
'This example displays output like the following:
'A value before If: 11
'B value before If: 6
'C value before If: 3
'A value after If: 12
'B value after If: 18
'C value after If: 21
Confira também
Choose
Switch
#If... Diretivas 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
27/09/2021 • 2 minutes to read
Especifica uma ou mais interfaces, ou membros de interface, que devem ser implementadas na definição de
classe ou estrutura na qual ela aparece.
Syntax
Implements interfacename [, ...]
' -or-
Implements [Link] [, ...]
Partes
interfacename
Obrigatórios. Uma interface cujas propriedades, procedimentos e eventos devem ser implementados por
membros correspondentes na classe ou estrutura.
interfacemember
Obrigatórios. O membro de uma interface que está sendo implementada.
Comentários
Uma interface é uma coleção de protótipos que representam os membros (propriedades, procedimentos e
eventos) encapsulados pela interface. As interfaces contêm apenas as declarações para membros; classes e
estruturas implementam esses membros. Para obter mais informações, consulte Interfaces.
A Implements instrução deve seguir imediatamente a Class Structure instrução ou .
Ao implementar uma interface, você deve implementar todos os membros declarados na interface. A omissão
de qualquer membro é considerada um erro de sintaxe. Para implementar um membro individual, especifique a
palavra-chave Implements (que é separada da instrução) ao declarar o membro na Implements classe ou
estrutura. Para obter mais informações, consulte Interfaces.
As classes podem usar implementações privadas de propriedades e procedimentos, mas esses membros só
podem ser acessados por meio da seleção de uma instância da classe de implementação em uma variável
declarada como do tipo da interface.
Exemplo 1
O exemplo a seguir mostra como usar a Implements instrução para implementar membros de uma interface.
Ele define uma interface chamada ICustomerInfo com um evento, uma propriedade e um procedimento. A
classe customerInfo implementa todos os membros definidos na interface .
Public Interface ICustomerInfo
Event UpdateComplete()
Property CustomerName() As String
Sub UpdateCustomerStatus()
End Interface
Observe que a classe usa a instrução em uma linha de código-fonte separada para indicar que a classe
implementa todos os customerInfo Implements membros da ICustomerInfo interface. Em seguida, cada
membro na classe usa a palavra-chave como parte de sua declaração de membro para indicar Implements que
ele implementa esse membro da 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 seu projeto e chame o testImplements
procedimento .
Sub HandleUpdateComplete()
' This is the event handler for the UpdateComplete event.
MsgBox("Update is complete.")
End Sub
Confira também
Implementações
Instrução Interface
Interfaces
Instrução Imports (tipo e namespace .NET)
27/09/2021 • 4 minutes to read
Syntax
Imports [ aliasname = ] namespace
' -or-
Imports [ aliasname = ] [Link]
Partes
T ERM O DEF IN IÇ Ã O
Comentários
A Imports instrução permite que os tipos contidos em um namespace específico sejam referenciados
diretamente.
Você pode fornecer um único nome de namespace ou uma cadeia de caracteres de namespaces aninhados.
Cada namespace aninhado é separado do próximo namespace de nível mais alto por um ponto ( . ), como
ilustra o exemplo a seguir:
Imports [Link]
Cada arquivo de origem pode conter qualquer número de Imports instruções. Eles devem seguir qualquer
declaração de opção, como a Option Strict instrução, e devem preceder quaisquer declarações de elemento de
programação, Module como Class instruções or.
Você pode usar Imports somente no nível de arquivo. Isso significa que o contexto de declaração para
importação deve ser um arquivo de origem e não pode ser um namespace, classe, estrutura, módulo, interface,
procedimento ou bloco.
Observe que a Imports instrução não torna elementos de outros projetos e assemblies disponíveis para seu
projeto. A importação não tem o lugar de definir uma referência. Ele apenas remove a necessidade de qualificar
nomes que já estão disponíveis para seu projeto. Para obter mais informações, consulte "importando elementos
continentes" em referências a elementos declarados.
NOTE
você pode definir instruções implícitas Imports usando a página referências, Project Designer (Visual Basic). Para obter
mais informações, consulte como: Adicionar ou remover namespaces importados (Visual Basic).
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 que são declarados em um ou mais namespaces. Para obter mais
informações e um exemplo, consulte "qualificando um nome de elemento" em referências a elementos
declarados.
Você não deve declarar um membro no nível de módulo com o mesmo nome de aliasname . se você fizer isso,
o compilador Visual Basic usará aliasname apenas para o membro declarado e não o reconhecerá como um
alias de importação.
Embora a sintaxe usada para declarar um alias de importação seja como a usada para importar um prefixo de
namespace XML, os resultados são diferentes. Um alias de importação pode ser usado como uma expressão em
seu código, enquanto um prefixo de namespace XML pode ser usado somente em literais XML ou propriedades
de eixo XML como o prefixo para um elemento qualificado ou nome de 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. Elementos de contêiner incluem classes, estruturas, módulos,
interfaces e enumerações.
O escopo dos elementos disponibilizados por uma Imports instrução depende se você especificar element . Se
você especificar somente namespace , todos os membros nomeados exclusivamente desse namespace e os
membros dos elementos de contêiner nesse 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 retorna todas as pastas no diretório C \ : usando a DirectoryInfo classe:
O código não tem Imports instruções na parte superior do arquivo. Portanto, as DirectoryInfo StringBuilder
referências, e CrLf são totalmente qualificadas com os namespaces.
Public Function GetFolders() As String
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New [Link]
Return [Link]
End Function
Exemplo 2
O exemplo a seguir inclui Imports instruções para os namespaces referenciados. Portanto, os tipos não
precisam ser totalmente qualificados com os namespaces.
Return [Link]
End Function
Exemplo 3
O exemplo a seguir inclui Imports instruções que criam aliases para os namespaces referenciados. Os tipos são
qualificados com os aliases.
Return [Link]
End Function
Exemplo 4
O exemplo a seguir inclui Imports instruções que criam aliases para os tipos referenciados. Os aliases são
usados para especificar os tipos.
Return [Link]
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)
27/09/2021 • 4 minutes to read
Importa prefixos de namespace XML para uso em literais XML e propriedades do eixo XML.
Syntax
Imports <xmlns:xmlNamespacePrefix = "xmlNamespaceName">
Partes
xmlNamespacePrefix
Opcional. A cadeia de caracteres pela qual os elementos XML e atributos podem se referir a xmlNamespaceName .
Se nenhum xmlNamespacePrefix for fornecido, o namespace XML importado será o namespace XML padrão.
Deve ser um identificador XML válido. Para obter mais informações, consulte Nomes de elementos e atributos
XML declarados.
xmlNamespaceName
Obrigatórios. A cadeia de caracteres que identifica o namespace XML que está sendo importado.
Comentários
Você pode usar a instrução para definir namespaces XML globais que podem ser usados com literais XML e
propriedades do eixo XML ou como Imports parâmetros passados para o GetXmlNamespace operador. (Para
obter informações sobre como usar a instrução para importar um alias que pode ser usado em que os nomes
de tipo são usados em seu código, consulte Imports Instrução Imports (Namespacee Tipo do .NET) .) A sintaxe
para declarar um namespace XML usando a Imports instrução é idêntica à sintaxe usada em XML. Portanto,
você pode copiar uma declaração de namespace de um arquivo XML e usá-la em uma Imports instrução .
Prefixos de namespace XML são úteis quando você deseja criar repetidamente elementos XML que são do
mesmo namespace. O prefixo de namespace XML declarado com a instrução é global no sentido de que ele
Imports está disponível para todo o código no arquivo. Você pode usá-lo ao criar literais de elemento XML e ao
acessar propriedades do eixo XML. Para obter mais informações, consulte Propriedades literais de elemento
XML e eixo XML.
Se você definir um namespace XML global sem um prefixo de namespace (por exemplo, ), esse
Imports <xmlns="[Link] namespace será considerado o namespace XML padrão. O namespace
XML padrão é usado para qualquer literal de elemento XML ou propriedades do eixo de atributo XML que não
especificam explicitamente um namespace. O namespace padrão também será usado se o namespace
especificado for o namespace vazio (ou seja, xmlns="" ). O namespace XML padrão não se aplica a atributos
XML em literais XML ou a propriedades do eixo de atributo XML que não têm um namespace.
Namespaces XML definidos em um literal XML, que são chamados de namespaces XML locais, têm precedência
sobre namespaces XML definidos pela instrução Imports como globais. Namespaces XML definidos pela
instrução têm Imports precedência sobre namespaces XML importados para um Visual Basic projeto. Se um
literal XML definir um namespace XML, esse namespace local não se aplicará a expressões inseridas.
Os namespaces XML globais seguem as mesmas regras de definição e de definição que .NET Framework
namespaces. Como resultado, você pode incluir uma instrução para definir um namespace XML global em
qualquer lugar em que possa importar um Imports namespace .NET Framework dados. Isso inclui arquivos de
código e namespaces importados no nível do projeto. Para obter informações sobre namespaces importados no
nível do projeto, consulte Página referências, Project Designer de Visual Basic).
Cada arquivo de origem pode conter qualquer número de Imports instruções. Eles devem seguir declarações
de opção, como a instrução , e devem preceder declarações de elemento Option Strict de programação, como
Module instruções ou Class .
Exemplo 1
O exemplo a seguir importa um namespace XML padrão e um namespace XML identificado com o prefixo ns .
Em seguida, ele cria literais XML que usam ambos os namespaces.
Module Module1
Sub Main()
' Create element by using the default global XML namespace.
Dim inner = <innerElement/>
' Create element by using both the default global XML namespace
' and the namespace identified with the "ns" prefix.
Dim outer = <ns:outer>
<ns:innerElement></ns:innerElement>
<siblingElement></siblingElement>
<%= inner %>
</ns:outer>
End Module
<ns:outer xmlns="[Link]
xmlns:ns="[Link]
<ns:innerElement></ns:innerElement>
<siblingElement></siblingElement>
<innerElement />
</ns:outer>
Exemplo 2
O exemplo a seguir importa o prefixo de namespace XML ns . Em seguida, ele cria um literal XML que usa o
prefixo de namespace e exibe o formulário final do elemento.
' Place Imports statements at the top of your program.
Imports <xmlns:ns="[Link]
Class TestClass1
Dim test =
<ns:outer>
<ns:middle xmlns:ns="[Link]
<ns:inner1/>
<%= inner2 %>
</ns:middle>
</ns:outer>
End Class
<ns:outer xmlns:ns="[Link]
<ns:middle xmlns:ns="[Link]
<ns:inner1 />
<inner2 xmlns="[Link] />
</ns:middle>
</ns:outer>
Observe que o compilador converteu o prefixo de namespace XML de um prefixo global em uma definição de
prefixo local.
Exemplo 3
O exemplo a seguir importa o prefixo de namespace XML ns . 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 .
Class TestClass4
End Class
Confira também
Literal do Elemento XML
Propriedades do eixo XML
Nomes de elementos e atributos XML declarados
Operador GetXmlNamespace
Instrução Inherits
27/09/2021 • 2 minutes to read
Faz com que a classe ou interface atual herde os atributos, variáveis, propriedades, procedimentos e eventos de
outra classe ou conjunto de interfaces.
Syntax
Inherits basetypenames
Partes
T ERM O DEF IN IÇ Ã O
-ou-
Comentários
Se usada, a instrução deve ser a primeira linha sem comentário em Inherits branco em uma definição de
classe ou interface. Ele deve seguir imediatamente a Class Interface instrução ou .
Você só pode Inherits usar 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 Inherits instrução , você poderá especificar apenas uma
classe base.
Uma classe não pode herdar de uma classe aninhada dentro dela.
Herança de interface. Se uma interface usar a Inherits instrução , você poderá especificar uma ou
mais interfaces base. Você pode herdar de duas interfaces mesmo que cada uma defina 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 com um nível de acesso mais restritivo. Por exemplo,
uma Public interface não pode herdar de uma Friend interface.
Uma interface não pode herdar de uma interface aninhada dentro dela.
Um exemplo de herança de classe no .NET Framework é a ArgumentException classe , que herda da classe
SystemException . Isso fornece a ArgumentException todas as propriedades e procedimentos predefinidos
exigidos pelas exceções do sistema, como a propriedade e o método Message ToString .
Um exemplo de herança de interface no .NET Framework é a ICollection interface , que herda da interface
IEnumerable . Isso faz ICollection com que herde a definição do enumerador necessário para percorrer uma
coleção.
Exemplo 1
O exemplo a seguir usa a instrução para mostrar como uma classe chamada pode herdar todos os Inherits
membros de uma classe base chamada thisClass anotherClass .
Exemplo 2
O exemplo a seguir mostra a herança de várias interfaces.
A interface chamada agora inclui todas as definições nas interfaces , e Os membros herdados fornecem
respectivamente para comparação específica do tipo de dois objetos, liberando recursos alocados e expressando
o valor de um objeto thisInterface IComparable como um IDisposable IFormattable String . Uma classe que
implementa deve thisInterface implementar cada membro de cada interface base.
Confira também
MustInherit
NotInheritable
Objetos e classes
Noções básicas de herança
Interfaces
Instrução Interface (Visual Basic)
28/09/2021 • 6 minutes to read
Declara o nome de uma interface e apresenta as definições dos membros que a interface compreende.
Sintaxe
[ <attributelist> ] [ accessmodifier ] [ Shadows ] _
Interface name [ ( Of typelist ) ]
[ Inherits interfacenames ]
[ [ modifiers ] Property membername ]
[ [ modifiers ] Function membername ]
[ [ modifiers ] Sub membername ]
[ [ modifiers ] Event membername ]
[ [ modifiers ] Interface membername ]
[ [ modifiers ] Class membername ]
[ [ modifiers ] Structure membername ]
End Interface
Partes
T ERM O DEF IN IÇ Ã O
- Publicada
- Protected
- Público
- Pessoal
- Amigo protegido
- Particular protegido
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 o 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, consulte objetos e classes e interfaces.
Você pode usar Interface somente no nível de namespace ou de módulo. Isso significa que o contexto de
declaração para uma interface deve 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.
Interfaces padrão para acesso Friend . Você pode ajustar seus níveis de acesso com os modificadores de acesso.
Para obter mais informações, consulte níveis de acesso em Visual Basic.
Regras
Aninhando interfaces. Você pode definir uma interface dentro de outra. A interface externa é chamada
de interface que a contém e a interface interna é chamada de interface aninhada.
Declaração de membro. Quando você declara uma propriedade ou um procedimento como membro
de uma interface, você está definindo apenas a assinatura dessa propriedade ou procedimento. Isso inclui
o tipo de elemento (Propriedade ou procedimento), seus parâmetros e tipos de parâmetro e seu tipo de
retorno. Por isso, a definição de membro usa apenas uma linha de código e encerrando instruções como
End Function ou End Property não são válidas em uma interface.
Por outro lado, quando você define uma enumeração ou uma estrutura, ou uma classe ou interface
aninhada, é necessário incluir seus membros de dados.
Modificadores de membro. Você não pode usar nenhum modificador de acesso ao definir membros
de módulo, nem pode especificar qualquer modificador compartilhado ou de procedimento, exceto
sobrecargas. Você pode declarar qualquer membro com Shadowse pode usar Default ao definir uma
propriedade, bem como ReadOnly ou WriteOnly.
Herda. Se a interface usar a instrução Inherits, você poderá especificar uma ou mais interfaces base. Você
pode herdar de duas interfaces, mesmo se cada uma delas definir 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 está sendo implementado.
Uma interface não pode herdar de outra interface com um nível de acesso mais restritivo. Por exemplo,
uma Public interface não pode herdar de uma Friend interface.
Uma interface não pode herdar de uma interface aninhada dentro dela.
Implementação. Quando uma classe usa a instrução Implements para implementar essa interface, ela
deve implementar todos os membros definidos na interface. Além disso, cada assinatura no código de
implementação deve corresponder exatamente à assinatura correspondente definida nesta interface. No
entanto, o nome do membro no código de implementação não precisa corresponder ao nome do
membro conforme definido na interface.
Quando uma classe está implementando um procedimento, ela não pode designar o procedimento como
Shared .
Propriedade padrão. Uma interface pode especificar, no máximo, uma propriedade como sua
propriedade padrão, que pode ser referenciada sem usar o nome da propriedade. Você especifica tal
propriedade declarando-a com o modificador padrão .
Observe que isso significa que uma interface pode definir uma propriedade padrão somente se ela não
herda nenhuma.
Comportamento
Nível de acesso. Todos os membros de interface implicitamente têm acesso público . 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 de seus membros poderá
depender 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.
Public Interface IDemo
Sub DoSomething()
End Interface
Public Class implementIDemo
Implements IDemo
Private Sub DoSomething() Implements [Link]
End Sub
End Class
Dim varAsInterface As IDemo = New implementIDemo()
Dim varAsClass As implementIDemo = New implementIDemo()
Se você acessar membros de classe por varAsInterface meio de , todos eles terão acesso público. No
entanto, se você acessar membros por varAsClass meio do , o procedimento terá acesso Sub
doSomething privado.
Escopo. Uma interface está no escopo em todo seu namespace, classe, estrutura ou módulo.
O escopo de cada membro da interface é toda a interface.
Vida. Uma interface em si não tem um tempo de vida, nem seus membros. 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, consulte
"Tempo de vida" na instrução Class.
Exemplo
O exemplo a seguir usa a Interface instrução para definir uma interface chamada thisInterface , que deve
ser implementada com uma Property instrução e uma Function instrução .
Observe que as Property instruções Function e não introduzem blocos que terminam End Property com e
dentro da interface End Function . A interface define apenas as assinaturas de seus membros. Os Property
Function blocos completos e aparecem em uma classe que implementa thisInterface .
Veja 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
27/09/2021 • 2 minutes to read
Substitui um número especificado de caracteres em uma variável String por caracteres de outra cadeia de
caracteres.
Syntax
Mid( _
ByRef Target As String, _
ByVal Start As Integer, _
Optional ByVal Length As Integer _
) = StringExpression
Partes
Target
Obrigatórios. Nome da String variável a ser modificada.
Start
Obrigatórios. Expressão Integer . Posição do caractere Target em em que a substituição de texto começa.
Start usa um índice baseado em um.
Length
Opcional. Expressão Integer . Número de caracteres a substituir. Se omitido, todos String são usados.
StringExpression
Obrigatórios. String expressão que substitui parte de Target .
Exceções
T IP O DE EXC EÇ Ã O C O N DIÇ Ã O
Comentários
O número de caracteres substituídos é sempre menor ou igual ao número de caracteres em Target .
Visual Basic tem uma Mid função e uma Mid instrução . Esses elementos operam em um número especificado
de caracteres em uma cadeia de caracteres, mas a função retorna os caracteres enquanto a Mid Mid instrução
substitui os caracteres. Para obter mais informações, consulte Mid.
NOTE
A MidB instrução de versões anteriores Visual Basic substitui uma substring em bytes, em vez de caracteres. Ele é usado
principalmente para converter cadeias de caracteres em aplicativos DBCS (conjunto de caracteres de byte duplo). Todas
Visual Basic cadeias de caracteres estão em Unicode e MidB não há mais suporte.
Exemplo
Este exemplo usa a instrução para substituir um número especificado de caracteres em uma variável de cadeia
de Mid caracteres por caracteres de outra cadeia de caracteres.
Requisitos
Namespace: [Link]
Módulo: Strings
Confira também
Mid
Cadeias de caracteres
Introdução a cadeias de caracteres no Visual Basic
Instrução Module
27/09/2021 • 3 minutes to read
Declara o nome de um módulo e apresenta a definição das variáveis, propriedades, eventos e procedimentos
que o módulo compreende.
Syntax
[ <attributelist> ] [ accessmodifier ] Module name
[ statements ]
End Module
Partes
attributelist
Opcional. Consulte a lista de atributos.
accessmodifier
Opcional. Um dos seguintes pode ser feito:
Público
Friend
Consulte níveis de acesso em Visual Basic.
name
Obrigatórios. Nome deste módulo. Consulte nomes de elementos declarados.
statements
Opcional. Instruções que definem as variáveis, propriedades, eventos, procedimentos e tipos aninhados deste
módulo.
End Module
Encerra a Module definição.
Comentários
Uma Module instrução 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 ou atribuído a uma variável. Os módulos não
dão suporte à herança ou à implementação de 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ê pode usar Module somente no nível de namespace. Isso significa que o contexto de declaração para um
módulo deve ser um arquivo ou namespace de origem e não pode ser uma classe, estrutura, módulo, interface,
procedimento ou bloco. Não é possível aninhar um módulo dentro de outro módulo ou dentro de qualquer 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 do seu programa. Como seus membros são todos Shared , eles
também têm tempos de vida iguais aos do programa.
Os módulos são padrão para acesso Friend . Você pode ajustar seus níveis de acesso com os modificadores de
acesso. Para obter mais informações, consulte níveis de acesso em Visual Basic.
Todos os membros de um módulo são implicitamente Shared .
Classes e módulos
Esses elementos têm muitas semelhanças, mas também há algumas diferenças importantes.
Terminologia. as versões anteriores do Visual Basic reconhecem dois tipos de módulos: módulos de
classe (arquivos. cls) e módulos padrão (arquivos. bas). A versão atual chama essas classes e módulos,
respectivamente.
Membros compar tilhados. Você pode controlar se um membro de uma classe é um membro
compartilhado ou de instância.
Orientação do objeto. As classes são orientadas a objeto, mas os módulos não são. Portanto, somente
classes podem ser instanciadas como objetos. Para obter mais informações, consulte objetos e classes.
Regras
Modificadores. Todos os membros do módulo são compartilhadosimplicitamente. Você não pode usar
a Shared palavra-chave ao declarar um membro e não pode alterar o status compartilhado de nenhum
membro.
Herda. Um módulo não pode herdar de nenhum tipo diferente de Object , do qual todos os módulos
herdam. Em particular, um módulo não pode herdar de outro.
Você não pode usar a instrução Inherits em uma definição de módulo, até mesmo para especificar Object
.
Propriedade padrão. Você não pode definir nenhuma propriedade padrão em um módulo. Para obter
mais informações, consulte padrão.
Comportamento
Nível de acesso. Dentro de um módulo, você pode declarar cada membro com seu próprio nível de
acesso. Os membros do módulo assumem como padrão acesso público , Exceto variáveis e constantes,
que assumem como padrão o acesso privado . Quando um módulo tem acesso mais restrito do que um
de seus membros, o nível de acesso do módulo especificado tem precedência.
Escopo. Um módulo está no escopo em todo o namespace.
O escopo de cada membro de módulo é o módulo inteiro. Observe que todos os membros sofrem a
promoção de tipos, o que faz com que seu escopo seja promovido para o namespace que contém o
módulo. Para obter mais informações, consulte promoção de tipos.
Aprovação. Você pode ter vários módulos em um projeto e pode declarar membros com o mesmo
nome em dois ou mais módulos. No entanto, você deve qualificar qualquer referência a tal membro com
o nome do módulo apropriado se a referência for de fora desse módulo. Para obter mais informações,
consulte referências a elementos declarados.
Exemplo
Public Module thisModule
Sub Main()
Dim userName As String = InputBox("What is your name?")
MsgBox("User name is " & userName)
End Sub
' Insert variable, property, procedure, and event declarations.
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
27/09/2021 • 4 minutes to read
Declara o nome de um namespace e faz com que o código-fonte que segue a declaração seja compilado dentro
desse namespace.
Syntax
Namespace [Global.] { name | [Link] }
[ componenttypes ]
End Namespace
Partes
Global Opcional. Permite que você defina um namespace fora do namespace raiz do seu projeto. Consulte
Namespaces no Visual Basic.
name Necessário. Um nome exclusivo que identifica o namespace. Deve ser um identificador Visual Basic válido.
Para obter mais informações, consulte Nomes de elemento declarados.
componenttypes Opcional. Elementos que comem o namespace. Eles incluem, mas não estão limitados a
enumerações, estruturas, interfaces, classes, módulos, delegados e outros namespaces.
End Namespace Encerra um Namespace bloco.
Comentários
Namespaces são usados como um sistema organizacional. Eles fornecem uma maneira 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 um elemento de
programação para ter o tipo de dados de um namespace.
Todos os elementos de programação declarados após uma Namespace instrução pertencem a esse namespace.
Visual Basic continua compilando elementos no último namespace declarado até encontrar uma End Namespace
instrução ou outra Namespace instrução.
Se um namespace já estiver definido, mesmo fora do projeto, você poderá adicionar elementos de programação
a ele. Para fazer isso, use uma Namespace instrução para direcionar Visual Basic para compilar elementos nesse
namespace.
Você pode usar uma Namespace instrução somente no nível de arquivo ou namespace. Isso significa que o
contexto de declaração para um namespace deve ser um arquivo de origem ou outro namespace e não pode ser
uma classe, estrutura, módulo, interface ou procedimento. Para obter mais informações, consulte Contextos de
declaração e níveis de acesso padrão.
Você pode declarar um namespace dentro de outro. Não há nenhum 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
Namespaces são tratados como se eles têm um Public nível de acesso. Um namespace pode ser acessado do
código em qualquer lugar do mesmo projeto, de outros projetos que referenciam o projeto e de qualquer
assembly criado do projeto.
Elementos de programação declarados no nível do namespace, o que significa que em um namespace, mas não
dentro de nenhum outro elemento, podem ter Public ou Friend acessar. Se não for especificado, o nível de
acesso desse elemento usará Friend por padrão. Os elementos que você pode declarar no nível do namespace
incluem classes, estruturas, módulos, interfaces, enumerações e delegados. Para obter mais informações,
consulte Contextos de declaração e níveis de acesso padrão.
Namespace raiz
Todos os nomes de namespace em seu projeto são baseados em um namespace raiz. Visual Studio atribui o
nome do projeto como o namespace raiz padrão para todo o código em seu projeto. Por exemplo, se o projeto
for chamado Payroll , seus elementos de programação pertencerão ao namespace Payroll . Se você declarar
Namespace funding , o nome completo desse namespace será [Link] .
Se você quiser especificar um namespace existente em uma instrução, como no exemplo de classe de lista
genérica, poderá definir o namespace raiz Namespace como um valor nulo. Para fazer isso, clique Project
Propriedades no menu Project e des limpe a entrada Namespace raiz para que a caixa seja vazia. Se você
não fez isso no exemplo de classe de lista genérica, o compilador Visual Basic seria um novo namespace dentro
do projeto , com o [Link] Payroll nome completo de
[Link] .
Como alternativa, você pode usar a Global palavra-chave para se referir a elementos de namespaces definidos
fora do projeto. Isso permite que você mantenha o nome do projeto como o namespace raiz. Isso reduz a
chance de mesclar involutionamente seus elementos de programação junto com aqueles de namespaces
existentes. Para obter mais informações, consulte a seção "Palavra-chave global em nomes totalmente
qualificados" em Namespaces no Visual Basic.
A Global palavra-chave também pode ser usada em uma instrução Namespace. Isso permite que você defina
um namespace fora do namespace raiz do seu projeto. Para obter mais informações, consulte a seção "Palavra-
chave global em instruções de namespace" em Namespaces no Visual Basic.
Solucionando problemas. O namespace raiz pode levar a concatenações inesperadas de nomes de
namespace. Se você fizer referência a namespaces definidos fora do projeto, o compilador Visual Basic poderá
interpretá-los como namespaces aninhados no namespace raiz. Nesse caso, o compilador não reconhece
nenhum tipo que já tenha sido definido nos namespaces externos. Para evitar isso, de definido seu namespace
raiz como um valor nulo, conforme descrito em "Namespace raiz", ou use a palavra-chave para acessar
elementos Global de namespaces externos.
Atributos e modificadores
Não é possível 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.
Você não pode aplicar nenhum modificador de acesso ou procedimento ou qualquer outro modificador a um
namespace. Como não é um tipo, esses modificadores não são significativos.
Exemplo 1
O exemplo a seguir declara dois namespaces, um aninhado no outro.
Namespace n1
Namespace n2
Class a
' Insert class definition.
End Class
End Namespace
End Namespace
Exemplo 2
O exemplo a seguir declara vários namespaces aninhados em uma única linha e é equivalente ao exemplo
anterior.
Namespace n1.n2
Class a
' Insert class definition.
End Class
End Namespace
Exemplo 3
O exemplo a seguir acessa a classe definida nos exemplos anteriores.
Exemplo 4
O exemplo a seguir define o esqueleto de uma nova classe de lista genérica e a adiciona ao
[Link] namespace .
Namespace [Link]
Class specialSortedList(Of T)
Inherits List(Of T)
' Insert code to define the special generic list class.
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)
27/09/2021 • 8 minutes to read
Habilita uma rotina de tratamento de erros e especifica o local da rotina dentro de um procedimento; também
pode ser usado para desabilitar uma rotina de tratamento de erros. A On Error instrução é usada no
tratamento de erros não estruturado e pode ser usada em vez de manipulação de exceção estruturada. A
manipulação de exceção estruturada é criada no .net, geralmente é mais eficiente e, portanto, é recomendada ao
lidar com erros de tempo de execução em seu aplicativo.
Sem tratamento de erro ou tratamento de exceção, qualquer erro de tempo de execução que ocorra é fatal: uma
mensagem de erro é exibida e a execução é interrompida.
NOTE
A Error palavra-chave também é usada na instrução de erro, que tem suporte para compatibilidade com versões
anteriores.
Syntax
On Error { GoTo [ line | 0 | -1 ] | Resume Next }
Partes
T ERM O DEF IN IÇ Ã O
Comentários
NOTE
É recomendável que você use manipulação de exceção estruturada em seu código sempre que possível, em vez de usar a
manipulação de exceção não estruturada e a On Error instrução. Para obter mais informações, consulte Instrução
Try...Catch...Finally.
Um manipulador de erro "habilitado" é um que é ativado por uma On Error instrução. Um manipulador de erro
"ativo" é um manipulador habilitado que está no processo de tratamento de um erro.
Se ocorrer um erro enquanto um manipulador de erro estiver ativo (entre a ocorrência do erro e uma Resume
Exit Sub instrução,, Exit Function ou Exit Property ), o manipulador de erros do procedimento atual não
poderá manipular o erro. O controle retorna para o procedimento de chamada.
Se o procedimento de chamada tiver um manipulador de erro habilitado, ele será ativado para manipular o erro.
Se o manipulador de erro do procedimento de chamada também estiver ativo, o controle passa de volta pelos
procedimentos de chamada anteriores até que um manipulador de erro habilitado, mas inativo, seja encontrado.
Se nenhum manipulador de erro desse tipo for encontrado, o erro será fatal no ponto em que ele realmente
ocorreu.
Cada vez que o manipulador de erro passa o controle de volta para um procedimento de chamada, esse
procedimento torna-se o procedimento atual. Depois que um erro é manipulado por um manipulador de erro
em qualquer procedimento, a execução é retomada no procedimento atual no ponto designado pela Resume
instrução.
NOTE
Uma rotina de tratamento de erros não é um Sub procedimento ou um Function procedimento. É uma seção de
código marcada por um rótulo de linha ou um número de linha.
Propriedade Number
As rotinas de tratamento de erros dependem do valor na Number Propriedade do Err objeto para determinar a
causa do erro. A rotina deve testar ou salvar valores de propriedade relevantes no Err objeto antes que
qualquer outro erro possa ocorrer ou antes que um procedimento que possa causar um erro seja chamado. Os
valores de propriedade no Err objeto refletem apenas o erro mais recente. A mensagem de erro associada a
[Link] está contida em [Link] .
Instrução Throw
Um erro que é gerado com o [Link] método define a Exception propriedade para uma instância recém-
criada da Exception classe. Para oferecer suporte à geração de exceções de tipos de exceção derivadas, Throw há
suporte para uma instrução no idioma. Isso usa um único parâmetro que é a instância de exceção a ser gerada.
O exemplo a seguir mostra como esses recursos podem ser usados com o suporte para manipulação de
exceção existente:
Observe que a On Error GoTo instrução intercepta todos os erros, independentemente da classe de exceção.
Se houver erro, retome avançar
On Error Resume Next faz com que a execução continue com a instrução imediatamente após a instrução que
causou o erro de tempo de execução, ou com a instrução imediatamente após a chamada mais recente do
procedimento que contém a On Error Resume Next instrução. Essa instrução permite que a execução continue
apesar de um erro de tempo de execução. Você pode colocar a rotina de tratamento de erros em que o erro
ocorreria em vez de transferir o controle para outro local dentro do procedimento. Uma On Error Resume Next
instrução se torna inativa quando outro procedimento é chamado, portanto, você deve executar uma
On Error Resume Next instrução em cada rotina chamada se desejar tratamento de erro embutido dentro dessa
rotina.
NOTE
A On Error Resume Next construção pode ser preferível On Error GoTo ao manipular erros gerados durante o acesso
a outros objetos. Err A verificação após cada interação com um objeto remove a ambiguidade sobre qual objeto foi
acessado pelo código. Você pode ter certeza de qual objeto colocou o código de erro em [Link] , bem como qual
objeto gerou originalmente o erro (o objeto especificado em [Link] ).
Aqui, o código de tratamento de erros segue a Exit Sub instrução e precede a End Sub instrução para separá-
la do fluxo de procedimento. Você pode posicionar o código de tratamento de erros em qualquer lugar em um
procedimento.
Cau t i on
erros do sistema durante chamadas para Windows DLLs (bibliotecas de vínculo dinâmico) não geram exceções
e não podem ser interceptados com Visual Basic interceptação de erros. Ao chamar as funções de DLL, você
deve verificar cada valor de retorno para êxito ou falha (de acordo com as especificações de API) e, em caso de
falha, verificar o valor na Err Propriedade do objeto LastDLLError .
Exemplo
Este exemplo primeiro usa a On Error GoTo instrução 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, em seguida, o controle é retornado para a instrução que causou o
erro. A On Error GoTo 0 instrução desativa o trapping de erros. Em seguida, a On Error Resume Next instrução é
usada para adiar o trapping de erros para que o contexto para o erro gerado pela próxima instrução possa ser
conhecido para determinados. Observe que [Link] é usado para limpar as Err Propriedades do objeto
depois que o erro é manipulado.
Requisitos
Namespace: Microsoft. VisualBasic
Assembly: biblioteca de tempo de execução Visual Basic (em [Link])
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
27/09/2021 • 6 minutes to read
Declara o símbolo do operador, os operandos e o código que definem um procedimento de operador em uma
classe ou estrutura.
Syntax
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
Partes
attrlist
Opcional. Consulte a lista de atributos.
Public
Obrigatórios. Indica que este procedimento de operador tem acesso público .
Overloads
Opcional. Veja sobrecargas.
Shared
Obrigatórios. Indica que esse procedimento de operador é um procedimento compartilhado .
Shadows
Opcional. Consulte Shadows.
Widening
Necessário para um operador de conversão, a menos que você especifique Narrowing . Indica que este
procedimento de operador define uma conversão de ampliação . Consulte "conversões de alargamento e
estreitamento" nesta página de ajuda.
Narrowing
Necessário para um operador de conversão, a menos que você especifique Widening . Indica que este
procedimento de operador define uma conversão de restrição . Consulte "conversões de alargamento e
estreitamento" nesta página de ajuda.
operatorsymbol
Obrigatórios. O símbolo ou identificador do operador que este procedimento de operador define.
operand1
Obrigatórios. O nome e o tipo do operando único de um operador unário (incluindo um operador de
conversão) ou o operando esquerdo de um operador binário.
operand2
Necessário para operadores binários. O nome e o tipo do operando direito de um operador binário.
operand1 e operand2 têm a seguinte sintaxe e partes:
[ ByVal ] operandname [ As operandtype ]
PA RT E DESC RIÇ Ã O
type
Opcional, a menos que Option Strict seja On . Tipo de dados do valor que o procedimento do operador
retorna.
statements
Opcional. Bloco de instruções que o procedimento de operador executa.
returnvalue
Obrigatórios. O valor que o procedimento do operador retorna para o código de chamada.
End Operator
Obrigatórios. Encerra a definição deste procedimento de operador.
Comentários
Você pode usar Operator somente em uma classe ou estrutura. Isso significa que o contexto de declaração para
um operador não pode ser um arquivo de origem, namespace, módulo, interface, procedimento ou bloco. Para
obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.
Todos os operadores devem ser Public Shared . Você não pode especificar ByRef , Optional ou ParamArray
para qualquer operando.
Você não pode usar o identificador ou símbolo do operador para manter um valor de retorno. Você deve usar a
Return instrução e deve especificar um valor. Qualquer número de Return instruções pode aparecer em
qualquer lugar no procedimento.
A definição de um operador dessa maneira é chamada de sobrecarga de operador, independentemente de você
usar ou não a Overloads palavra-chave. A tabela a seguir lista os operadores que você pode definir.
Observe que o operador = na lista binária é o operador de comparação, não o operador de atribuição.
Ao definir CType o, você deve especificar Widening ou Narrowing .
Pares correspondentes
Você deve definir certos operadores como pares correspondentes. Se você definir qualquer um dos dois
operadores, também deverá definir o outro. Os pares correspondentes são os seguintes:
= e <>
> e <
>= e <=
IsTrue e IsFalse
O tipo de retorno não precisa corresponder ao tipo de um dos operandos. Por exemplo, um operador de
comparação como = ou <> pode retornar Boolean mesmo se nenhum operando for Boolean .
Da mesma forma, você pode usar OrElse se tiver definido Or nos mesmos operandos, com o tipo de retorno
da classe ou estrutura, e você tiver definido IsTrue na classe ou estrutura.
Exemplo
O exemplo de código a seguir usa a instrução para definir a estrutura de uma estrutura que inclui
procedimentos de operador para os operadores Operator And , , e Or IsFalse IsTrue . And e Or cada um
pega dois operadores do tipo e do tipo de retorno abc abc . IsFalse e IsTrue cada um pega um único
operand do tipo e retorna abc Boolean . Essas definições permitem que o código de chamada use And , , e
com os AndAlso Or OrElse operadores do tipo abc .
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>
27/09/2021 • 2 minutes to read
Apresenta uma instruçã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 restrição devem ser explícitas ou se as cadeias de caracteres devem ser comparadas
como texto ou como quantidades binárias.
A Option palavra-chave pode ser usada nesses contextos:
Instrução Option Compare
Instrução Option Explicit
Instrução Option Infer
Instrução Option Strict
Confira também
Palavras-chave
Instrução Option Compare
27/09/2021 • 3 minutes to read
Declara o método padrão de comparação a ser usado ao comparar dados da cadeia de caracteres.
Syntax
Option Compare { Binary | Text }
Partes
T ERM O DEF IN IÇ Ã O
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 instrução Option Compare especifica o método de comparação de cadeia de caracteres ( Binary ou Text ). O
método de comparação de texto padrão é Binary .
A comparação Binary compara o valor de Unicode numérico de cada caractere em cadeia de caracteres. A
comparação Text compara cada caractere Unicode com base em seu sentido lexical na cultura atual.
No Microsoft Windows, a ordem de classificação é determinada pela página de código. Para obter mais
informações, consulte Páginas de Código.
No exemplo a seguir, os caracteres na página de código Inglês/Europeu (ANSI 1252) são classificados usando
Option Compare Binary , que produz uma ordem de classificação binária típica.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Quando os mesmos caracteres na mesma página de código são classificados usando Option Compare Text ,a
ordem de classificação a seguir é produzida.
(A=a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø)
NOTE
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.
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.
' Option Compare Text
[Link]("A" = "a")
' Output: True
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)
27/09/2021 • 2 minutes to read
Força a declaração explícita de todas as variáveis em um arquivo ou permite declarações implícitas de variáveis.
Syntax
Option Explicit { On | Off }
Partes
On
Opcional. Habilita a Option Explicit verificação. Se On ou Off não for especificado, o padrão será On .
Off
Opcional. Desabilita a Option Explicit verificação.
Comentários
Quando Option Explicit On ou Option Explicit aparece em um arquivo, você deve declarar explicitamente
todas as variáveis usando as Dim ReDim instruções ou. Se você tentar usar um nome de variável não declarado,
ocorrerá um erro no momento da compilação. A Option Explicit Off instrução permite a declaração implícita
de variáveis.
Se usado, a instrução Option Explicit deve aparecer em um arquivo antes de quaisquer outras instruções de
código-fonte.
NOTE
A configuração como Off geralmente não é uma prática recomendada. Você poderia digitar
Option Explicit
incorretamente um nome de variável em um ou mais locais, o que levaria a resultados inesperados na execução do
programa.
Exemplo
O exemplo a seguir usa a Option Explicit instrução para forçar a declaração explícita de todas as variáveis. A
tentativa de usar uma variável não declarada causa um erro no tempo de compilação.
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
27/09/2021 • 4 minutes to read
Syntax
Option Infer { On | Off }
Partes
T ERM O DEF IN IÇ Ã 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 Option Infer está ativo:
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 configuração Opção Estrita é definida como Off na
Página de Compilação, Project Designer (Visual Basic).
A captura de tela a seguir mostra o IntelliSense quando a opção Infer está desligada:
NOTE
Quando uma variável é declarada como um Object , o tipo de tempo de execução pode ser alterado enquanto o
programa está sendo executado. Visual Basic executa operações chamadas conversão boxing e unboxing para converter
entre um e um tipo de valor, o que Object torna a execução mais lenta. Para obter informações sobre boxing e
unboxing, consulte a Visual Basic de linguagem .
A inferência de tipo aplica-se no nível do procedimento e não fora de um procedimento em uma classe,
estrutura, módulo ou interface.
Para obter informações adicionais, consulte Inferência de tipo local.
T IP O DE DA DO S IN IC IA L IZ A DO R
ESP EC IF IC A DO ? ESP EC IF IC A DO ? EXEM P LO RESULTA DO
Exemplo 1
Os exemplos a seguir demonstram como a instrução Option Infer habilita a inferência de tipo local.
' Enable Option Infer before trying these examples.
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 .
Dim someVar = 5
[Link]([Link])
' Output:
' System.Int32
' [Link]
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
Boxing e Unboxing
Instrução Option Strict
27/09/2021 • 9 minutes to read
Restringe conversões implícitas de tipo de dados para apenas conversões de ampliação, não permite associação
tardia e não permite a digitação implícita que resulta em um Object tipo.
Syntax
Option Strict { On | Off }
Partes
T ERM O DEF IN IÇ Ã O
Comentários
Quando Option Strict On ou aparece em um Option Strict arquivo, as seguintes condições causam um erro
em tempo de compilação:
Conversões de estreitamento implícitas
Associação tardia
Digitação implícita que resulta em um tipo Object
NOTE
Nas configurações de aviso que você pode definir na Página de Compilação, Project Designer (Visual Basic), há três
configurações que correspondem às três condições que causam um erro de tempo de compilação. Para obter informações
sobre como usar essas configurações, consulte Para definir configurações de aviso no IDE posteriormente neste tópico.
A instrução desliga a verificação de erros e avisos para todas as três condições, mesmo que as configurações de
IDE associadas especifiquem para ativar esses erros Option Strict Off ou avisos. A instrução ativará a
verificação de erros e avisos para todas as três condições, mesmo que as configurações de IDE associadas
especifiquem para desativar esses erros Option Strict On ou avisos.
Se usada, a Option Strict instrução deverá aparecer antes de qualquer outra instrução de código em um
arquivo.
Quando você define Option Strict como , Visual Basic verifica se os tipos de dados são On especificados para
todos os elementos de programação. Os tipos de dados podem ser especificados explicitamente ou
especificados usando a inferência de tipo local. É recomendável especificar tipos de dados para todos os seus
elementos de programação, pelos seguintes motivos:
Ele habilita o suporte do IntelliSense para suas variáveis e parâmetros. Isso permite que você veja suas
propriedades e outros membros conforme digita o código.
Ele permite que o compilador execute a verificação de tipo. A verificação de tipo ajuda você a encontrar
instruções que podem falhar em tempo de operação devido a erros de conversão de tipo. Ele também
identifica chamadas para métodos em objetos que não são suportados por esses métodos.
Ele acelera a execução do código. Um motivo para isso é que, se você não especificar um tipo de dados
para um elemento de programação, o Visual Basic compilador atribuirá a ele o Object tipo . O código
compilado pode ter que converter entre e outros tipos de dados, o que Object reduz o desempenho.
T IP O DE DA DO S IN IC IA L IZ A DO R
ESP EC IF IC A DO ? ESP EC IF IC A DO ? EXEM P LO RESULTA DO
NOTE
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
Os exemplos a seguir demonstram erros de tempo de compilação causados por conversões implícitas de tipo
que são conversões redutoras. Essa categoria de erros corresponde à condição de conversão implícita na
página de compilação .
Exemplo 2
O exemplo a seguir demonstra um erro de tempo de compilação causado pela associação tardia. Essa categoria
de erros corresponde à associação tardia; a chamada pode falhar em condição de tempo de execução na
página de compilação .
Exemplo 3
Os exemplos a seguir demonstram erros causados por variáveis que são declaradas com um tipo implícito de
Object . Essa categoria de erros corresponde ao tipo implícito; objeto assumido condição na página de
compilação .
' If Option Strict is on and Option Infer is off,
' this Dim statement without an As clause
' causes a compile-time error.
Dim cardReaders = 5
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
27/09/2021 • 6 minutes to read
Declara o nome de uma propriedade e os procedimentos de propriedade usados para armazenar e recuperar o
valor da propriedade.
Syntax
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ] [ Iterator ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
[ <attributelist> ] [ accessmodifier ] Get
[ statements ]
End Get
[ <attributelist> ] [ accessmodifier ] Set ( ByVal value As returntype [, parameterlist ] )
[ statements ]
End Set
End Property
- or -
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
Partes
attributelist
Opcional. Lista de atributos que se aplicam a esta propriedade ou Get Set procedimento. Consulte a
lista de atributos.
Default
Opcional. Especifica que essa propriedade é a propriedade padrão para a classe ou estrutura na qual ela
está definida. As propriedades padrão devem aceitar parâmetros e podem ser definidas e recuperadas
sem especificar o nome da propriedade. Se você declarar a propriedade como Default , não poderá usar
Private na propriedade ou em qualquer um de seus procedimentos de propriedade.
accessmodifier
Opcional na Property instrução e em no máximo uma das Get Set instruções e. Um dos seguintes
pode ser feito:
Público
Protected
Friend
Privado
Amigo Protegido
Particular protegido
Consulte níveis de acesso em Visual Basic.
propertymodifiers
NotOverridable Overrides
Shared
Opcional. Lista de nomes de variáveis locais que representam os parâmetros dessa propriedade e
possíveis parâmetros adicionais do Set procedimento. Consulte a lista de parâmetros.
returntype
Obrigatório se Option Strict for On . Tipo de dados do valor retornado por essa propriedade.
Implements
Opcional. Indica que essa propriedade implementa uma ou mais propriedades, cada uma definida em
uma interface implementada por essa propriedade que contém a classe ou a estrutura. Consulte a
instrução Implements.
implementslist
Necessário se Implements for fornecido. Lista de propriedades que estão sendo implementadas.
implementedproperty [ , implementedproperty ... ]
PA RT E DESC RIÇ Ã O
Get
Opcional. Bloco de instruções a serem executadas dentro Get do Set procedimento ou.
End Get
Comentários
A Property instrução apresenta a declaração de uma propriedade. Uma propriedade pode ter um Get
procedimento (somente leitura), um Set procedimento (somente gravação) ou ambos (leitura-gravação). Você
pode omitir Get o Set procedimento e ao usar uma propriedade implementada automaticamente. Para obter
mais informações, consulte Propriedades autoimplementadas.
Você pode usar Property somente no nível de classe. Isso significa que o contexto de declaração para uma
propriedade 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.
Por padrão, as propriedades usam acesso público. Você pode ajustar o nível de acesso de uma propriedade com
um modificador de acesso na Property instrução e, opcionalmente, pode ajustar um de seus procedimentos de
propriedade para um nível de acesso mais restritivo.
Visual Basic passa um parâmetro para o Set procedimento durante as atribuições de propriedade. Se você não
fornecer um parâmetro para Set , o IDE (ambiente de desenvolvimento integrado) usará um parâmetro
implícito chamado value . Esse parâmetro contém o valor a ser atribuído à propriedade. Normalmente, você
armazena esse valor em uma variável local privada e retorna-o sempre que o Get procedimento é chamado.
Regras
Níveis de acesso misto. Se você estiver definindo uma propriedade de leitura/gravação, poderá
opcionalmente especificar um nível de acesso diferente para o Get ou o Set procedimento, mas não
ambos. Se você fizer isso, o nível de acesso do 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
Set procedimento Private , mas não Public .
Se você estiver definindo uma ReadOnly WriteOnly propriedade ou, o procedimento de propriedade
única ( Get ou Set , respectivamente) representará toda a propriedade. Você não pode declarar um
nível de acesso diferente para tal procedimento, pois isso definiria dois níveis de acesso para a
propriedade.
Tipo de retorno. A Property instrução pode declarar o tipo de dados do valor que ele retorna. Você
pode especificar qualquer tipo de dados ou o nome de uma enumeração, estrutura, classe ou interface.
Se você não especificar returntype , a propriedade retornará Object .
Implementação. Se essa propriedade usar a Implements palavra-chave, a classe ou estrutura que a
contém deverá ter uma Implements instrução imediatamente após sua Class Structure instrução or. A
Implements instrução deve incluir cada interface especificada em implementslist . No entanto, o nome
pelo qual uma interface define o (em ) não precisa ser o mesmo que o nome Property definedname
dessa propriedade (em name ).
Comportamento
Retornando de um procedimento de propriedade. Quando o procedimento ou retorna para o
código de chamada, a execução continua com a instrução após a Get Set instrução que a invocou.
As Exit Property instruções e causam uma saída imediata de um procedimento de Return propriedade.
Qualquer número de Exit Property instruções e pode aparecer em qualquer lugar no Return
procedimento, e você pode misturar instruções Exit Property Return e .
Valor de retorno. Para retornar um valor de um procedimento, você pode atribuir o valor ao nome da
propriedade ou Get incluí-lo em uma Return instrução . O exemplo a seguir atribui o valor de retorno
ao nome da propriedade quoteForTheDay e, em seguida, usa a Exit Property instrução a ser retornada.
Se você usar sem atribuir um valor a , o procedimento Exit Property name Get retornará o valor
padrão para o tipo de dados da propriedade.
A Return instrução ao mesmo tempo atribui o valor Get de retorno do procedimento e sai do
procedimento. O exemplo a seguir mostra a isso.
Exemplo
O exemplo a seguir declara uma propriedade em uma classe .
Class Class1
' Define a local variable to store the property value.
Private propertyValue As String
' Define the property.
Public Property Prop1() As String
Get
' The Get property procedure is called when the value
' of a property is retrieved.
Return propertyValue
End Get
Set(ByVal value As String)
' The Set property procedure is called when the value
' of a property is modified. The value to be assigned
' is passed in the argument to Set.
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
27/09/2021 • 2 minutes to read
Confira também
Instruções A-E
Instruções F-P
Referência da linguagem Visual Basic
Instrução RaiseEvent
27/09/2021 • 4 minutes to read
Dispara um evento declarado no nível do módulo dentro de uma classe, formulário ou documento.
Syntax
RaiseEvent eventname[( argumentlist )]
Partes
eventname
Obrigatórios. Nome do evento a ser disparado.
argumentlist
Opcional. Lista delimitada por vírgulas de variáveis, matrizes ou expressões. O argumentlist argumento deve
ser incluído entre parênteses. Se não houver argumentos, os parênteses deverão ser omitidos.
Comentários
O necessário eventname é o nome de um evento declarado dentro do módulo. Ele segue as Visual Basic de
nomen por variável.
Se o evento não tiver sido declarado dentro do módulo no qual ele é gerado, ocorrerá um erro. O fragmento de
código a seguir ilustra uma declaração de evento e um procedimento no qual o evento é gerado.
Você não pode RaiseEvent usar para autar eventos que não são declarados explicitamente no módulo. Por
exemplo, todos os formulários herdam Click um evento de , ele não pode ser gerado usando em uma forma
[Link] RaiseEvent derivada. Se você declarar um evento no módulo de formulário, ele
será sombra Click do próprio evento do Click formulário. Você ainda pode invocar o evento do Click
formulário chamando o método OnClick .
Por padrão, um evento definido Visual Basic gera seus manipuladores de eventos na ordem em que as conexões
são estabelecidas. Como os eventos podem ter parâmetros, um processo que se conecta com atraso pode
receber parâmetros que ByRef foram alterados por um manipulador de eventos anterior. Depois que os
manipuladores de eventos são executados, o controle é retornado para a sub-rotina que gerou o evento.
NOTE
Eventos não compartilhados não devem ser gerados dentro do construtor da classe na qual eles são declarados. Embora
esses eventos não causem erros em tempo de executar, eles podem não ser capturados por manipuladores de eventos
associados. Use o modificador para criar um evento compartilhado se você precisar gerar um Shared evento de um
construtor.
NOTE
Você pode alterar o comportamento padrão de eventos definindo um evento personalizado. Para eventos RaiseEvent
personalizados, a instrução invoca o acessador RaiseEvent do evento. Para obter mais informações sobre eventos
personalizados, consulte instrução event.
Exemplo 1
O exemplo a seguir usa eventos para contagem de segundos de 10 a 0. O código ilustra vários métodos,
propriedades e instruções relacionados a eventos, incluindo a RaiseEvent instrução .
A classe que gera um evento é a origem do evento e os métodos que processam o evento são os manipuladores
de eventos. Uma origem do evento pode ter vários manipuladores para os eventos gerados. Quando a classe
gera o evento , esse evento é gerado em todas as classes que se elegeram para manipular eventos para essa
instância do objeto.
O exemplo também usa um formulário ( Form1 ) com um botão ( ) e uma caixa de texto ( Button1 TextBox1 ).
Quando você clica no botão, a primeira caixa de texto exibe uma contagem regressiva de 10 a 0 segundos.
Quando o tempo total (10 segundos) tiver decorrido, a primeira caixa de texto exibirá "Done".
O código para Form1 especifica os estados inicial e terminal do formulário. Ele também contém o código
executado quando os eventos são gerados.
Para usar este exemplo, abra um novo projeto Windows Aplicativo, adicione um botão chamado e uma caixa de
texto chamada ao Button1 TextBox1 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ódigos.
Adicione uma WithEvents variável à seção de declarações da Form1 classe .
Exemplo 2
Adicione o código a seguir ao código para Form1 . Substitua quaisquer procedimentos duplicados que possam
existir, como Form_Load ou Button_Click .
Private Sub Form1_Load() Handles [Link]
[Link] = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles [Link]
[Link](10.0, 0.1)
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = [Link]
Dim ElapsedTime As Double = 0
Pressione F5 para executar o exemplo anterior e clique no botão rotulado Iniciar . A primeira caixa de texto
começa a contar os segundos. Quando o tempo total (10 segundos) tiver decorrido, a primeira caixa de texto
exibirá "Done".
NOTE
O [Link] método não processa eventos exatamente da mesma maneira que o formulário. Para
permitir que o formulário manipular os eventos diretamente, você pode usar multithreading. Para obter mais informações,
consulte Managed Threading.
Confira também
Eventos
Instrução Event
Instrução AddHandler
Instrução RemoveHandler
Alças
Instrução ReDim (Visual Basic)
27/09/2021 • 4 minutes to read
Syntax
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
Partes
T ERM O DEF IN IÇ Ã O
Comentários
Você pode usar a instrução para alterar o tamanho de uma ou mais dimensões de uma matriz que ReDim já foi
declarada. Se você tiver uma matriz grande e não precisar mais de alguns de seus elementos, poderá liberar
memória ReDim reduzindo o tamanho da matriz. Por outro lado, se sua matriz precisar de mais elementos,
ReDim poderá adicioná-los.
A ReDim instrução destina-se apenas a matrizes. Ele não é válido em escalares (variáveis que contêm apenas
um único valor), coleções ou estruturas. Observe que, se você declarar uma variável como do tipo , a instrução
não terá informações de tipo Array suficientes para criar a nova ReDim matriz.
Você só pode ReDim usar no nível do procedimento. Portanto, o contexto de declaração para a variável deve ser
um procedimento; não pode ser um arquivo de origem, um namespace, uma interface, uma classe, uma
estrutura, um módulo ou um bloco. Para obter mais informações, consulte Contextos de declaração e níveis de
acesso padrão.
Regras
Várias variáveis. Você pode reorganizar várias variáveis de matriz na mesma instrução de declaração e
especificar as name partes e para cada boundlist variável. Várias variáveis são separadas por vírgulas.
Limites de matriz. Cada entrada em boundlist pode especificar os limites inferior e superior dessa
dimensão. O limite inferior é sempre 0 (zero). O limite superior é o valor de índice mais alto possível para
essa dimensão, não o comprimento da dimensão (que é o limite superior mais um). O índice para cada
dimensão pode variar de 0 a seu valor de limite superior.
O número de dimensões em deve corresponder ao número original de boundlist dimensões
(classificação) da matriz.
Tipos de dados. A ReDim instrução não pode alterar o tipo de dados de uma variável de matriz ou seus
elementos.
Inicialização. A ReDim instrução não pode fornecer novos valores de inicialização para os elementos da
matriz.
Rank . A ReDim instrução não pode alterar a classificação (o número de dimensões) da matriz.
Reizing with Preser ve. Se você usar Preserve , será possível re dimensionar apenas a última
dimensão da matriz. Para todas as outras dimensões, você deve especificar o limite da matriz existente.
Por exemplo, se sua matriz tiver apenas uma dimensão, você poderá re dimensionar 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 sua 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 Preser var. Se você não especificar , inicializa os elementos da nova matriz usando o
Preserve valor padrão para seu tipo de ReDim dados.
Inicialização com Preser var. Se você especificar Preserve , Visual Basic copia os elementos da matriz
existente para a nova matriz.
Exemplo
O exemplo a seguir aumenta o tamanho da última dimensão de uma matriz dinâmica sem perder nenhum dado
existente na matriz e 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.
A Dim instrução 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. Ele também adiciona mais 10 colunas ao final de
cada linha em cada camada e inicializa os elementos nessas novas colunas como 0 (o valor padrão de , que é o
tipo de elemento da Integer 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 você tiver terminado de usar
essas colunas. Reduzir o tamanho de uma matriz grande pode liberar memória que você não precisa mais.
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 Preserve modificador, 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)
27/09/2021 • 2 minutes to read
Syntax
REM comment
' comment
Partes
comment
Opcional. O texto de qualquer comentário que você deseja incluir. Um espaço é necessário entre a REM palavra-
chave e comment .
Comentários
Você pode colocar uma REM instrução em uma linha ou colocá-la em uma linha após outra instrução. A REM
instrução deve ser a última instrução na linha. Se seguir outra instrução, o REM deverá ser separado dessa
instrução por um espaço.
Você pode usar uma aspas simples ( ' ) em vez de REM . Isso é verdadeiro se o comentário segue outra
instrução na mesma linha ou se fica sozinho em uma linha.
NOTE
Você não pode continuar REM uma instrução usando uma sequência de continuação de linha ( _ ). Quando um
comentário começa, o compilador não examina os caracteres em busca de significado especial. Para um comentário de
várias linhas, use outra instrução ou um símbolo REM de comentário ( ) em cada ' linha.
Exemplo
O exemplo a seguir ilustra a REM instrução , 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 .
Confira também
Comentários no código
Como: Quebrar e combinar instruções no código
Instrução RemoveHandler
27/09/2021 • 2 minutes to read
Syntax
RemoveHandler event, AddressOf eventhandler
Partes
T ERM O DEF IN IÇ Ã O
Comentários
As AddHandler RemoveHandler instruções e permitem que você inicie e interrompa a manipulação de eventos
para um evento específico a qualquer momento durante a execução do programa.
NOTE
Para eventos personalizados, a RemoveHandler instrução invoca o RemoveHandler acessador do evento. Para obter
mais informações sobre eventos personalizados, consulte Event Statement.
Exemplo
Sub TestEvents()
Dim Obj As New Class1
' Associate an event handler with an event.
AddHandler Obj.Ev_Event, AddressOf EventHandler
' Call the method to raise the event.
[Link]()
' Stop handling events.
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
' This event will not be handled.
[Link]()
End Sub
Sub EventHandler()
' Handle the event.
MsgBox("EventHandler caught event.")
End Sub
Confira também
Instrução AddHandler
Alças
Instrução Event
Eventos
Instrução Resume
27/09/2021 • 2 minutes to read
Syntax
Resume [ Next | line ]
Partes
Resume
Obrigatórios. Se o erro ocorreu no mesmo procedimento que o manipulador de erros, a execução será
retomada com a instrução que causou o erro. Se o erro ocorreu em um procedimento chamado, a execução será
retomada na instrução que chamou pela última vez fora do procedimento que contém a rotina de tratamento de
erros.
Next
Opcional. Se o erro ocorreu no mesmo procedimento que o manipulador de erros, a execução será retomada
com a instrução imediatamente após a instrução que causou o erro. Se o erro ocorreu em um procedimento
chamado, a execução é retomada com a instrução imediatamente após a instrução que chamou pela última vez
fora do procedimento que contém a rotina de tratamento de erros (ou On Error Resume Next instrução).
line
Opcional. A execução é retomada na linha especificada no argumento line necessário. O argumento é um
rótulo de linha ou um número de linha e line deve estar no mesmo procedimento que o manipulador de
erros.
Comentários
NOTE
Recomendamos que você use a manipulação de exceção estruturada em seu código sempre que possível, em vez de usar
tratamento de exceção não estruturado e as On Error instruções Resume e . Para obter mais informações, consulte
Instrução Try...Catch...Finally.
Se você usar uma Resume instrução em qualquer lugar diferente de uma rotina de tratamento de erros,
ocorrerá um erro.
A Resume instrução não pode ser usada em nenhum procedimento que contenha uma Try...Catch...Finally
instrução .
Exemplo
Este exemplo usa a instrução para encerrar o tratamento de erro em um procedimento e, em seguida, retomar a
execução com Resume a instrução que causou o erro. O número de erro 55 é gerado para ilustrar o uso da
Resume instrução .
Sub ResumeStatementDemo()
On Error GoTo ErrorHandler ' Enable error-handling routine.
Dim x As Integer = 32
Dim y As Integer = 0
Dim z As Integer
z = x / y ' Creates a divide by zero error
Exit Sub ' Exit Sub to avoid error handler.
ErrorHandler: ' Error-handling routine.
Select Case [Link] ' Evaluate error number.
Case 6 ' "Divide by zero" error.
y = 1 ' Sets the value of y to 1 and tries the calculation again.
Case Else
' Handle other situations here....
End Select
Resume ' Resume execution at same line
' that caused the error.
End Sub
Requisitos
Namespace: [Link]
Assembly: Visual Basic runtime (em [Link])
Confira também
Instrução Try...Catch...Finally
Instrução Error
Instrução On Error
Instrução Return (Visual Basic)
27/09/2021 • 2 minutes to read
Retorna o controle para o código que chamou Function um Sub procedimento,, Get , Set ou Operator .
Syntax
Return
' -or-
Return expression
Parte
expression
Necessário em um Function Get procedimento, ou Operator . Expressão que representa o valor a ser
retornado para o código de chamada.
Comentários
Em um Sub Set procedimento ou, a Return instrução é equivalente a uma Exit Sub Exit Property
instrução or e expression não deve ser fornecida.
Em um Function Get procedimento,, ou Operator , a Return instrução deve incluir expression e expression
deve ser avaliada como um tipo de dados que é conversível para o tipo de retorno do procedimento. Em um
Function Get procedimento ou, você também tem a alternativa de atribuir uma expressão ao nome do
procedimento para servir como o valor de retorno e, em seguida, executar Exit Function uma Exit Property
instrução or. Em um Operator procedimento, você deve usar Return expression .
Você pode incluir quantas Return instruções forem apropriadas no mesmo procedimento.
NOTE
O código em um Finally bloco é executado depois Return que uma instrução em um Try Catch bloco ou é
encontrada, mas antes que essa Return instrução seja executada. Uma Return instrução não pode ser incluída em um
Finally bloco.
Exemplo
O exemplo a seguir usa a Return instrução várias vezes para retornar ao código de chamada quando o
procedimento não precisa fazer mais nada.
Public Function GetAgePhrase(ByVal age As Integer) As String
If age > 60 Then Return "Senior"
If age > 40 Then Return "Middle-aged"
If age > 20 Then Return "Adult"
If age > 12 Then Return "Teen-aged"
If age > 4 Then Return "School-aged"
If age > 1 Then Return "Toddler"
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)
27/09/2021 • 4 minutes to read
Syntax
Select [ Case ] testexpression
[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Partes
T ERM O DEF IN IÇ Ã O
- expression1 To expression2
-[ Is ] expressão ComparisonOperator
- expressão
Comentários
Se testexpression corresponder a qualquer Case expressionlist cláusula, as instruções após essa Case
instrução são executadas até a Case próxima Case Else instrução, ou End Select . Em seguida, o controle
passa para a instrução a seguir End Select . Se testexpression corresponder a uma expressionlist cláusula
em mais de uma Case cláusula, somente as instruções após a primeira correspondência são executadas.
A Case Else instrução é usada para introduzir o elsestatements a ser executado se nenhuma correspondência
for encontrada entre o testexpression e uma expressionlist cláusula em qualquer uma das outras Case
instruções. Embora não seja necessário, é uma boa ideia ter uma Case Else instrução em sua Select Case
construção para lidar com valores imprevistos testexpression . Se nenhuma Case expressionlist cláusula
corresponder testexpression e não houver Case Else instrução, o controle passará para a instrução a seguir
End Select .
Você pode usar várias expressões ou intervalos em cada Case cláusula. Por exemplo, a linha a seguir é válida.
Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber
NOTE
A Is palavra-chave usada Case nas Case Else instruções e não é a mesma que o operador is, que é usado para
comparação de referência de objeto.
Você pode especificar intervalos e várias expressões para cadeias de caracteres. No exemplo a seguir, Case
corresponde a qualquer cadeia de caracteres que seja exatamente igual a "maçãs", tem um valor entre "porcas"
e "sopa" em ordem alfabética ou contém exatamente o mesmo valor que o valor atual de testItem .
Case "apples", "nuts" To "soup", testItem
A configuração de Option Compare pode afetar comparações de cadeia de caracteres. Em Option Compare Text ,
as cadeias de caracteres "maçãs" e "maçãs" são comparadas como iguais, mas em Option Compare Binary , elas
não.
NOTE
Uma Case instrução com várias cláusulas pode exibir o comportamento conhecido como curto-circuito. Visual Basic
avalia as cláusulas da esquerda para a direita e, se uma delas produz uma correspondência com testexpression , as
cláusulas restantes não são avaliadas. O curto circuito pode melhorar o desempenho, mas pode produzir resultados
inesperados se você espera que todas as expressões sejam expressionlist avaliadas. Para obter mais informações
sobre o curto-circuito, consulte expressões booleanas.
Se o código dentro de Case um Case Else bloco de instrução ou não precisar executar nenhuma das
instruções no bloco, ele poderá sair do bloco usando a Exit Select instrução. Isso transfere o controle
imediatamente para a instrução a seguir End Select .
Select Case as construções podem ser aninhadas. Cada construção aninhada Select Case deve ter uma
End Select instrução correspondente e deve estar completamente contida em um Case bloco único ou
Case Else de instrução da Select Case construção externa dentro da qual está aninhada.
Exemplo
O exemplo a seguir usa uma Select Case construção para gravar uma linha correspondente ao valor da
variável number . A segunda Case instrução contém o valor que corresponde ao valor atual de number ,
portanto, a instrução que grava "entre 6 e 8, inclusivo" é executada.
Dim number As Integer = 8
Select Case number
Case 1 To 5
[Link]("Between 1 and 5, inclusive")
' The following is the only Case clause that evaluates to True.
Case 6, 7, 8
[Link]("Between 6 and 8, inclusive")
Case 9 To 10
[Link]("Equal to 9 or 10")
Case Else
[Link]("Not between 1 and 10, inclusive")
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)
27/09/2021 • 3 minutes to read
Declara um procedimento Set de propriedade usado para atribuir um valor a uma propriedade .
Syntax
[ <attributelist> ] [ accessmodifier ] Set (ByVal value [ As datatype ])
[ statements ]
End Set
Partes
attributelist
Opcional. Consulte Lista de Atributos.
accessmodifier
Opcional em no máximo uma das Get instruções Set e nesta propriedade. Um dos seguintes pode ser feito:
Protegido
Friend
Privado
Protected Friend
Comentários
Cada propriedade deve ter um procedimento de propriedade, a Set menos que a propriedade esteja marcada
como ReadOnly . O Set procedimento é usado para definir o valor da propriedade .
Visual Basic automaticamente chama o procedimento de uma propriedade quando uma instrução de atribuição
fornece um Set valor a ser armazenado na propriedade .
Visual Basic passa um parâmetro para o Set procedimento durante as atribuições de propriedade. Se você não
fornecer um parâmetro para , o IDE (ambiente de desenvolvimento Set integrado) usará um parâmetro
implícito chamado value . O parâmetro contém o valor a ser atribuído à propriedade . Normalmente, você
armazena esse valor em uma variável local privada e o retorna sempre que o Get procedimento é chamado.
O corpo da declaração de propriedade pode conter apenas os procedimentos e da propriedade entre a Get
Set instrução Property e a End Property instrução . Ele não pode armazenar nada além desses procedimentos.
Em particular, ele não pode armazenar o valor atual da propriedade. Você deve armazenar esse valor fora da
propriedade , porque se você armazená-lo dentro de qualquer um dos procedimentos de propriedade, o outro
procedimento de propriedade não poderá acessá-lo. A abordagem comum é armazenar o valor em uma
variável Privada declarada no mesmo nível que a propriedade . Você deve definir Set um procedimento dentro
da propriedade à qual ele se aplica.
O procedimento usa como padrão o nível de acesso de sua propriedade de contenção, a menos Set que você
use na accessmodifier Set instrução .
Regras
Níveis de acesso misto. Se você estiver definindo uma propriedade de leitura/gravação,
opcionalmente, poderá especificar um nível de acesso diferente para o procedimento ou Get Set , mas
não ambos. Se você fizer isso, o nível de acesso do 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 , mas não Set Private Public .
Se você estiver definindo uma WriteOnly propriedade, o Set procedimento representará toda a
propriedade . Não é possível declarar um nível de acesso diferente para Set , pois isso definiria dois
níveis de acesso para a propriedade .
Comportamento
Retornando de um procedimento de propriedade. Quando o procedimento retorna ao código de
chamada, a execução continua seguindo a Set instrução que forneceu o valor a ser armazenado.
Set os procedimentos de propriedade podem retornar usando a instrução Return ou a instrução Exit.
As Exit Property instruções e causam uma saída imediata de um procedimento de Return propriedade.
Qualquer número de Exit Property instruções e pode aparecer em qualquer lugar no Return
procedimento, e você pode misturar instruções Exit Property Return e .
Exemplo
O exemplo a seguir usa Set a instrução para definir o valor de uma propriedade .
Class propClass
Private propVal As Integer
Property Prop1() As Integer
Get
Return propVal
End Get
Set(ByVal value As Integer)
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)
27/09/2021 • 2 minutes to read
Suspende a execução.
Sintaxe
Stop
Comentários
Você pode colocar Stop instruções em qualquer lugar em procedimentos para suspender a execução. O uso da
Stop instrução é semelhante à definição de um ponto de interrupção no código.
A Stop instrução suspende a execução, mas, ao contrário End , não fecha nenhum arquivo ou limpa nenhuma
variável, a menos que seja encontrado em um arquivo executável compilado (.exe).
NOTE
Se a Stop instrução 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 Stop instrução para suspender a execução para cada iteração por meio do For...Next
loop.
Dim i As Integer
For i = 1 To 10
[Link](i)
' Stop during each iteration and wait for user to resume.
Stop
Next i
Confira também
Instrução End
Instrução Structure
27/09/2021 • 6 minutes to read
Declara o nome de uma estrutura e apresenta a definição das variáveis, propriedades, eventos e procedimentos
que a estrutura compreende.
Syntax
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
[ Implements interfacenames ]
[ datamemberdeclarations ]
[ methodmemberdeclarations ]
End Structure
Partes
T ERM O DEF IN IÇ Ã O
- Publicada
- Protected
- Público
- Pessoal
- Amigo protegido
- Particular protegido
Comentários
A Structure instrução define um tipo de valor composto que você pode personalizar. Uma estrutura é uma
generalização do tipo definido pelo usuário (UDT) de versões anteriores do Visual Basic. Para obter mais
informações, consulte estruturas.
As estruturas dão suporte a muitos dos mesmos recursos que as classes. Por exemplo, estruturas podem ter
propriedades e procedimentos, elas podem implementar interfaces e podem ter construtores com parâmetros.
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 estruturas são tipos de valor. Para obter mais informações,
consulte estruturas e classes.
Você pode usar Structure somente no nível de namespace ou de módulo. Isso significa que o contexto de
declaração para uma estrutura deve 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.
As estruturas assumem como padrão o acesso Friend . Você pode ajustar seus níveis de acesso com os
modificadores de acesso. Para obter mais informações, consulte níveis de acesso em Visual Basic.
Regras
Aninhamento. Você pode definir uma estrutura dentro de outra. A estrutura externa é chamada de
estrutura de contenção 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 que a contém. Em vez disso,
você deve declarar uma variável do tipo de dados da estrutura aninhada.
Declaração de membro. Você deve declarar todos os membros de uma estrutura. Um membro de
estrutura não pode ser protegido ou Protected Friend porque nada pode herdar de uma estrutura. No
entanto, a estrutura em si pode ser Protected ou Protected Friend .
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 algumas delas não sejam compartilhadas.
Inicialização. Você não pode inicializar o valor de nenhum membro de dados não compartilhado de
uma estrutura como parte de sua declaração. Você deve inicializar um membro de dados desse tipo por
meio de um construtor com parâmetros na estrutura ou atribuir um valor ao membro depois de ter
criado uma instância da estrutura.
Herda. 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, até mesmo para especificar
ValueType .
Implementação. Se a estrutura usar a instrução Implements, você deverá implementar todos os
membros definidos por cada interface especificada no interfacenames .
Propriedade padrão. Uma estrutura pode especificar, no máximo, uma propriedade como sua
propriedade padrão, usando o modificador padrão . Para obter mais informações, consulte padrão.
Comportamento
Nível de acesso. Dentro de uma estrutura, você pode declarar cada membro com seu próprio nível de
acesso. Todos os membros da estrutura assumem como padrão o acesso público . Observe que, se a
estrutura em si tiver um nível de acesso mais restrito, isso restringe automaticamente o acesso a seus
membros, mesmo se você ajustar seus 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 o contém.
O escopo de cada membro da estrutura é a estrutura inteira.
Existência. Uma estrutura não tem, em si, um 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 nova cláusula Operator . Ele termina
quando o tempo de vida da variável que a mantém termina.
Não é possível estender o tempo de vida de uma instância de estrutura. Uma aproximação da
funcionalidade de estrutura estática é fornecida por um módulo. Para obter mais informações, consulte
instrução de módulo.
Os membros da estrutura têm tempos de vida, dependendo de como e onde eles são declarados. Para
obter mais informações, consulte "Lifetime" na declaração de classe.
Qualificação. O código fora de uma estrutura deve qualificar o nome de um membro com o nome
dessa estrutura.
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 pesquisa o elemento primeiro na estrutura aninhada, em seguida, em sua
estrutura de contenção e assim por diante até o elemento que contém mais externamente. Para obter
mais informações, consulte Referências a elementos declarados.
Consumo de memória. Assim como 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 nominais de
armazenamento de seus membros. Além disso, você não pode presumir com segurança que a ordem de
armazenamento na memória é igual à sua ordem de declaração. Se você precisar controlar o layout de
armazenamento de uma estrutura, poderá aplicar o StructLayoutAttribute atributo à Structure instrução
.
Exemplo
O exemplo a seguir usa Structure a instrução para definir um conjunto de dados relacionados para um
funcionário. Ele mostra o uso de Public membros , e para refletir a sensibilidade dos itens de Friend Private
dados. Ele também mostra membros de procedimento, propriedade e evento.
Public Structure employee
' Public members, accessible from throughout declaration region.
Public firstName As String
Public middleName As String
Public lastName As String
' Friend members, accessible from anywhere within the same assembly.
Friend employeeNumber As Integer
Friend workPhone As Long
' Private members, accessible only from within the structure itself.
Private homePhone As Long
Private level As Integer
Private salary As Double
Private bonus As Double
' Procedure member, which can access structure's private members.
Friend Sub CalculateBonus(ByVal rate As Single)
bonus = salary * CDbl(rate)
End Sub
' Property member to return employee's eligibility.
Friend ReadOnly Property Eligible() As Boolean
Get
Return level >= 25
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, consulte 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)
27/09/2021 • 6 minutes to read
Syntax
[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
Partes
attributelist
Shared
Opcional. Lista de parâmetros de tipo para um procedimento genérico. Consulte Lista de Tipos.
parameterlist
Opcional. Lista de nomes de variáveis locais que representam os parâmetros deste procedimento.
Consulte Lista de parâmetros.
Implements
Opcional. Indica que esse procedimento implementa um ou mais procedimentos, cada um definido em
uma interface implementada pela classe ou estrutura que contém Sub este procedimento. Consulte a
instrução Implements.
implementslist
Necessário se Implements for fornecido. Lista de Sub procedimentos que estão sendo implementados.
implementedprocedure [ , implementedprocedure ... ]
PA RT E DESC RIÇ Ã O
Handles
Opcional. Indica que esse procedimento pode manipular um ou mais eventos específicos. Consulte
Handles.
eventlist
Necessário se Handles for fornecido. Lista de eventos que este procedimento trata.
eventspecifier [ , eventspecifier ... ]
PA RT E DESC RIÇ Ã O
statements
Comentários
Todo o código executável deve estar dentro de um procedimento. Use um Sub procedimento quando não
quiser retornar um valor para o código de chamada. Use um Function procedimento quando quiser retornar
um valor.
Retornando de um subtodoto
Quando um procedimento retorna ao código de chamada, a execução continua com a instrução após a Sub
instrução que a chamou.
O exemplo a seguir mostra um retorno de um Sub procedimento.
As Exit Sub instruções e causam uma saída imediata de um Return Sub procedimento. Qualquer número de
Exit Sub instruções e pode aparecer em qualquer lugar no Return procedimento, e você pode misturar
instruções Exit Sub Return e .
Chamando um subdisttório
Chame um procedimento usando o nome do procedimento em uma instrução e, em seguida, seguindo esse
nome com sua lista Sub de argumentos entre parênteses. Você só poderá omitir os parênteses se não fornecer
argumentos. No entanto, seu código será mais acessível se você sempre incluir os parênteses.
Um Sub procedimento e um procedimento podem ter Function parâmetros e executar uma série de
instruções. No entanto, Function um procedimento retorna um valor e um procedimento Sub não. Portanto,
você não pode usar um Sub procedimento em uma expressão.
Você pode usar a Call palavra-chave ao chamar um procedimento, mas essa palavra-chave não é
recomendada para a Sub maioria dos usos. Para obter mais informações, consulte instrução call.
Visual Basic às vezes reorganiza expressões aritméticas para aumentar a eficiência interna. Por esse motivo, se a
lista de argumentos incluir expressões que chamam outros procedimentos, você não deverá supor que essas
expressões serão chamadas em uma ordem específica.
Subtodos assíncrono
Usando o recurso Assíncrono, 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 você marcar um procedimento com o modificador Async, poderá usar o operador Await no procedimento.
Quando o controle atinge uma expressão no procedimento, o controle retorna ao chamador e o progresso no
procedimento é suspenso até que a Await Async tarefa aguardada seja concluída. Quando a tarefa for
concluída, a execução poderá ser retomada no procedimento.
NOTE
Um procedimento retorna ao chamador quando o primeiro objeto aguardado que ainda não está concluído é encontrado
ou o final do procedimento é atingido, o que ocorrer Async Async primeiro.
Você também pode marcar uma instrução function com o Async modificador . Uma Async função pode ter um
tipo de retorno de ou Task<TResult> Task . Um exemplo mais adiante neste tópico mostra Async uma função
que tem um tipo de retorno de Task<TResult> .
Async``Sub os procedimentos são usados principalmente para manipuladores de eventos, em que um valor não
pode ser retornado. Um procedimento não pode ser aguardado e o chamador de um procedimento não pode
capturar exceções que Async Sub o procedimento Async Sub Sub lança.
Um Async procedimento não pode declarar nenhum parâmetro ByRef.
Para obter mais informações sobre procedimentos, consulte Programação assíncrona com Async e Await ,
Controle Flow em programas assíncronos e Tipos de retorno Async assíncronos.
Exemplo 1
O exemplo a seguir usa Sub a instrução para definir o nome, os parâmetros e o código que formam o corpo de
um Sub procedimento.
Sub ComputeArea(ByVal length As Double, ByVal width As Double)
' Declare local variable.
Dim area As Double
If length = 0 Or width = 0 Then
' If either argument = 0 then exit Sub immediately.
Exit Sub
End If
' Calculate area of rectangle.
area = length * width
' Print area to Immediate window.
[Link](area)
End Sub
Exemplo 2
No exemplo a seguir, DelayAsync é um que tem um tipo de retorno de Async Function Task<TResult> .
DelayAsync tem uma instrução Return que retorna um número inteiro. Portanto, a declaração de função
DelayAsync de deve ter um tipo de retorno de Task(Of Integer) . Como o tipo de retorno é , a avaliação da
Task(Of Integer) expressão em produz um Await DoSomethingAsync inteiro, como mostra a seguinte
instrução: Dim result As Integer = Await delayTask .
O startButton_Click procedimento é um exemplo de um Async Sub procedimento. Como DoSomethingAsync é
uma Async função, a tarefa para a chamada a DoSomethingAsync deve ser aguardada, como mostra a instrução
a seguir: Await DoSomethingAsync() . O startButton_Click Sub procedimento deve ser definido com o Async
modificador porque ele tem uma Await expressão.
' Output:
' Result: 5
Confira também
Instrução Implements
Instrução Function
Lista de parâmetros
Instrução Dim
Instrução Call
De
Matrizes de parâmetros
Como: Usar uma classe genérica
Solucionando problemas de procedimentos
Métodos Parciais
Instrução SyncLock
27/09/2021 • 5 minutes to read
Syntax
SyncLock lockobject
[ block ]
End SyncLock
Partes
lockobject
Obrigatórios. Expressão que é avaliada como uma referência de objeto.
block
Opcional. Bloco de instruções que serão executadas quando o bloqueio for adquirido.
End SyncLock
Encerra um SyncLock bloco.
Comentários
A SyncLock instrução garante que vários threads não executem o bloco de instrução ao mesmo tempo.
SyncLock impede que cada thread entre no bloco até que nenhum outro thread o execute.
O uso mais comum de SyncLock é proteger os dados de serem atualizados por mais de um thread
simultaneamente. Se as instruções que manipulam os dados precisarem ser concluídas sem interrupção,
coloque-as dentro de um SyncLock bloco.
Às vezes, um bloco de instrução protegido por um bloqueio exclusivo é chamado de seção crítica.
Regras
Ramificação. Você não pode ramificar SyncLock em um bloco de fora do bloco.
Valor do objeto Lock. O valor de lockobject não pode ser Nothing . Você deve criar o objeto de
bloqueio antes de usá-lo em uma SyncLock instrução .
Não é possível alterar o valor lockobject de durante a execução de um SyncLock bloco. O mecanismo
requer que o objeto de bloqueio permaneça inalterado.
Não é possível usar o operador Await em um SyncLock bloco.
Comportamento
Mecanismo. Quando um thread atinge a instrução , ele avalia a expressão e suspende a execução até
adquirir um bloqueio exclusivo no objeto SyncLock lockobject retornado pela expressão. Quando outro
thread atinge a SyncLock instrução , ele não adquire um bloqueio até que o primeiro thread execute a
End SyncLock instrução .
Dados Protegidos. Se for uma variável, o bloqueio exclusivo impedirá que um thread em qualquer
instância da classe seja executado enquanto qualquer lockobject outro thread o estiver Shared
SyncLock executando. Isso protege os dados compartilhados entre todas as instâncias.
Se for uma variável de instância (não ), o bloqueio impedirá que um thread em execução na instância
atual execute o bloco ao mesmo tempo que outro lockobject Shared thread na mesma SyncLock
instância. Isso protege os dados mantidos pela instância individual.
Aquisição e lançamento. Um bloco se comporta como uma construção na qual o bloco adquire um
SyncLock bloqueio exclusivo e o bloco o Try...Finally Try lockobject Finally libera. Por isso, o
SyncLock bloco garante a liberação do bloqueio, independentemente de como você sai do bloco. Isso é
verdadeiro mesmo no caso de uma exceção sem-trata.
Chamadas de estrutura. O bloco adquire e libera o bloqueio exclusivo chamando os métodos e da
SyncLock Enter classe no Exit Monitor [Link] namespace .
Práticas de programação
A lockobject expressão sempre deve ser avaliada como um objeto que pertence exclusivamente à sua classe.
Você deve declarar uma variável de objeto para proteger os dados pertencentes à instância atual ou uma
variável de objeto para proteger dados comuns a Private Private Shared todas as instâncias.
Você não deve usar a Me palavra-chave 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 de sua classe, ele poderá usar essa referência
como um objeto de bloqueio para um bloco completamente diferente do seu, protegendo dados SyncLock
diferentes. Dessa forma, sua classe e a outra classe podem impedir que umas às outras executam seus blocos
não SyncLock relacionados. Da mesma forma, o bloqueio em uma cadeia de caracteres pode ser problemático,
pois qualquer outro código no processo usando a mesma cadeia de caracteres compartilhará o mesmo
bloqueio.
Você também não deve usar o [Link] método para fornecer um objeto de bloqueio para dados
compartilhados. Isso porque sempre GetType retorna o mesmo objeto para um determinado nome de Type
classe. O código externo pode GetType chamar em sua classe e obter o mesmo objeto de bloqueio que você
está usando. Isso resultaria em duas classes bloqueando umas às outras de seus SyncLock blocos.
Exemplos
Descrição
O exemplo a seguir mostra uma classe que mantém uma lista simples de mensagens. Ele contém as mensagens
em uma matriz e o último elemento usado dessa matriz em uma variável. O addAnotherMessage procedimento
incrementa o último elemento e armazena a nova mensagem. Essas duas operações são protegidas pelas
instruções e , porque depois que o último elemento tiver sido incrementado, a nova mensagem deverá ser
armazenada antes que qualquer outro thread possa incrementar o SyncLock End SyncLock último elemento
novamente.
Se a simpleMessageList classe compartilhasse uma lista de mensagens entre todas as suas instâncias, as
variáveis e messagesList seriam messagesLast declaradas como Shared . Nesse caso, a variável também deve
ser , para que haja um único objeto messagesLock de bloqueio usado por cada Shared instância.
Código
Class simpleMessageList
Public messagesList() As String = New String(50) {}
Public messagesLast As Integer = -1
Private messagesLock As New Object
Public Sub addAnotherMessage(ByVal newMessage As String)
SyncLock messagesLock
messagesLast += 1
If messagesLast < [Link] Then
messagesList(messagesLast) = newMessage
End If
End SyncLock
End Sub
End Class
Descrição
O exemplo a seguir usa threads e SyncLock . Desde que a SyncLock instrução está presente, o bloco de
instrução é uma seção crítica e balance nunca se torna um número negativo. Você pode comentar as instruções
SyncLock e para ver o efeito de deixar de fora a End SyncLock SyncLock palavra-chave .
Código
Imports [Link]
Module Module1
Class Account
Dim thisLock As New Object
Dim balance As Integer
' Comment out the SyncLock and End SyncLock lines to see
' the effect of leaving out the SyncLock keyword.
SyncLock thisLock
If balance >= amount Then
[Link]("Balance before Withdrawal : " & balance)
[Link]("Amount to Withdraw : -" & amount)
balance = balance - amount
[Link]("Balance after Withdrawal : " & balance)
Return amount
Else
' Transaction rejected.
Return 0
End If
End SyncLock
End Function
Sub Main()
Dim threads(10) As Thread
Dim acc As New Account(1000)
For i As Integer = 0 To 9
Dim t As New Thread(New ThreadStart(AddressOf [Link]))
threads(i) = t
Next
For i As Integer = 0 To 9
threads(i).Start()
Next
End Sub
End Module
Comentários
Confira também
[Link]
[Link]
Visão geral dos primitivos de sincronização
Instrução Then
27/09/2021 • 2 minutes to read
Introduz um bloco de instrução a ser compilado ou executado se uma condição testada for verdadeira.
Comentários
A Then palavra-chave pode ser usada nesses contextos:
#If... Diretiva Then...#Else
Instrução If...Then...Else
Confira também
Palavras-chave
Instrução Throw (Visual Basic)
27/09/2021 • 2 minutes to read
Syntax
Throw [ expression ]
Parte
expression
Fornece informações sobre a exceção a ser lançada. Opcional ao residir em uma Catch instrução, caso
contrário, obrigatório.
Comentários
A Throw instrução lança uma exceção que você pode manipular com o 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 para interceptar erros em seu código porque Visual Basic a pilha de chamada até
encontrar o código de tratamento Throw de exceção apropriado.
Uma instrução sem expressão só pode ser usada em uma instrução, caso em que a instrução lança a exceção
que está sendo manipulada Throw Catch atualmente pela Catch instrução .
A Throw instrução redefine a pilha de chamada para a expression exceção. Se expression não for fornecido, a
pilha de chamada será deixada inalterada. Você pode acessar a pilha de chamada para a exceção por meio da
StackTrace propriedade .
Exemplo
O código a seguir usa a Throw instrução para lançar uma exceção:
Confira também
Instrução Try...Catch...Finally
Instrução On Error
Instrução Try...Catch...Finally (Visual Basic)
27/09/2021 • 14 minutes to read
Fornece uma maneira de lidar com alguns ou todos os erros possíveis que podem ocorrer em um determinado
bloco de código, enquanto ainda executa o código.
Syntax
Try
[ tryStatements ]
[ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
[ catchStatements ]
[ Exit Try ] ]
[ Catch ... ]
[ Finally
[ finallyStatements ] ]
End Try
Partes
T ERM O DEF IN IÇ Ã O
Comentários
Se você espera que uma determinada exceção ocorra durante uma determinada seção do código, coloque o
código em um Try bloco e use um Catch bloco para manter o controle e manipular a exceção se ela ocorrer.
Uma Try…Catch instrução consiste em um Try bloco seguido por uma ou mais Catch cláusulas, que
especificam manipuladores para várias exceções. quando uma exceção é lançada em um Try bloco, Visual
Basic procura a Catch instrução que manipula a exceção. se uma Catch instrução correspondente não for
encontrada, Visual Basic examinará o método que chamou o método atual e assim por diante na pilha de
chamadas. se nenhum Catch bloco for encontrado, 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 Catch instrução em uma Try…Catch instrução. Se você fizer isso, a ordem das
Catch cláusulas será significativa, pois elas serão examinadas em ordem. Capture as exceções mais específicas
antes das menos específicas.
As condições de instrução a seguir Catch são as menos específicas e capturarão todas as exceções que derivam
da Exception classe. Você normalmente deve usar uma dessas variações como o último Catch bloco na
Try...Catch...Finally estrutura, depois de capturar todas as exceções específicas que você espera. O fluxo de
controle nunca pode alcançar um Catch bloco que siga qualquer uma dessas variações.
O type é Exception , por exemplo: Catch ex As Exception
quando uma Try…Catch…Finally instrução é aninhada em outro Try bloco, Visual Basic primeiro examina cada
Catch instrução no bloco interno Try . Se nenhuma Catch instrução correspondente for encontrada, a
pesquisa prosseguirá para as Catch instruções do bloco externo Try…Catch…Finally .
As variáveis locais de um Try bloco não estão disponíveis em um Catch bloco porque são blocos separados.
Se você quiser usar uma variável em mais de um bloco, declare a variável fora da Try...Catch...Finally
estrutura.
TIP
A Try…Catch…Finally instrução está disponível como um trecho de código IntelliSense. No Gerenciador de trechos de
código, expanda padrões de código-se, para cada um, Tente catch, propriedade, etc. e, em seguida,
tratamento de erro (exceções) . Para obter mais informações, consulte Snippets de Código.
Bloco finally
Se você tiver uma ou mais instruções que devem ser executadas antes de sair da Try estrutura, use um
Finally bloco. O controle passa para o Finally bloco logo antes de passar da Try…Catch estrutura. Isso é
verdadeiro mesmo se ocorrer uma exceção em qualquer lugar dentro da Try estrutura.
Um Finally bloco é útil para executar qualquer código que deve ser executado mesmo se houver uma exceção.
O controle é passado para o Finally bloco, independentemente de como o Try...Catch bloco é encerrado.
O código em um Finally bloco é executado mesmo que seu código encontre uma Return instrução em Try
um Catch bloco ou. O controle não passa de um Try Catch bloco ou para o Finally bloco correspondente
nos seguintes casos:
Uma instrução End é encontrada no Try bloco ou Catch .
Um StackOverflowException é gerado no Try bloco ou Catch .
Não é válido transferir explicitamente a execução para um Finally bloco. A transferência da execução para fora
de um Finally bloco não é válida, exceto por meio de uma exceção.
Se uma Try instrução não contiver pelo menos um Catch bloco, ela deverá conter um Finally bloco.
TIP
Se você não precisar capturar exceções específicas, a Using instrução se comportará como um Try…Finally bloco e
garantirá a alienação dos recursos, independentemente de como você sai do bloco. Isso é verdadeiro mesmo com uma
exceção sem tratamento. Para obter mais informações, consulte usando a instrução.
Argumento de exceção
O Catch exception argumento Block é uma instância da Exception classe ou uma classe derivada da
Exception classe. A Exception instância de classe corresponde ao erro que ocorreu no Try bloco.
As propriedades do Exception objeto ajudam a identificar a causa e o local de uma exceção. Por exemplo, a
StackTrace propriedade lista os métodos chamados que levaram à exceção, ajudando você a descobrir onde o
erro ocorreu no código. Message Retorna uma mensagem que descreve a exceção. HelpLink Retorna um link
para um arquivo de ajuda associado. InnerException Retorna o Exception objeto que causou a exceção atual ou
retorna se não Nothing houver nenhum original Exception .
[Link]([Link])
[Link]()
End If
End Sub
Certifique-se de que o código em Catch blocos possa relatar corretamente exceções aos usuários, seja por
meio de log seguro de threads ou mensagens apropriadas. Caso contrário, as exceções podem permanecer
desconhecidas.
Métodos assíncronos
Se você marcar um método com o modificador Async, poderá usar o operador Await no método . Uma
instrução com Await o operador 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 associada ao operador for finalada, a execução
Await será retomada no mesmo método. Para obter mais informações, consulte Control Flow em Programas
Assíncrono.
Uma tarefa retornada por um método Assíncrono pode terminar em um estado com falha, indicando que ela foi
concluída devido a uma exceção sem tratação. Uma tarefa também pode terminar em um estado cancelado, o
que resulta em um OperationCanceledException sendo lançado fora da expressão await. Para capturar qualquer
tipo de exceção, coloque a expressão associada à tarefa em um bloco e capturar Await a Try exceção no
Catch bloco. Um exemplo é fornecido posteriormente neste tópico.
Uma tarefa pode estar em um estado com falha porque várias exceções foram responsáveis por sua falha. Por
exemplo, a tarefa pode ser o resultado de uma chamada para [Link]. Quando você aguarda essa tarefa, a
exceção capturada é apenas uma das exceções e não é possível prever qual exceção será capturada. Um
exemplo é fornecido posteriormente neste tópico.
Uma Await expressão não pode estar dentro de um bloco ou Catch Finally bloco.
Iterators
Uma função de iterador ou Get um acessador executa uma iteração personalizada em uma coleção. Um
iterador usa uma instrução Yield para retornar cada elemento da coleção um de cada vez. Você chama uma
função de iterador usando um Para Cada... Próxima instrução.
Uma Yield instrução pode estar dentro de um Try bloco. Um Try bloco que contém uma Yield instrução
pode ter Catch blocos e pode ter um bloco Finally . Consulte a seção "Experimentar blocos Visual Basic" de
Iteradores para ver um exemplo.
Uma Yield instrução não pode estar dentro Catch de um bloco ou um Finally bloco.
Se o corpo (fora da função de iterador) lançar uma exceção, um bloco na função de iterador não será executado,
mas um bloco na função For Each Catch de Finally iterador será executado. Um Catch bloco dentro de
uma função de iterador captura apenas exceções que ocorrem dentro da função de iterador.
Try
[Link]("[Link]
Catch ex As Exception
MsgBox("Can't load Web page" & vbCrLf & [Link])
End Try
Nessa situação de confiança parcial, você precisa colocar [Link] a instrução em um Sub separado. A
chamada inicial para o Sub falhará. Isso permite capturar antes que o que contém Try...Catch seja iniciado e a
Sub [Link] exceção de segurança produzida.
Exemplos
A estrutura de Try... Pegar... Finalmente
O exemplo a seguir ilustra a estrutura da Try...Catch...Finally instrução .
Public Sub TryExample()
' Declare variables.
Dim x As Integer = 5
Dim y As Integer = 0
Try
Throw New ArgumentException()
Catch e As OverflowException When i = 5
[Link]("First handler")
Catch e As ArgumentException When i = 4
[Link]("Second handler")
Catch When i = 5
[Link]("Third handler")
End Try
End Sub
' Output: Third handler
Remova a marca de comentário da linha Throw New OperationCancelledException para demonstrar o que
acontece quando você cancela um processo assíncrono. A exceção é capturada Catch no bloco e a propriedade
da tarefa é definida como IsCanceled True . No entanto, em algumas condições que não se aplicam a este
exemplo, IsFaulted é definido como e é definido como True IsCanceled False .
Try
Dim result As String = Await theTask
[Link]("Result: " & result)
Catch ex As Exception
[Link]("Exception Message: " & [Link])
End Try
Try
Await allTasks
Catch ex As Exception
[Link]("Exception: " & [Link])
[Link]("Task IsFaulted: " & [Link])
For Each inEx In [Link]
[Link]("Task Inner Exception: " + [Link])
Next
End Try
End Function
' Output:
' Exception: Error-First Task
' Task IsFaulted: True
' Task Inner Exception: Error-First Task
' Task Inner Exception: Error-Second Task
' Task Inner Exception: Error-Third Task
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)
27/09/2021 • 4 minutes to read
Declara o início de um Using bloco e, opcionalmente, adquire os recursos do sistema que o bloco controla.
Syntax
Using { resourcelist | resourceexpression }
[ statements ]
End Using
Partes
T ERM O DEF IN IÇ Ã O
-ou-
resourcename As resourcetype = resourceexpression
Comentários
Às vezes, seu código requer um recurso não SQL, como um handle de arquivo, um wrapper COM ou um SQL
gerenciamento. Um Using bloco garante o descarte de um ou mais desses recursos quando seu código é
concluído com eles. Isso os disponibiliza para uso de outro código.
Os recursos gerenciados são descartados pelo .NET Framework coletor de lixo (GC) sem nenhuma codificação
extra de sua parte. Você não precisa de um Using bloco para recursos gerenciados. No entanto, você ainda
pode usar um bloco para forçar o descarte de um recurso gerenciado em vez Using de aguardar o coletor de
lixo.
Um Using bloco tem três partes: aquisição, uso e descarte.
Aquisição significa criar uma variável e inicializando-a para se referir ao recurso do sistema. A instrução
pode adquirir um ou mais recursos ou você pode adquirir exatamente um recurso antes de inserir o
bloco Using e fornece-lo à Using instrução . Se você fornecer resourceexpression , deverá adquirir o
recurso antes de passar o controle para a Using instrução .
Uso significa acessar os recursos e executar ações com eles. As instruções entre Using e representam o
uso dos End Using recursos.
Descarte significa chamar Dispose o método no objeto em resourcename . Isso permite que o objeto
encente seus recursos corretamente. A End Using instrução descarta os recursos sob Using o controle
do bloco.
Comportamento
Um bloco se comporta como uma construção ... na qual o bloco usa os Using recursos e o bloco os Try
Finally Try Finally descarta. Por isso, o Using bloco garante o descarte dos recursos, independentemente
de como você sai do bloco. Isso é verdadeiro mesmo no caso de uma exceção sem-trata, exceto para um
StackOverflowException .
O escopo de cada variável de recurso adquirida pela Using instrução é limitado ao Using bloco .
Se você especificar mais de um recurso do sistema na instrução , o efeito será o mesmo que se você Using
Using aninhado bloquear um dentro de outro.
Se resourcename for , nenhuma chamada a será feita e nenhuma Nothing Dispose exceção será lançada.
NOTE
O código dentro do Using bloco não deve atribuir o objeto em a outra resourcename variável. Quando você sai do
bloco, o recurso é descartado e a outra variável não pode acessar Using o recurso ao qual ele aponta.
Exemplo
O exemplo a seguir cria um arquivo chamado [Link] e grava duas linhas de texto no arquivo. O exemplo
também lê esse mesmo arquivo e exibe as linhas de texto:
Como as classes e implementam a interface , o código pode usar instruções para garantir que o arquivo seja
fechado corretamente após as TextWriter operações de gravação e TextReader IDisposable Using leitura.
line = [Link]()
Do Until line Is Nothing
[Link](line)
line = [Link]()
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)
27/09/2021 • 3 minutes to read
Executa uma série de instruções desde que uma determinada condição seja True .
Syntax
While condition
[ statements ]
[ Continue While ]
[ statements ]
[ Exit While ]
[ statements ]
End While
Partes
T ERM O DEF IN IÇ Ã O
Comentários
Use uma While...End While estrutura quando você quiser repetir um conjunto de instruções um número
indefinido de vezes, desde que uma condição permaneça True . Se você quiser mais flexibilidade com o local
em que você testa a condição ou o resultado para o qual você o testa, talvez prefira o ... Instrução loop. Se você
quiser repetir as instruções um número definido de vezes, o para... A próxima instrução é geralmente uma
opção melhor.
NOTE
A While palavra-chave também é usada no... Instrução loop, a cláusula Skip while e a cláusula Take While.
Se condition for True , toda a statements execução até que a End While instrução seja encontrada. Em
seguida, o controle retorna à While instrução e condition é verificado novamente. Se condition ainda for
True , o processo será repetido. Se for False , o controle passará para a instrução que segue a End While
instrução.
A While instrução sempre verifica a condição antes de iniciar o loop. O loop continua enquanto a condição
permanece True . Se condition for False , quando você inserir o loop pela primeira vez, ele não será
executado mesmo uma.
condition Normalmente, os resultados de uma comparação de dois valores, mas podem 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 numérico, que foi convertido em Boolean .
Você pode aninhar While loops colocando um loop dentro de outro. Você também pode aninhar diferentes
tipos de estruturas de controle entre si. Para obter mais informações, consulte estruturas de controle aninhado.
Sair enquanto
A instrução Exit while pode fornecer outra maneira de sair de um While loop. Exit While transfere
imediatamente o controle para a instrução que segue a End While instrução.
Normalmente, você usa Exit While depois que alguma condição é avaliada (por exemplo, em uma
If...Then...Else estrutura). Talvez você queira sair de um loop se detectar uma condição que o torne
desnecessário ou impossível para continuar a iteração, como um valor errado ou uma solicitação de
encerramento. Você pode usar Exit While ao testar uma condição que poderia causar um loop infinito, que é
um loop que poderia executar um número muito grande ou mesmo infinito de vezes. Em seguida, você pode
usar Exit While para escapar o loop.
Você pode inserir qualquer número de Exit While instruções em qualquer lugar no While loop.
Quando usado em While loops aninhados, Exit While o transfere o controle do loop mais interno e para o
próximo nível mais alto de aninhamento.
A Continue While instrução transfere imediatamente o controle para a próxima iteração do loop. Para obter
mais informações, consulte instrução Continue.
Exemplo 1
No exemplo a seguir, as instruções no loop continuam a ser executadas até que a index variável seja maior que
10.
[Link]("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Exemplo 2
O exemplo a seguir ilustra o uso das Continue While Exit While instruções e.
Dim index As Integer = 0
While index < 100000
index += 1
[Link]("")
' Output: 1 2 3 4 9 10
Exemplo 3
O exemplo a seguir lê todas as linhas em um arquivo de texto. O OpenText método abre o arquivo e retorna um
StreamReader que lê os caracteres. Na While condição, o Peek método de StreamReader determina se o
arquivo contém caracteres adicionais.
[Link]()
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)
27/09/2021 • 3 minutes to read
Executa uma série de instruções que referenciam repetidamente um único objeto ou estrutura de modo que as
instruções possam usar uma sintaxe simplificada para acessar membros do objeto ou estrutura. Ao usar uma
estrutura, você só poderá ler os valores dos membros ou invocar métodos, e obterá um erro se tentar atribuir
valores aos membros de uma estrutura usada em uma instrução With...End With .
Syntax
With objectExpression
[ statements ]
End With
Partes
T ERM O DEF IN IÇ Ã O
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.
O tipo de dados de objectExpression pode ser qualquer tipo de classe ou estrutura, ou até mesmo um tipo
elementar do Visual Basic, como Integer . Se objectExpression resultar em algo diferente de um objeto, você
só poderá ler os valores de seus membros ou invocar métodos, e obterá um erro se tentar atribuir valores aos
membros de uma estrutura usada em uma instrução With...End With . Esse é o mesmo erro que você obteria se
invocasse um método que retornasse uma estrutura e imediatamente acessasse e atribuísse um valor a um
membro do resultado da função, como GetAPoint().x = 1 . O problema em ambos os casos é que a estrutura só
existe na pilha de chamadas, e não há maneira de um membro da estrutura alterada nessas situações gravar em
um local de modo que qualquer outro código no programa possa observar a alteração.
objectExpression é avaliada uma vez, ao entrar no bloco. Você não pode reatribuir objectExpression de dentro
do bloco With .
Dentro de um bloco With , você pode acessar os métodos e as propriedades de apenas o objeto especificado
sem qualificá-los. Você pode usar métodos e propriedades de outros objetos, mas deverá qualificá-los com seus
nomes de objeto.
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.
Você não pode ramificar em uma instrução With de fora do bloco.
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, consulte Estruturas de controle
aninhadas.
NOTE
Você também pode usar a palavra-chave With em inicializadores de objetos. Para obter mais informações e exemplos,
consulte Inicializadores de objeto: tipos nomeados e anônimos e tipos anônimos.
Se você estiver usando um bloco With somente para inicializar as propriedades ou os campos de um objeto que acabou
de instanciar, considere usar um inicializador do objeto como alternativa.
Exemplo 1
No exemplo a seguir, cada bloco With executa uma série de instruções em um único objeto.
With theCustomer
.Name = "Coho Vineyard"
.URL = "[Link]
.City = "Redmond"
End With
With [Link]
.Add("First comment.")
.Add("Second comment.")
End With
End Sub
With theWindow
With .InfoLabel
.Content = "This is a message."
.Foreground = [Link]
.Background = [Link]
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)
27/09/2021 • 4 minutes to read
Envia o próximo elemento de uma coleção para uma For Each...Next instrução .
Sintaxe
Yield expression
Parâmetros
T ERM O DEF IN IÇ Ã O
Comentários
A Yield instrução retorna um elemento de uma coleção por vez. A Yield instrução é incluída em uma função
de iterador ou Get um acessador, que executa ierações personalizadas em uma coleção.
Você consome uma função de iterador usando um Para Cada... Próxima instrução ou uma consulta LINQ. Cada
iteração do For Each loop chama a função de iterador. Quando uma Yield instrução é atingida na função de
iterador, é retornado e o expression local atual no código é retido. 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 na instrução para o tipo expression de retorno do Yield
iterador.
Você pode usar uma Exit Function Return instrução ou para encerrar a iteração.
"Yield" não é uma palavra reservada e tem significado especial somente quando é usado em uma Iterator
função Get ou um acessador.
Para obter mais informações sobre funções e acessadores do iterador, Get consulte Iteradores.
Implementação Técnica
O código a seguir retorna IEnumerable (Of String) um de uma função de iterador e, em seguida, itera pelos
elementos do IEnumerable (Of String) .
A chamada MyIteratorFunction para não executa o corpo da função. Em vez disso, a chamada retorna
IEnumerable(Of String) na variável elements .
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 retorna uma
expressão que determina não apenas o valor da variável para consumo pelo corpo do loop, mas também a
propriedade de elementos , que Yield element é um Current IEnumerable (Of String) .
Em cada iteração subsequente do loop For Each , a execução do corpo do iterador continuará de onde parou,
parando novamente quando atingir uma instrução Yield . O For Each loop é concluído quando o final da
função de iterador ou uma Return Exit Function instrução ou é atingido.
Exemplo 1
O exemplo a seguir tem Yield uma instrução que está dentro de um For... Próximo loop. Cada iteração do
corpo da instrução For Each em cria uma chamada para a função de Main Power 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 .
O tipo de retorno do método iterador é IEnumerable<T> , um tipo de interface de iterador. Quando o método
iterador é chamado, ele retorna um objeto enumerável que contém as potências de um número.
Sub Main()
For Each number In Power(2, 8)
[Link](number & " ")
Next
' Output: 2 4 8 16 32 64 128 256
[Link]()
End Sub
Dim result = 1
Exemplo 2
O exemplo a seguir demonstra um acessador Get que é um iterador. A declaração de propriedade inclui um
Iterator modificador.
Sub Main()
Dim theGalaxies As New Galaxies
For Each theGalaxy In [Link]
With theGalaxy
[Link](.Name & " " & .MegaLightYears)
End With
Next
[Link]()
End Sub
Confira também
Instruções
Cláusulas (Visual Basic)
27/09/2021 • 2 minutes to read
Nesta seção
Alias
Como
Alças
Implementações
In
Porta
Desse
Seções relacionadas
Referência da linguagem Visual Basic
Cláusula Alias (Visual Basic)
27/09/2021 • 2 minutes to read
Comentários
A Alias palavra-chave pode ser usada neste contexto:
Instrução Declare
No exemplo a seguir, a Alias palavra-chave é usada para fornecer o nome da função em [Link],
GetUserNameA que getUserName é usada no lugar deste exemplo. A função getUserName é chamada em sub
getUser , que exibe o nome do usuário atual.
Confira também
Palavras-chave
Cláusula As (Visual Basic)
27/09/2021 • 2 minutes to read
Apresenta uma As cláusula, que identifica um tipo de dados em uma instrução de declaração ou uma lista de
restrições em um parâmetro de tipo genérico.
Comentários
A As palavra-chave pode ser usada nesses 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
Para... Próximas instruções
Para cada... Próximas instruções
Cláusula from
Instrução Function
Cláusula Group Join
Instrução Interface
Instrução Operator
Instrução Property
Instrução Structure
Instrução Sub
Tentar... Capturar... Instruções 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)
27/09/2021 • 2 minutes to read
Syntax
proceduredeclaration Handles eventlist
Partes
proceduredeclaration A Sub declaração de procedimento para o procedimento que manipulará o evento.
eventlist Lista dos eventos proceduredeclaration a serem tratados, separados por vírgulas. Os eventos devem
ser gerados pela classe base para a classe atual ou por um objeto declarado usando a WithEvents palavra-
chave.
Comentários
Use a Handles palavra-chave no final de uma declaração de procedimento para fazer com que ela manipule
eventos gerados por uma variável de objeto declarada usando a WithEvents palavra-chave. A Handles palavra-
chave também pode ser usada em uma classe derivada para manipular eventos de uma classe base.
A Handles palavra-chave e a AddHandler instrução permitem que você especifique que procedimentos
específicos manipulam eventos específicos, mas há diferenças. Use a Handles palavra-chave ao definir um
procedimento para especificar que ele trata de um evento específico. A AddHandler instrução conecta
procedimentos a eventos em tempo de execução. Para obter mais informações, consulte instrução AddHandler.
Para eventos personalizados, o aplicativo invoca o AddHandler acessador do evento quando ele adiciona o
procedimento como um manipulador de eventos. Para obter mais informações sobre eventos personalizados,
consulte Event Statement.
Exemplo 1
Public Class ContainerClass
' Module or class level declaration.
WithEvents Obj As New Class1
O exemplo a seguir demonstra como uma classe derivada pode usar a Handles instrução para manipular um
evento de uma classe base.
Exemplo 2
O exemplo a seguir contém dois manipuladores de eventos de botão para um projeto de aplicativo WPF .
Exemplo 3
O exemplo a seguir é equivalente ao exemplo anterior. O eventlist na Handles cláusula contém os eventos
para ambos os botões.
Private Sub Button_Click(sender As [Link], e As [Link]) Handles
[Link], [Link]
[Link]([Link] & " clicked")
End Sub
Confira também
WithEvents
Instrução AddHandler
Instrução RemoveHandler
Instrução Event
Instrução RaiseEvent
Eventos
Cláusula Implements (Visual Basic)
27/09/2021 • 2 minutes to read
Indica que um membro de classe ou estrutura está fornecendo a implementação para um membro definido em
uma interface.
Comentários
A Implements palavra-chave não é a mesma que a instrução Implements. Você usa a Implements instrução para
especificar que uma classe ou estrutura implementa uma ou mais interfaces e, em seguida, para cada membro,
você usa a Implements palavra-chave para especificar qual interface e qual membro ele implementa.
Se uma classe ou estrutura implementa uma interface, ela deve incluir a Implements instrução imediatamente
após a instrução de classe ou a instrução de estruturae deve implementar todos os membros definidos pela
interface.
Reimplementação
Em uma classe derivada, você pode reimplementar um membro de interface que a classe base já tenha
implementado. 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 um nome diferente.
A Implements palavra-chave pode ser usada nos seguintes contextos:
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)
28/09/2021 • 2 minutes to read
Especifica o grupo que a variável de loop deve atravessar em um For Each loop ou especifica a coleção a ser
consultada em uma From Join cláusula, ou Group Join .
Comentários
A In palavra-chave pode ser usada nos seguintes contextos:
Instrução For Each...Next
Cláusula from
Cláusula JOIN
Cláusula Group Join
Confira também
Palavras-chave
Cláusula Into (Visual Basic)
27/09/2021 • 2 minutes to read
Comentários
A Each palavra-chave é usada nos seguintes contextos:
Cláusula Aggregate
Cláusula Group by
Cláusula Group Join
Confira também
Palavras-chave
Cláusula Of (Visual Basic)
27/09/2021 • 2 minutes to read
Apresenta uma Of cláusula, que identifica um parâmetro de tipo em uma classe genérica , estrutura, interface,
delegado ou procedimento. Para obter informações sobre tipos genéricos, consulte tipos genéricos em Visual
Basic.
Usando a palavra-chave of
O exemplo de código a seguir usa a Of palavra-chave para definir o contorno de uma classe que usa dois
parâmetros de tipo. Ele restringe o keyType parâmetro pela IComparable interface, o que significa que o código
de consumo deve fornecer um argumento de tipo que implementa IComparable . Isso é necessário para que o
add procedimento possa chamar o [Link] método. Para obter mais informações sobre
restrições, consulte lista de tipos.
Se você concluir a definição de classe anterior, poderá construir uma variedade de dictionary classes a partir
dela. Os tipos que você fornece entryType e keyType determinam que tipo de entrada a classe contém e que
tipo de chave ela associa a cada entrada. Devido à restrição, você deve fornecer a keyType um tipo que
implementa IComparable .
O exemplo de código a seguir cria um objeto que contém String entradas e associa uma Integer chave a
cada uma delas. Integer implementa IComparable e, portanto, satisfaz a restrição em keyType .
Confira também
IComparable
Lista de Tipos
Tipos genéricos no Visual Basic
In
Fora
Contextos de declaração e níveis de acesso padrão
(Visual Basic)
27/09/2021 • 2 minutes to read
este tópico descreve quais tipos de Visual Basic podem ser declarados dentro dos outros tipos e quais seus
níveis de acesso padrão se não forem especificados.
Confira também
Friend
Privado
Público
Lista de atributos (Visual Basic)
27/09/2021 • 2 minutes to read
Especifica os atributos a serem aplicados a um elemento de programação declarado. Vários atributos são
separados por vírgulas. A seguir está a sintaxe de um atributo.
Syntax
[ attributemodifier ] attributename [ ( attributearguments | attributeinitializer ) ]
Partes
PA RT E DESC RIÇ Ã O
Comentários
Você pode aplicar um ou mais atributos a praticamente qualquer elemento de programação (tipos,
procedimentos, propriedades e assim por diante). Os atributos aparecem nos metadados do assembly e podem
ajudá-lo a anotar seu código ou especificar como usar um elemento de programação específico. Você pode
aplicar atributos definidos por Visual Basic e .NET Framework e pode definir seus próprios atributos.
Para obter mais informações sobre quando usar atributos, consulte Visão geral de atributos. Para obter
informações sobre nomes de atributo, consulte Nomes de elemento declarados.
Regras
Colocação. Você pode aplicar atributos à maioria dos elementos de programação declarados. Para
aplicar um ou mais atributos, coloque 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.
Colchetes angulares. Se você fornecer uma lista de atributos, deverá incluí-la entre colchetes angulares
(" < " e " > ").
Par te da Declaração. O atributo deve fazer parte da declaração do elemento, não de uma instrução
separada. Você pode usar a sequência de continuação de linha (" ") para estender a instrução _ de
declaração para várias linhas de código-fonte.
Modificadores. Um modificador de atributo ( ou ) é necessário em cada atributo aplicado a um
elemento de programação no Assembly início de um arquivo de Module origem. Modificadores de
atributo não são permitidos em atributos aplicados a elementos que não estão no início de um arquivo
de origem.
Argumentos. Todos os argumentos posicionais para um atributo devem preceder qualquer variável ou
inicializador de propriedade.
Exemplo
O exemplo a seguir aplica o DllImportAttribute atributo a uma definição de esqueleto de um Function
procedimento.
<DllImportAttribute("[Link]", EntryPoint:="MoveFileW",
SetLastError:=True, CharSet:=[Link],
ExactSpelling:=True,
CallingConvention:=[Link])>
Public Shared Function MoveFile(ByVal src As String,
ByVal dst As String) As Boolean
' This function copies a file from the path src to the path dst.
' Leave this function empty. The DLLImport attribute forces calls
' to MoveFile to be forwarded to MoveFileW in [Link].
End Function
DllImportAttribute indica que o procedimento atribuído representa um ponto de entrada em uma DLL
(biblioteca de vínculo dinâmico) não processada. O atributo fornece o nome da DLL como um argumento
posicional e as outras informações como inicializadores de variável.
Confira também
Assembly
Módulo <keyword>
Visão geral de atributos
Como: Quebrar e combinar instruções no código
Lista de parâmetros (Visual Basic)
27/09/2021 • 3 minutes to read
Especifica os parâmetros que um procedimento espera quando é chamado. Vários parâmetros são separados
por vírgulas. Veja a seguir a sintaxe de um parâmetro.
Syntax
[ <attributelist> ] [ Optional ] [{ ByVal | ByRef }] [ ParamArray ]
parametername[( )] [ As parametertype ] [ = defaultvalue ]
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
Opcional. Especifica que esse parâmetro não é necessário quando o procedimento é chamado.
ByVal
Opcional. Especifica que o procedimento não pode substituir ou reatribuir o elemento Variable subjacente ao
argumento correspondente no código de chamada.
ByRef
Opcional. Especifica que o procedimento pode modificar o elemento variável subjacente no código de chamada
da mesma maneira que o próprio código de chamada pode.
ParamArray
Opcional. Especifica que o último parâmetro na lista de parâmetros é uma matriz opcional de elementos do tipo
de dados especificado. Isso permite que o código de chamada passe um número arbitrário de argumentos para
o procedimento.
parametername
Obrigatórios. Nome da variável local que representa o parâmetro.
parametertype
Obrigatório se Option Strict for On . Tipo de dados da variável local que representa o parâmetro.
defaultvalue
Obrigatório para Optional parâmetros. Qualquer expressão constante ou constante que seja avaliada como o
tipo de dados do parâmetro. Se o tipo for Object , ou uma classe, interface, matriz ou estrutura, o valor padrão
só poderá ser Nothing .
Comentários
Os parâmetros são circundados 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 .
Quando o código de chamada chama o procedimento, ele passa um argumento para cada parâmetro
necessário. Para obter mais informações, consulte diferenças entre parâmetros e argumentos.
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 não for variável (uma constante, literal, enumeração ou
expressão), será impossível para qualquer código alterá-lo. Se for um elemento variável (uma variável
declarada, um campo, uma propriedade, um elemento de matriz ou um elemento de estrutura), o código de
chamada poderá alterá-lo. Para obter mais informações, consulte diferenças entre argumentos modificáveis e
não modificáveis.
Se um elemento variable for passado ByRef , o procedimento também poderá alterá-lo. Para obter mais
informações, consulte diferenças entre passar um argumento por valor e por referência.
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 delimitando uma lista vazia. Isso melhora a
legibilidade do seu código, esclarecendo que o elemento é um procedimento.
Parâmetros opcionais. Se você usar o Optional modificador em um parâmetro, todos os parâmetros
subsequentes na lista também deverão ser opcionais e serem declarados usando o Optional
modificador.
Cada declaração de parâmetro opcional deve fornecer a defaultvalue cláusula.
Para obter mais informações, consulte parâmetros opcionais.
Matrizes de parâmetros. Você deve especificar ByVal para um ParamArray parâmetro.
Você não pode usar ambos Optional e ParamArray na mesma lista de parâmetros.
Para obter mais informações, consulte matrizes de parâmetros.
Mecanismo de passagem. O mecanismo padrão para cada argumento é ByVal , o que significa que o
procedimento não pode alterar o elemento de variável subjacente. No entanto, se o elemento for um tipo
de referência, o procedimento poderá modificar o conteúdo ou os membros do objeto subjacente,
mesmo que ele não possa substituir ou reatribuir o próprio objeto.
Nomes de parâmetro. Se o tipo de dados do parâmetro for uma matriz, siga parametername
imediatamente por parênteses. Para obter mais informações sobre nomes de parâmetro, consulte nomes
de elemento declarados.
Exemplo
O exemplo a seguir mostra um Function procedimento que define dois parâmetros.
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)
27/09/2021 • 3 minutes to read
Especifica os parâmetros de tipo para um elemento de programação genérico . Vários parâmetros são
separados por vírgulas. A seguir está a sintaxe para um parâmetro de tipo.
Syntax
[genericmodifier] typename [ As constraintlist ]
Partes
T ERM O DEF IN IÇ Ã O
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 ele 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, consulte tipos genéricos em Visual Basic.
Para obter mais informações sobre nomes de parâmetro de tipo, consulte nomes de elemento declarados.
Regras
Parênteses. Se você fornecer uma lista de parâmetros de tipo, deverá colocá-la entre parênteses e
deverá introduzir a lista com a palavra-chave de . Você usa Of apenas uma vez, no início da lista.
Reflexiva. Uma lista de restrições em um parâmetro de tipo pode incluir os seguintes itens em qualquer
combinação:
Qualquer número de interfaces. O tipo fornecido deve implementar todas as interfaces nesta lista.
No máximo uma classe. O tipo fornecido deve herdar dessa classe.
A palavra-chave New . O tipo fornecido deve expor um construtor sem parâmetros que o seu tipo
genérico possa acessar. Isso será útil se você restringir um parâmetro de tipo por uma ou mais
interfaces. Um tipo que implementa interfaces não expõe necessariamente um construtor e,
dependendo do nível de acesso de um construtor, o código dentro do tipo genérico pode não ser
capaz de acessá-lo.
A Class palavra-chave ou a Structure palavra-chave. A Class palavra-chave restringe um
parâmetro de tipo genérico para exigir que qualquer argumento de tipo passado para ele seja um
tipo de referência, por exemplo, uma cadeia de caracteres, matriz ou delegado, ou um objeto
criado a partir de uma classe. A Structure palavra-chave restringe um parâmetro de tipo
genérico para exigir que qualquer argumento de tipo passado para ele seja um tipo de valor, por
exemplo, um tipo de dados de estrutura, enumeração ou elementar. Você não pode incluir Class e
Structure no mesmo constraintlist .
Comportamento
Substituição de tempo de compilação. Quando você cria um tipo construído a partir de um
elemento de programação genérico, você fornece um tipo definido para cada parâmetro de tipo. o
compilador Visual Basic substitui esse tipo fornecido para cada ocorrência de typename dentro do
elemento genérico.
Ausência de restrições. Se você não especificar nenhuma restrição em um parâmetro de tipo, seu
código será limitado às operações e aos membros com suporte do tipo de dados Object para esse
parâmetro de tipo.
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.
Exemplo 2
Como dictionary o é genérico, o código que o usa pode criar uma variedade de objetos a partir dele, cada um
com a mesma funcionalidade, mas agindo em um tipo de dados diferente. O exemplo a seguir mostra uma linha
de código que cria um dictionary objeto com String entradas e Integer chaves.
Exemplo 3
O exemplo a seguir mostra a definição esqueleto equivalente gerada pelo exemplo anterior.
Public Class dictionary
Public Sub Add(ByVal et As String, ByVal kt As Integer)
Dim dk As Integer
If [Link](dk) = 0 Then
End If
End Sub
End Class
Confira também
Desse
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
Fora
marcações XML recomendadas para comentários
da documentação (Visual Basic)
27/09/2021 • 2 minutes to read
o compilador Visual Basic pode processar comentários de documentação em seu código para um arquivo XML.
Você pode usar ferramentas adicionais para processar o arquivo XML na documentação do.
Comentários XML são permitidos em construções de código, como tipos e membros de tipo. Para tipos parciais,
apenas uma parte do tipo pode ter comentários XML, embora não haja nenhuma restrição ao comentar seus
membros.
NOTE
Comentários de documentação não podem ser aplicados a namespaces. O motivo é que um namespace pode abranger
vários assemblies, e nem todos os assemblies precisam ser carregados ao mesmo tempo.
O compilador processa qualquer marca que seja XML válida. As marcas a seguir fornecem funcionalidade
comumente usada 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.)
NOTE
Se você quiser que os colchetes angulares apareçam no texto de um comentário de documentação, use < e > .
Por exemplo, a cadeia de caracteres "<text in angle brackets>" será exibida como
<text in angle brackets> .
Confira também
Documentando o código com XML
-Doc
Como criar documentação XML
<c> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<c>text</c>
Parâmetros
PA RÂ M ET RO DESC RIÇ Ã O
Comentários
A <c> marca fornece uma maneira de indicar que o texto dentro de uma descrição deve ser marcado como
código. Use <code> para indicar várias linhas como código.
Compile com -Doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <c> marca na seção de resumo para indicar que Counter é o código.
''' <summary>
''' Resets the value the <c>Counter</c> field.
''' </summary>
Public Sub ResetCounter()
counterValue = 0
End Sub
Private counterValue As Integer = 0
''' <summary>
''' Returns the number of times Counter was called.
''' </summary>
''' <value>Number of times Counter was called.</value>
Public ReadOnly Property Counter() As Integer
Get
counterValue += 1
Return counterValue
End Get
End Property
Confira também
Marcações de Comentário XML
<code> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<code>content</code>
Parâmetros
content
O texto a ser marcado como código.
Comentários
Use a <code> marca para indicar várias linhas como código. Use <c> para indicar que o texto dentro de uma
descrição deve ser marcado como código.
Compile com -doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <code> marca para incluir o código de exemplo para usar o campo ID .
Confira também
Marcações de Comentário XML
<example> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<example>description</example>
Parâmetros
description
Uma descrição do exemplo de código.
Comentários
A <example> marca permite especificar um exemplo de como usar um método ou outro membro da biblioteca.
Isso geralmente envolve o uso da <code> marca.
Compile com -Doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <example> marca para incluir um exemplo para usar o ID campo.
Confira também
Marcações de Comentário XML
<exception> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<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 <exception> marca para especificar quais exceções podem ser geradas. Essa marcação é aplicada a uma
definição de método.
Compile com -Doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <exception> marca para descrever uma exceção que a IntDivide função pode gerar.
Confira também
Marcações de Comentário XML
<include> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<include file="filename" path="tagpath[@name='id']" />
Parâmetros
filename
Obrigatórios. O nome do arquivo que contém a documentação. O nome do arquivo pode ser qualificado com
um caminho. Coloque entre filename aspas duplas ("").
tagpath
Obrigatórios. O caminho das marcas em filename que leva à marca name . Coloque o caminho entre aspas
duplas ("").
name
Obrigatórios. O especificador de nome na marca que precede os comentários. Name terá um id .
id
Obrigatórios. A ID da marca que precede os comentários. Coloque a ID entre aspas simples (' ').
Comentários
Use a <include> marca para fazer referência a comentários em outro arquivo que descreva 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 <include> marca usa a recomendação da versão 1,0 do W3C XML Path Language (XPath). Para obter mais
informações sobre maneiras de personalizar seu <include> uso, consulte [Link] .
Exemplo
Este exemplo usa a <include> marca para importar comentários de documentação de membro de um arquivo
chamado [Link] .
Confira também
Marcações de Comentário XML
<list> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<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 "Bullet" para uma lista com marcadores, "Number" para uma lista numerada ou
"Table" para uma tabela de duas colunas.
term
Usado somente quando type é "Table". Um termo a definir, que é definido na marca de descrição.
description
Quando type é "Bullet" ou "Number", description é um item da lista quando type é "Table", description éa
definição de term .
Comentários
O <listheader> bloco define o título de uma tabela ou de uma lista de definições. Ao definir uma tabela, você
só precisa fornecer uma entrada para term no título.
Cada item na lista é especificado com um <item> bloco. Ao criar uma lista de definições, você deve especificar
term e description . No entanto, para uma tabela, lista com marcadores ou lista numerada, você só precisa
fornecer uma entrada para description .
Uma lista ou tabela pode ter tantos <item> blocos quantos forem necessários.
Compile com -Doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <list> marca para definir uma lista com marcadores na seção de comentários.
''' <remarks>Before calling the <c>Reset</c> method, be sure to:
''' <list type="bullet">
''' <item><description>Close all connections.</description></item>
''' <item><description>Save the object state.</description></item>
''' </list>
''' </remarks>
Public Sub Reset()
' Code goes here.
End Sub
Confira também
Marcações de Comentário XML
<para> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<para>content</para>
Parâmetros
content
O texto do parágrafo.
Comentários
A marca é para uso dentro de uma marca, como , ou , e permite adicionar <para> <summary> estrutura ao
<remarks> <returns> texto.
Compile com -doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <para> marca para dividir a seção de comentários do método em dois UpdateRecord
parágrafos.
Confira também
Marcações de Comentário XML
<param> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<param name="name">description</param>
Parâmetros
name
O nome do parâmetro de um método. Coloque o nome entre aspas duplas (" ").
description
Uma descrição do parâmetro.
Comentários
A marca deve ser usada no comentário de uma declaração de método para descrever <param> um dos
parâmetros para o método .
O texto da <param> marca será exibido nos seguintes locais:
Informações de parâmetro do IntelliSense. Para obter mais informações, veja Usando o IntelliSense.
Pesquisador de Objetos. Para obter mais informações, consulte Exibindo a estrutura do código.
Compile com -doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <param> marca para descrever o parâmetro id .
Confira também
Marcações de Comentário XML
<paramref> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<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 <paramref> marca fornece uma maneira de indicar que uma palavra é um parâmetro. O arquivo XML pode
ser processado para formatar esse parâmetro de alguma maneira distinta.
Compile com -doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <paramref> marca para se referir ao parâmetro id .
Confira também
Marcações de Comentário XML
<permission> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<permission cref="member">description</permission>
Parâmetros
member
Uma referência a um membro ou campo disponível para ser chamado do ambiente de compilação atual. O
compilador verifica se o elemento de código fornecido existe e converte member no nome de elemento
canônico no XML de saída. Coloque entre member aspas (" ").
description
Uma descrição do acesso ao membro.
Comentários
Use a <permission> marca para documentar o acesso de um membro. Use a PermissionSet classe para
especificar o acesso a um membro.
Compile com -doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa <permission> a marca para descrever que o é exigido pelo método FileIOPermission
ReadFile .
Confira também
Marcações de Comentário XML
<remarks> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<remarks>description</remarks>
Parâmetros
description
Uma descrição do membro.
Comentários
Use a <remarks> marca 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 informações sobre o Pesquisador de
Objetos, consulte Exibindo a estrutura de código.
Compile com -doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <remarks> marca para explicar o que o método UpdateRecord faz.
Confira também
Marcações de Comentário XML
<returns> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<returns>description</returns>
Parâmetros
description
Uma descrição do valor retornado.
Comentários
Use a <returns> marca no comentário de uma declaração de método para descrever o valor de retorno.
Compile com -doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <returns> marca para explicar o que a função DoesRecordExist retorna.
Confira também
Marcações de Comentário XML
<see> (Visual Basic)
28/09/2021 • 2 minutes to read
Sintaxe
<see cref="member"/>
Parâmetros
member
Uma referência a um membro ou campo disponível para ser chamado do ambiente de compilação atual. O
compilador verifica se o elemento de código fornecido existe e passa member para o nome de elemento no XML
de saída. member deve ser exibido entre aspas duplas (" ").
Comentários
Use a <see> marca para especificar um link de dentro do texto. Use <seealso> para indicar o texto que você
pode querer que apareça em uma seção "Veja também".
Compile com -Doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <see> marca na UpdateRecord seção comentários para fazer referência ao DoesRecordExist
método.
Confira também
Marcações de Comentário XML
<seealso> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<seealso cref="member"/>
Parâmetros
member
Uma referência a um membro ou campo disponível para ser chamado do ambiente de compilação atual. O
compilador verifica se o elemento de código fornecido existe e passa member para o nome de elemento no XML
de saída. member deve ser exibido entre aspas duplas (" ").
Comentários
Use <seealso> a marca para especificar o texto que você deseja que apareça em uma seção Consulte Também.
Use <see> para especificar um link de dentro do texto.
Compile com -doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa <seealso> a marca na seção de comentários para se referir ao método DoesRecordExist
UpdateRecord .
Confira também
Marcações de Comentário XML
<summary> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<summary>description</summary>
Parâmetros
description
Um resumo do objeto.
Comentários
Use a <summary> marca para descrever um tipo ou um membro de tipo. Use <remarks> para adicionar
informações complementares a uma descrição de tipo.
O texto da marca é a única fonte de informações sobre o tipo no IntelliSense e também <summary> é exibido no
Pesquisador de Objetos. Para obter informações sobre o Pesquisador de Objetos, consulte Exibindo a estrutura
de código.
Compile com -doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <summary> marca para descrever o método e a propriedade ResetCounter Counter .
''' <summary>
''' Resets the value the <c>Counter</c> field.
''' </summary>
Public Sub ResetCounter()
counterValue = 0
End Sub
Private counterValue As Integer = 0
''' <summary>
''' Returns the number of times Counter was called.
''' </summary>
''' <value>Number of times Counter was called.</value>
Public ReadOnly Property Counter() As Integer
Get
counterValue += 1
Return counterValue
End Get
End Property
Confira também
Marcações de Comentário XML
<typeparam> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<typeparam name="name">description</typeparam>
Parâmetros
name
O nome do parâmetro de tipo. Coloque o nome entre aspas duplas (" ").
description
Uma descrição do parâmetro de tipo.
Comentários
Use a marca no comentário para um tipo genérico ou declaração de <typeparam> membro genérico para
descrever um dos parâmetros de tipo.
Compile com -doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <typeparam> marca para descrever o parâmetro id .
Confira também
Marcações de Comentário XML
<value> (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
<value>property-description</value>
Parâmetros
property-description
Uma descrição da propriedade.
Comentários
Use a <value> marca para descrever uma propriedade. observe que quando você adiciona uma propriedade
usando o assistente de código no ambiente de desenvolvimento Visual Studio, ela adicionará uma <summary>
marca para a nova propriedade. Em seguida, você deve adicionar manualmente uma <value> marca para
descrever o valor que a propriedade representa.
Compile com -Doc para processar comentários de documentação em um arquivo.
Exemplo
Este exemplo usa a <value> marca para descrever o valor que a Counter Propriedade mantém.
''' <summary>
''' Resets the value the <c>Counter</c> field.
''' </summary>
Public Sub ResetCounter()
counterValue = 0
End Sub
Private counterValue As Integer = 0
''' <summary>
''' Returns the number of times Counter was called.
''' </summary>
''' <value>Number of times Counter was called.</value>
Public ReadOnly Property Counter() As Integer
Get
counterValue += 1
Return counterValue
End Get
End Property
Confira também
Marcações de Comentário XML
Propriedades do eixo XML (Visual Basic)
27/09/2021 • 2 minutes to read
Os tópicos nesta seção documentam a sintaxe das propriedades do eixo XML Visual Basic. As propriedades do
eixo XML facilitam o acesso ao XML diretamente em seu código.
Nesta seção
TÓ P IC O DESC RIÇ Ã O
Propriedade de Eixo do Atributo XML Descreve como acessar os atributos de um XElement objeto .
Propriedade do Eixo Filho XML Descreve como acessar os filhos de um XElement objeto .
Confira também
XML
Propriedade de eixo do atributo XML (Visual Basic)
27/09/2021 • 3 minutes to read
Fornece acesso ao valor de um atributo para um XElement objeto ou para o primeiro elemento em uma coleção
de XElement objetos.
Syntax
object.@attribute
' -or-
object.@<attribute>
Partes
object Necessário. Um XElement objeto ou uma coleção de XElement objetos.
. @ Obrigatório. Denota o início de uma propriedade de eixo de atributo.
< opcional. Indica o início do nome do atributo quando attribute não é um identificador válido no Visual Basic.
attribute Necessário. Nome do atributo a ser acessado, do formato [ prefix :] name .
PA RT E DESC RIÇ Ã O
> Opcional. Indica o fim do nome do atributo quando attribute não é um identificador válido no Visual Basic.
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 de eixo de atributo XML para acessar o valor de um atributo por nome de um
XElement objeto ou do primeiro elemento em uma coleção de XElement objetos. Você pode recuperar um valor
de atributo por nome ou adicionar um novo atributo a um elemento especificando um novo nome precedido
pelo identificador @.
Quando você faz referência a um atributo XML usando o identificador @, o valor do atributo é retornado como
uma cadeia de caracteres e você não precisa especificar explicitamente a Value propriedade.
as regras de nomenclatura para atributos XML diferem das regras de nomenclatura para identificadores de
Visual Basic. para acessar um atributo XML que tem um nome que não é um identificador de Visual Basic válido,
coloque o nome entre colchetes angulares ( < and > ).
Namespaces XML
O nome em uma propriedade de eixo de atributo pode usar somente os prefixos de namespace XML declarados
globalmente usando a Imports instrução. Ele não pode usar prefixos de namespace XML declarados localmente
em literais de elemento XML. Para obter mais informações, consulte instrução Imports (namespace XML).
Exemplo 1
O exemplo a seguir mostra como obter os valores dos atributos XML nomeados type de uma coleção de
elementos XML que são nomeados phone .
[Link](phoneTypes)
<type>home</type>
<type>work</type>
</phoneTypes>
Exemplo 2
O exemplo a seguir mostra como criar atributos para um elemento XML de forma declarativa, como parte do
XML, e dinamicamente adicionando um atributo a uma instância de um XElement objeto. O type atributo é
criado declarativamente e o owner atributo é criado dinamicamente.
[Link](phone2)
Exemplo 3
O exemplo a seguir usa a sintaxe de colchete angular para obter o valor do atributo XML chamado number-type
, que não é um identificador válido no Visual Basic.
Dim phone As XElement =
<phone number-type=" work">425-555-0145</phone>
Exemplo 4
O exemplo a seguir declara ns como um prefixo de namespace 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 ".
Class TestClass3
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)
27/09/2021 • 2 minutes to read
Fornece acesso aos descendentes de um dos seguintes: um objeto de XElement , um objeto de XDocument ,
uma coleção de objetos XElement , ou uma coleção de XDocument objeto.
Syntax
object.<child>
Partes
T ERM O DEF IN IÇ Ã O
Valor Retornado
Uma coleção de objetos XElement .
Comentários
Você pode usar uma propriedade de eixo filho XML para acessar nós filho por nome de um objeto ou ou de
XElement uma coleção de objetos ou XDocument XElement XDocument . Use a propriedade XML Value para
acessar o valor do primeiro nó filho na coleção retornada. Para obter mais informações, consulte Propriedade
xml value.
O Visual Basic compilador converte propriedades do eixo filho em chamadas para o Elements método .
XML Namespaces
O nome em uma propriedade de eixo filho pode usar apenas prefixos de namespace XML declarados
globalmente com a Imports instrução . Ele não pode usar prefixos de namespace XML declarados localmente
dentro de literais de elemento XML. Para obter mais informações, consulte Instrução Imports (Namespace XML).
Exemplo 1
O exemplo a seguir mostra como acessar os nós filho phone nomeados do contact objeto .
Exemplo 2
O exemplo a seguir mostra como acessar os nós filho nomeados da coleção retornada pela phone propriedade
do eixo filho do objeto contact contacts .
Exemplo 3
O exemplo a seguir declara ns como um prefixo de namespace 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 .
Imports <xmlns:ns = "[Link]
Class TestClass4
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 de eixo descendente XML (Visual
Basic)
27/09/2021 • 2 minutes to read
Fornece acesso aos descendentes do seguinte: um objeto, um objeto, uma coleção de objetos XElement ou uma
coleção de objetos XDocument XElement XDocument .
Syntax
object...<descendant>
Partes
object Necessário. Um XElement objeto, um XDocument objeto, uma coleção de XElement objetos ou uma
coleção de objetos XDocument .
...< Necessário. Indica o início de uma propriedade de eixo descendente.
descendant Necessário. Nome dos nós descendentes a acessar, do formulário [ prefix:]name .
PA RT E DESC RIÇ Ã 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 ou ou de uma XElement coleção de objetos ou XDocument XElement XDocument . Use a propriedade
XML Value para acessar o valor do primeiro nó descendente na coleção retornada. Para obter mais
informações, consulte Propriedade xml value.
O Visual Basic compilador converte propriedades descendentes do eixo em chamadas para o Descendants
método .
XML Namespaces
O nome em uma propriedade de eixo descendente pode usar apenas namespaces XML declarados globalmente
com a Imports instrução . Ele não pode usar namespaces XML declarados localmente dentro de literais de
elemento XML. Para obter mais informações, consulte Instrução Imports (Namespace XML).
Exemplo 1
O exemplo a seguir mostra como acessar o valor do primeiro nó descendente chamado e os valores de todos os
nós name descendentes phone nomeados do contacts objeto .
Exemplo 2
O exemplo a seguir declara ns como um prefixo de namespace XML. Em seguida, ele usa o prefixo do
namespace para criar um literal XML e acessar o valor do primeiro nó filho com o nome qualificado ns:name .
Class TestClass2
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)
27/09/2021 • 2 minutes to read
Syntax
object(index)
Partes
T ERM O DEF IN IÇ Ã O
Valor Retornado
O objeto do local especificado na coleção ou se Nothing o índice estiver fora do intervalo.
Comentários
Você pode usar a propriedade do indexador de extensão para acessar elementos individuais em uma coleção.
Essa propriedade de indexador normalmente é usada na saída das propriedades do eixo XML. As propriedades
de eixo descendente xml e filho XML retornam coleções de XElement objetos ou um valor de atributo.
O Visual Basic compilador converte propriedades do indexador de extensão em chamadas para o
ElementAtOrDefault método . Ao contrário de um indexador de matriz, ElementAtOrDefault o método Nothing
retornará 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.
Essa propriedade de indexador é como uma propriedade de extensão para coleções que implementam ou : ela é
usada somente se a coleção não tiver um indexador ou IEnumerable<T> IQueryable<T> uma propriedade
padrão.
Para acessar o valor do primeiro elemento em uma coleção de objetos ou , você pode usar a XElement
XAttribute propriedade Value XML. Para obter mais informações, consulte Propriedade xml value.
Exemplo
O exemplo a seguir mostra como usar o indexador de extensão para acessar o segundo nó filho em uma
coleção de XElement objetos . A coleção é acessada usando a propriedade do eixo filho, que obtém todos os
elementos filho phone nomeados no contact objeto .
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)
27/09/2021 • 2 minutes to read
Syntax
[Link]
Partes
T ERM O DEF IN IÇ Ã O
Valor Retornado
Uma String que contém o valor do primeiro elemento da coleção ou Nothing se a coleção estiver vazia.
Comentários
A Value Propriedade facilita o acesso ao valor do primeiro elemento em uma coleção de XElement objetos. 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 Value Propriedade do
primeiro elemento na coleção.
NOTE
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 Value propriedade.
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.
A Value propriedade é uma propriedade de extensão para tipos que implementam IEnumerable(Of XElement) . A
associação dessa propriedade de extensão é como a associação de métodos de extensão: se um tipo
implementar uma das interfaces e definir uma propriedade com o nome "valor", essa propriedade terá
precedência sobre a propriedade de extensão. Em outras palavras, essa Value propriedade pode ser substituída
definindo-se uma nova propriedade em uma classe que implementa IEnumerable(Of XElement) .
Exemplo 1
O exemplo a seguir mostra como usar a Value propriedade para acessar o primeiro nó em uma coleção de
XElement objetos. 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 contact objeto.
Exemplo 2
O exemplo a seguir mostra como obter o valor de um atributo XML de uma coleção de XAttribute objetos. O
exemplo usa a Propriedade Axis do atributo para exibir o valor do type atributo para todos os phone
elementos.
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)
27/09/2021 • 2 minutes to read
Os tópicos nesta seção documentam a sintaxe de literais XML Visual Basic. A sintaxe de literal do XML permite
incorporar XML diretamente ao código.
Nesta seção
TÓ P IC O DESC RIÇ Ã O
Literal de Instrução de Processamento XML Descreve a sintaxe de literais que representam objetos
XProcessingInstruction.
Confira também
XML
Literal do elemento XML (Visual Basic)
27/09/2021 • 5 minutes to read
Syntax
<name [ attributeList ] />
-or-
<name [ attributeList ] > [ elementContents ] </[ name ]>
Partes
<
PA RT E DESC RIÇ Ã O
Expressão inserida do formulário <%= nameExp %> . O tipo de nameExp deve ser String ou um
tipo implicitamente conversível para XName . Uma expressão inserida não é permitida em uma
marca de fechamento de um elemento.
attributeList
Opcional. Representa a marca de fechamento do elemento. O name parâmetro opcional não é permitido
quando é o resultado de uma expressão inserida.
Valor Retornado
Um objeto XElement.
Comentários
Você pode usar a sintaxe literal do elemento XML para criar XElement objetos em seu código.
NOTE
Um literal XML pode abranger várias linhas sem usar caracteres de continuação de linha. esse recurso permite que você
copie o conteúdo de um documento XML e cole-o diretamente em um programa Visual Basic.
As expressões inseridas do formulário <%= exp %> permitem que você adicione informações dinâmicas a um
literal de elemento XML. Para obter mais informações, consulte expressões inseridas em XML.
o compilador Visual Basic converte o literal do elemento XML em chamadas para o XElement construtor e, se
necessário, o XAttribute construtor.
Namespaces XML
Os prefixos de namespace XML são úteis quando você precisa criar literais XML com elementos do mesmo
namespace muitas vezes no código. Você pode usar prefixos de namespace XML globais, que você define
usando a Imports instrução ou prefixos locais, que você define usando a xmlns:xmlPrefix="xmlNamespace"
sintaxe de atributo. Para obter mais informações, consulte instrução Imports (namespace XML).
De acordo com as regras de escopo para namespaces XML, os prefixos locais têm precedência sobre prefixos
globais. No entanto, se um literal XML definir um namespace 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
XML global.
o compilador Visual Basic converte cada namespace xml global que é usado por um literal xml em uma
definição de namespace local no código gerado. Namespaces 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 tem dois elementos vazios aninhados.
[Link](test1)
O exemplo exibe o texto a seguir. Observe que o literal preserva a estrutura dos elementos vazios.
<outer>
<inner1></inner1>
<inner2 />
</outer>
Exemplo 2
O exemplo a seguir mostra como usar expressões inseridas para nomear um elemento e criar atributos.
Dim elementType = "book"
Dim authorName = "My Author"
Dim attributeName1 = "year"
Dim attributeValue1 = 1999
Dim attributeName2 = "title"
Dim attributeValue2 = "My Book"
[Link](book)
Exemplo 3
O exemplo a seguir declara ns como um prefixo de namespace XML. Em seguida, ele usa o prefixo do
namespace para criar um literal XML e exibe a forma final do elemento.
Class TestClass1
Dim test =
<ns:outer>
<ns:middle xmlns:ns="[Link]
<ns:inner1/>
<%= inner2 %>
</ns:middle>
</ns:outer>
End Class
<ns:outer xmlns:ns="[Link]
<ns:middle xmlns:ns="[Link]
<ns:inner1 />
<inner2 xmlns="[Link] />
</ns:middle>
</ns:outer>
Observe que o compilador converteu o prefixo do namespace XML global em uma definição de prefixo para o
namespace XML. O <ns:middle> elemento redefine o prefixo do namespace XML para o <ns:inner1> elemento.
No entanto, o <ns:inner2> elemento usa o namespace definido pela Imports instrução.
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)
27/09/2021 • 2 minutes to read
Syntax
<?xml version="1.0" [encoding="encoding"] [standalone="standalone"] ?>
[ piCommentList ]
rootElement
[ piCommentList ]
Partes
T ERM O DEF IN IÇ Ã O
Um objeto XElement.
Uma coleção que contém um XElement
objeto e qualquer número de objetos e
XProcessingInstruction XComment .
Valor Retornado
Um objeto XDocument.
Comentários
Um literal de documento XML é identificado pela declaração XML no início do literal. Embora cada literal de
documento XML deve ter exatamente um elemento XML raiz, ele pode ter qualquer número de instruções de
processamento XML e comentários XML.
Um literal de documento XML não pode aparecer em um elemento XML.
NOTE
Um literal 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 o copie diretamente em um Visual Basic de dados.
O Visual Basic compilador converte o literal do documento XML em chamadas para XDocument XDeclaration os
construtores e .
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.
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)
27/09/2021 • 2 minutes to read
Syntax
<![CDATA[content]]>
Partes
<![CDATA[
Obrigatórios. Indica o início da seção XML CDATA.
content
Obrigatórios. Conteúdo de texto a ser exibido na seção CDATA XML.
]]>
Obrigatórios. Indica o final da seção.
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 XML CDATA pode conter qualquer texto. Isso inclui caracteres XML reservados. A seção CDATA XML
termina com a sequência "]]>". Isso implica os seguintes pontos:
Você não pode usar uma expressão inserida em um literal CDATA XML porque os delimitadores de
expressão inserida são um conteúdo CDATA XML válido.
As seções CDATA XML não podem ser aninhadas, pois não podem content conter o valor "]]>".
Você pode atribuir um literal CDATA XML a uma variável ou incluí-lo em um literal de elemento XML.
NOTE
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 o copie diretamente em um Visual Basic de dados.
O Visual Basic compilador converte o literal CDATA XML em uma chamada para XCData o construtor.
Exemplo
O exemplo a seguir cria uma seção CDATA que contém o texto "Pode conter marcas <XML> literais".
Syntax
<!-- content -->
Partes
T ERM O DEF IN IÇ Ã O
Valor Retornado
Um objeto XComment.
Comentários
Literais de comentário XML não contêm conteúdo do documento; eles contêm informações sobre o documento.
A seção comentário XML termina com a sequência "-->". Isso implica os seguintes pontos:
Você não pode usar uma expressão inserida em um literal de comentário XML porque os delimitadores
de expressão inserida são conteúdo de comentário XML válido.
As seções de comentário XML não podem ser aninhadas, pois 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.
NOTE
Um literal XML pode abranger várias linhas sem usar caracteres de continuação de linha. Esse recurso permite que você
copie o conteúdo de um documento XML e o copie diretamente em um Visual Basic de dados.
O Visual Basic compilador converte o literal de comentário XML em uma chamada para XComment o construtor.
Exemplo
O exemplo a seguir cria um comentário XML que contém o texto "Este é um comentário".
Dim com As XComment = <!-- This is a comment -->
Confira também
XComment
Literal do Elemento XML
Literais XML
Criando XML no Visual Basic
Literal de instrução de processamento XML (Visual
Basic)
27/09/2021 • 2 minutes to read
Syntax
<?piName [ = piData ] ?>
Partes
<?
Obrigatórios. Indica o início do literal de instrução de processamento XML.
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 piName por deve processar o
documento XML.
?>
Obrigatórios. Indica o final da instrução de processamento.
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 obter mais
informações, consulte Literal de documento XML.
NOTE
O elemento não pode começar com as cadeias de caracteres "xml" ou "XML", porque a especificação piName XML 1.0
reserva esses identificadores.
Você pode atribuir um literal de instrução de processamento XML a uma variável ou incluí-lo em um literal de
documento XML.
NOTE
Um literal XML pode abranger várias linhas sem a necessidade de caracteres de continuação de linha. Isso permite que
você copie o conteúdo de um documento XML e o copie diretamente em um Visual Basic de dados.
O Visual Basic compilador converte o literal de instrução de processamento XML em uma chamada para
XProcessingInstruction o construtor.
Exemplo
O exemplo a seguir cria uma instrução de processamento que identifica uma folha de estilos para um
documento XML.
Dim pi As XProcessingInstruction =
<?xml-stylesheet type="text/xsl" href="show_book.xsl"?>
Confira também
XProcessingInstruction
Literal de Documento XML
Literais XML
Criando XML no Visual Basic
Mensagens de erro no Visual Basic
27/09/2021 • 2 minutes to read
Quando você compila ou executar um Visual Basic aplicativo, os seguintes tipos de erros podem ocorrer:
Erros de tempo de compilação, que ocorrem quando você compila um aplicativo.
Erros de tempo de execução, que ocorrem quando um aplicativo está em execução.
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 uma vez. O AttributeUsage atributo determina se um atributo pode ser
aplicado mais de uma vez.
ID do erro: BC30663
<AttributeUsage(AllowMultiple := True)>
Confira também
AttributeUsageAttribute
Criando atributos personalizados
AttributeUsage
BC32500: ' <attribute> ' não pode ser aplicado
porque o formato do GUID ' <number> ' não está
correto
27/09/2021 • 2 minutes to read
Um COMClassAttribute bloco de atributo especifica um GUID (identificador global exclusivo) que não está de
acordo com o formato adequado para um GUID. COMClassAttribute usa GUIDs para identificar exclusivamente a
classe, a interface e o 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 pelos utilitários da Microsoft, como [Link] e é garantido que seja exclusivo em espaço e 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
27/09/2021 • 2 minutes to read
#ElseIf é uma diretiva de compilação condicional. Uma #ElseIf cláusula deve ser precedida por uma cláusula
ou #If #ElseIf correspondente.
ID do erro: BC30014
Confira também
#If... Diretivas then...#Else
BC32025: instruções '#Region' e '#End Region' não
são válidas em corpos de método/lambdas de
várias linhas
27/09/2021 • 2 minutes to read
O #Region bloco deve ser declarado em um nível de classe, módulo ou namespace. Uma região reutível pode
incluir um ou mais procedimentos, mas não pode começar ou terminar dentro de um procedimento.
ID do erro: BC32025
Confira também
Diretiva #Region de #Region
BC40029: ' <classname> ' não tem conformidade
com CLS porque a interface ' <interfacename> '
implementada não tem conformidade com CLS
27/09/2021 • 2 minutes to read
Uma classe ou interface é marcada como <CLSCompliant(True)> quando deriva de ou implementa um tipo que
está marcado como <CLSCompliant(False)> ou não está marcado.
Para que uma classe ou interface seja compatível com a independência de linguagem e os componentes de
Language-Independent (CLS), sua hierarquia de herança inteira deve ser compatível. Isso significa que todos os
tipos dos quais ele herda, direta ou indiretamente, devem ser compatíveis. Da mesma forma, se uma classe
implementa uma ou mais interfaces, todas elas devem estar em conformidade em suas hierarquias de herança.
Quando você aplica o a CLSCompliantAttribute um elemento de programação, você define o parâmetro do
atributo isCompliant como True ou False para indicar conformidade ou não conformidade. Não há nenhum
padrão para esse parâmetro, e você deve fornecer um valor.
Se você não aplicar o CLSCompliantAttribute a um elemento, será considerado como não compatível.
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configurando avisos no Visual Basic.
ID do erro: BC40029
Uma instrução tenta acessar um elemento de programação que foi marcado com o atributo e a diretiva para
ObsoleteAttribute tratá-lo como um aviso.
Você pode marcar qualquer elemento de programação como não sendo mais em uso ObsoleteAttribute
aplicando-o. Se você fizer isso, poderá definir a propriedade do IsError atributo como True ou False . Se você
defini-lo como True , o compilador tratará uma tentativa de usar o elemento como um erro. Se você defini-lo
como ou deixá-lo usar como padrão como , o compilador emite um aviso se houver False uma tentativa de
usar o elemento False .
Por padrão, essa mensagem é um aviso, porque a IsError propriedade de ObsoleteAttribute é False . Para obter
mais informações sobre como ocultar avisos ou tratar avisos como erros, consulte Configuring Warnings in
Visual Basic.
ID do erro: BC40008
Confira também
Visão geral de atributos
BC32022: ' <eventname> ' é um evento e não pode
ser chamado diretamente
27/09/2021 • 2 minutes to read
'< eventname >' é um evento e, portanto, não pode ser chamado diretamente. Use uma RaiseEvent instrução
para auar um evento.
Uma chamada de procedimento especifica um evento para o nome do procedimento. Um manipulador de
eventos é um procedimento, mas o evento em si é um dispositivo de sinalização, que deve ser gerado e
manipulado.
ID do erro: BC32022
Confira também
Instrução RaiseEvent
BC32061: ' <expression> ' não pode ser usado
como uma restrição de tipo
27/09/2021 • 2 minutes to read
Uma lista de restrições inclui uma expressão que não representa uma restrição válida em um parâmetro de tipo.
Uma lista de restrições impõe requisitos no argumento de tipo passado para o parâmetro de tipo. Você pode
especificar os seguintes requisitos em qualquer combinação:
O argumento de tipo deve implementar uma ou mais interfaces
O argumento de tipo deve herdar de no máximo uma classe
O argumento de tipo deve expor um construtor sem parâmetros que o código de criação possa acessar
(incluir a New restrição)
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:
O argumento de tipo deve ser um tipo de valor (incluir a Structure restrição)
O argumento de tipo deve ser um tipo de referência (incluir a Class restrição)
Não é possível especificar ambos Structure e Class para o mesmo parâmetro de tipo, e você não pode
especificar um mais de uma vez.
ID do erro: BC32061
Confira também
Tipos genéricos no Visual Basic
Tipos de valor e tipos de referência
Referências a elementos declarados
BC30766: ' <functionname> ' não está declarado
(Erro do compilador do Visual Basic/dispositivo
inteligente)
27/09/2021 • 2 minutes to read
< functionname > não está declarado. A funcionalidade de E/S de arquivo normalmente está disponível no
namespace , mas a versão de destino do .NET Compact Framework [Link] não dá suporte a ela.
ID do erro: BC30766
Confira também
[Link]
Access de arquivo com o Visual Basic
BC42015: ' <interfacename> . ' já está
implementado pela classe base ' <membername>
<baseclassname> '. Reimplementação de <type>
assumido
27/09/2021 • 2 minutes to read
Uma propriedade, procedimento ou evento em uma classe derivada usa uma cláusula que especifica um
membro da interface que já está Implements implementado na classe base.
Uma classe derivada pode reimplementar um membro de interface implementado por sua classe base. Isso não
é o mesmo que a substituição da implementação da classe base. Para obter mais informações, consulte
Implements.
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configuring Warnings in Visual Basic.
ID do erro: BC42015
Confira também
Interfaces
BC30043: ' <keyword> ' é válido somente dentro de
um método de instância
27/09/2021 • 2 minutes to read
As Me MyClass MyBase palavras-chave,, e se referem a instâncias de classe específicas. Você não pode usá-los
dentro de um Function procedimento compartilhado ou Sub .
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 de
<containertype> ' <containertypename> '
27/09/2021 • 2 minutes to read
Uma variável, um parâmetro de procedimento ou um retorno de função é exposto fora de seu contêiner, mas é
declarado como um tipo que não deve ser exposto fora do contêiner.
O código esqueleto a seguir mostra uma situação que gera esse erro.
Um tipo declarado Protected , Friend , Protected Friend ou Private destinado a ter acesso limitado fora de
seu contexto de declaração. Usá-lo como o tipo de dados de uma variável com acesso menos restrito anularia
essa finalidade. No código esqueleto anterior, exposedVar é Public e seria exposto privateClass ao código
que não deveria ter acesso a ele.
ID do erro: BC30909
Confira também
Níveis de acesso no Visual Basic
BC30685: <membername> ' ' é ambíguo entre as
interfaces herdadas <interfacename1> ' e '
<interfacename2> '
27/09/2021 • 2 minutes to read
A interface herda dois ou mais membros com o mesmo nome de várias interfaces.
ID do erro: BC30685
Interface Left
Sub MySub()
End Interface
Interface Right
Sub MySub()
End Interface
Interface LeftRight
Inherits Left, Right
End Interface
Module test
Sub Main()
Dim x As LeftRight
' [Link]() 'x is ambiguous.
CType(x, Left).MySub() ' Cast to base type.
CType(x, Right).MySub() ' Call the other base type.
End Sub
End Module
Confira também
Interfaces
BC30971: esse erro também pode ser devido à
combinação de uma referência de arquivo com uma
referência de projeto <message> ao assembly '
<assemblyname> '
27/09/2021 • 2 minutes to read
<message> Esse erro também pode ser devido à combinação de uma referência de arquivo com uma
referência de projeto ao assembly ' <assemblyname> . Nesse caso, tente substituir a referência de arquivo para
<assemblyfilename> ' ' no projeto ' ' por uma referência de projeto a ' <projectname1> <projectname2> '.
O código em seu projeto acessa um membro de outro projeto, mas a configuração da solução não permite que
o compilador Visual Basic resolva a referência.
Para acessar um tipo definido em outro assembly, o Visual Basic compilador deve ter uma referência a esse
assembly. Essa deve ser uma referência única e não ambígua que não cause referências circulares entre
projetos.
ID do erro: BC30971
Confira também
Gerenciando referências em um projeto
Referências a elementos declarados
Gerenciando propriedades de solução e de projeto
Solução de Problemas de Referências Quebradas
BC30269: ' <methodname> ' tem várias definições
com assinaturas idênticas
27/09/2021 • 2 minutes to read
Uma Function declaração de procedimento ou usa o nome de procedimento idêntico e a lista de Sub
argumentos como uma declaração anterior. Uma causa possível é uma tentativa de sobrecarregar o
procedimento original. Os procedimentos sobrecarregados devem ter listas de argumentos diferentes.
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> '
27/09/2021 • 2 minutes to read
Você forneceu um nome ambíguo e, portanto, está em conflito com outro nome. o compilador Visual Basic não
tem nenhuma regra de resolução de conflitos; Você mesmo deve eliminar a ambiguidade dos nomes.
ID do erro: BC30560
Confira também
Namespaces no Visual Basic
Instrução Namespace
BC30561: ' <name1> ' é ambíguo, importado dos
namespaces ou dos tipos ' <name2> '
27/09/2021 • 2 minutes to read
Você forneceu um nome ambíguo e, portanto, está em conflito com outro nome. O Visual Basic compilador não
tem nenhuma regra de resolução de conflitos; você deve desambiguar 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 tem
conformidade com CLS porque sobrecarrega o
<proceduresignature2> que difere dele somente
por matriz de tipos de parâmetro de matriz ou pela
classificação dos tipos de parâmetro de matriz
27/09/2021 • 2 minutes to read
A segunda declaração altera o parâmetro unidimensional original arrayParam para uma matriz de matrizes. A
terceira declaração muda arrayParam para uma matriz bidimensional (Rank 2). embora Visual Basic permita
sobrecargas para diferir apenas por uma dessas alterações, tal sobrecarga não é compatível com a
independência de linguagem e os componentes de Language-Independent (CLS).
Quando você aplica o a CLSCompliantAttribute um elemento de programação, você define o parâmetro do
atributo isCompliant como True ou False para indicar conformidade ou não conformidade. Não há nenhum
padrão para esse parâmetro, e você deve fornecer um valor.
Se você não aplicar o CLSCompliantAttribute a um elemento, será considerado como não compatível.
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configurando avisos no Visual Basic.
ID do erro: BC40035
Confira também
Sobrecarga de procedimento
Sobrecargas
BC30154: <type1> ' ' deve implementar ' ' para a
interface ' <typename> <membername>
<interfacename> '
27/09/2021 • 2 minutes to read
' <typename> ' deve implementar ' ' para a interface ' <membername> <interfacename> '. A implementação
da propriedade deve ter especificadores 'ReadOnly'/'WriteOnly' correspondentes.
Uma classe ou declarações de estrutura para implementar uma interface, mas não implementa um
procedimento, propriedade ou evento definido pela interface . Todos os membros da interface devem ser
implementados.
ID do erro: BC30154
3. Ao implementar uma propriedade, certifique-se de ReadOnly que ou seja usado da mesma maneira que
na WriteOnly definição da interface.
4. Ao implementar uma propriedade, declare Get e Set procedimentos, conforme apropriado.
Confira também
Instrução Implements
Interfaces
BC30149: <type1> ' ' deve implementar ' ' para a
interface ' <typename> <methodname>
<interfacename> '
28/09/2021 • 2 minutes to read
Uma classe ou declarações de estrutura para implementar uma interface, mas não implementa um
procedimento definido pela interface . Todos os membros da interface devem ser implementados.
ID do erro: BC30149
Confira também
Instrução Implements
Interfaces
BC30910: ' <typename> ' não pode herdar de
<type> ' <basetypename> ' porque ele expande o
acesso da base <type> fora do assembly
27/09/2021 • 2 minutes to read
Uma classe ou interface herda de uma classe base ou interface, mas tem um nível de acesso menos restritivo.
Por exemplo, uma Public interface herda de uma Friend interface ou uma Protected classe herda de uma
Private classe. Isso expõe a classe base ou a interface para acessar além do nível pretendido.
ID do erro: BC30910
Confira também
Instrução Class
Instrução Interface
Instrução Inherits
Níveis de acesso no Visual Basic
BC32008: ' <typename> ' é um tipo delegado
27/09/2021 • 2 minutes to read
' <typename> ' é um tipo delegado. A construção delegate permite apenas uma única expressão AddressOf
como uma lista de argumentos. Geralmente, uma expressão AddressOf pode ser usada em vez de uma
construção delegate.
Uma New cláusula que cria uma instância de uma classe delegate fornece uma lista de argumentos inválida
para o construtor delegate.
Você pode fornecer apenas uma única AddressOf expressão ao criar uma nova instância de delegado.
Esse erro pode ocorrer se você não passar nenhum argumento para o construtor delegado, se você passar mais
de um argumento, ou se você passar um único argumento que não seja uma expressão válida AddressOf .
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
27/09/2021 • 2 minutes to read
Um nome de tipo ocorre quando uma expressão é necessária. Uma expressão deve consistir em alguma
combinação de variáveis, constantes, literais, propriedades e chamadas Function de procedimento.
ID do erro: 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
27/09/2021 • 2 minutes to read
Uma aspas foi fornecida como olimidor para TextFieldParser o , mas está definido como EscapeQuotes 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
27/09/2021 • 2 minutes to read
Confira também
Privado
BC40059: uma referência foi criada para o assembly
de interop inserido ' ' devido a uma referência
indireta a esse <assembly1> assembly do assembly '
<assembly2> '
27/09/2021 • 2 minutes to read
Uma referência foi criada para o assembly de interop inserido ' ' devido a uma referência indireta a
<assembly1> esse assembly do assembly <assembly2> ''. Considere alterar a propriedade 'Inserir Tipos de
Interoperabilidade' em um dos assemblies.
Você adicionou uma referência a um assembly (assembly1) que tem a propriedade Embed Interop Types
definida como True . Isso instrui o compilador a inserir informações de tipo de interoperabilidade desse
assembly. No entanto, o compilador não pode inserir informações de tipo de interoperabilidade desse assembly,
porque outro assembly que você referenciou (assembly2) também faz referência a esse assembly (assembly1) e
tem a propriedade Embed Interop Types definida como False .
NOTE
Configurar a propriedade Embed Interop Types em uma referência de assembly como True é equivalente à referenciar
o assembly usando a opção -link para o compilador de linha de comando.
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 interop são fornecidas por um ASSEMBLY de interop primário
(PIA).
Confira também
-link (Visual Basic)
Interoperação com código não gerenciado
Não foi especificado um formulário de inicialização
27/09/2021 • 2 minutes to read
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; expressão de
qualificação não será avaliada
27/09/2021 • 2 minutes to read
Uma variável de instância de uma classe ou estrutura é usada para acessar uma variável, propriedade,
procedimento ou evento definido Shared nessa classe ou estrutura. Esse aviso também poderá 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 cada instância da classe ou estrutura na qual ela é declarada. É consistente com essa finalidade
acessar um membro 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 Shared classe ou estrutura.
Acessar um membro por meio de uma variável de instância pode tornar seu código mais difícil de entender,
ocultando o fato de Shared que o membro é Shared . Além disso, se esse acesso faz parte de uma expressão
que executa outras ações, como um procedimento que retorna uma instância do membro compartilhado, o
Visual Basic ignora a expressão e quaisquer outras ações que ela executaria de outra Function forma.
Para obter mais informações e um exemplo, consulte Compartilhado.
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configuring Warnings in Visual Basic.
ID do erro: BC42025
Exemplo
O exemplo a seguir gera bc42025:
Module Program
Public Sub Main()
Dim tc As New TestClass()
[Link]() ' BC42025.
End Sub
End Module
Module Program
Public Sub Main()
[Link]()
End Sub
End Module
NOTE
Seja alerta para os efeitos do escopo quando dois elementos de programação têm o mesmo nome. No exemplo anterior,
se você declarar uma instância usando , o compilador tratará uma chamada para como um acesso do método por meio
do nome da classe e nenhum Dim testClass As TestClass = Nothing [Link]() aviso ocorrerá.
Confira também
Compartilhado
Escopo no Visual Basic
BC30577: o operando "AddressOf" deve ser o nome
de um método (sem parênteses)
27/09/2021 • 2 minutes to read
O AddressOf operador cria uma instância de representante de procedimento que faz referência a um
procedimento específico. A sintaxe dela é a seguinte:
AddressOf procedurename
Exemplo
O exemplo a seguir gera bc30577:
Sub Main()
' Any of the following two lines generates bc30577.
'Dim t As New [Link](AddressOf(CountZeroToTen))
'Dim t As New [Link](AddressOf CountZeroToTen())
[Link]()
End Sub
Sub Main()
Dim t As New [Link](AddressOf CountZeroToTen)
[Link]()
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
27/09/2021 • 2 minutes to read
O aplicativo não pôde adquirir um recurso do sistema operacional necessário. Algumas das causas possíveis
para esse problema são:
O aplicativo não possui permissão para criar objetos nomeados do sistema operacional.
O Common Language Runtime não tem permissões para criar arquivos de memória mapeada.
O aplicativo precisa acessar um objeto do sistema operacional, mas outro processo o está usando.
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 de um nome simples ou
qualificado sem argumentos
27/09/2021 • 2 minutes to read
Não é possível inferir um nome de membro de tipo anônimo de uma expressão complexa.
ID do erro: BC36556
Exemplo
O exemplo a seguir gera BC36556:
Para obter mais informações sobre fontes das quais tipos anônimos podem ou não inferir nomes e tipos de
membros, consulte Como inferirnomes de propriedade e tipos em declarações de tipo anônimo.
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)
27/09/2021 • 2 minutes to read
Confira também
Tipos de erro
BC30638: limites de matriz não podem aparecer em
especificadores de tipo
27/09/2021 • 2 minutes to read
Os tamanhos de matriz não podem ser declarados como parte de um especificador de tipo de dados.
ID do erro: BC30638
Exemplo
O exemplo a seguir gera BC30638:
Defina uma matriz e inicialize-a com o número de elementos desejado, conforme mostrado no exemplo a
seguir:
Confira também
matrizes
BC32039: a matriz declarada como variável de
controle de loop for não pode ser declarada com
um tamanho inicial
28/09/2021 • 2 minutes to read
Um For Each loop usa uma matriz como sua variável de iteração, mas inicializa essa matriz.
ID do erro: BC32039
Exemplo
O exemplo a seguir gera bc32039:
Next
Next
Next
Confira também
Instrução For...Next
matrizes
Coleções
BC30306: expressão de subscrito de matriz ausente
28/09/2021 • 2 minutes to read
Uma inicialização de matriz deixa um ou mais 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 da
estrutura não podem ser declaradas com um
tamanho inicial
27/09/2021 • 2 minutes to read
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 exemplo a seguir gera BC31043:
Structure DemoStruct
Public demoArray(9) As Integer
End Structure
Structure DemoStruct
Public demoArray() As Integer
End Structure
Sub UseStruct()
Dim struct As DemoStruct
ReDim [Link](9)
[Link](2) = 777
End Sub
Confira também
matrizes
Como: Declarar uma estrutura
BC30828: 'As Any' não tem suporte em instruções
'Declare'
27/09/2021 • 2 minutes to read
O tipo de dados foi usado com instruções Any no Visual Basic 6.0 e versões anteriores para permitir o uso de
argumentos que poderiam conter Declare qualquer tipo de dados. Visual Basic dá suporte à sobrecarga,
porém, e, portanto, torna o Any tipo de dados obsoleto.
ID do erro: BC30828
2. Use o MarshalAsAttribute atributo para especificar quando é esperado pelo procedimento que está sendo
As Any Void* chamado.
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
27/09/2021 • 2 minutes to read
Ocorreu um erro ao executar um método ou ao obter ou configurar uma propriedade de uma variável de
objeto. O erro foi relatado pelo aplicativo que criou o objeto.
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
27/09/2021 • 2 minutes to read
Um valor de soma de verificação contém dígitos hexadecimais inválidos ou um número ímpar de dígitos.
Quando o [Link] 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 é melhor deixar esse processo para uso interno.
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configurando avisos no Visual Basic.
ID do erro: BC42033
Confira também
[Link] Sobre
Opções de comentários do Visual Studio
Convenção de chamada de DLL inválida
27/09/2021 • 2 minutes to read
Os argumentos passados para uma DLL (biblioteca de vínculo dinâmico) devem corresponder exatamente aos
esperados pela rotina. As convenções de chamada lidam com número, tipo e ordem de argumentos. Seu
programa pode estar chamando uma rotina em uma DLL que está recebendo o tipo errado ou o número de
argumentos.
Confira também
Tipos de erro
Instrução Call
Instrução Declare
Modo de arquivo inválido
28/09/2021 • 2 minutes to read
As instruções usadas na manipulação do conteúdo do arquivo devem ser apropriadas para o modo no qual o
arquivo foi aberto. As possíveis causas incluem:
Uma FilePutObject FileGetObject instrução or especifica um arquivo sequencial.
Uma Print instrução especifica um arquivo aberto para um modo de acesso diferente de Output ou
Append .
Uma Input instrução especifica um arquivo aberto para um modo de acesso diferente de Input
Confira também
FileSystem
Solução de problemas: ler e gravar em arquivos de texto
Nome ou número de arquivo inválido
28/09/2021 • 2 minutes to read
Ocorreu um erro ao tentar acessar o arquivo especificado. Entre as possíveis causas para esse erro estão:
Uma instrução refere-se a um arquivo com um nome de arquivo ou número que não foi especificado na
instrução ou que foi especificado em uma instrução, mas que foi FileOpen FileOpen fechado
posteriormente.
Uma instrução refere-se a um arquivo com um número que está fora do intervalo de números de
arquivo.
Uma instrução refere-se a um nome de arquivo ou número que não é válido.
Confira também
FileOpen
Convenções de nomenclatura do Visual Basic
Comprimento de registro inválido
28/09/2021 • 2 minutes to read
2. Se a variável em uma instrução ou for ou incluir uma cadeia de caracteres de comprimento variável,
certifique-se de que a cadeia de caracteres de comprimento variável seja pelo menos 2 caracteres menor
que o comprimento do registro especificado na cláusula da FilePut FilePutObject Len FileOpen
instrução.
3. Se a variável em um ou for ou incluir um FilePut , certifique-se de que a cadeia de caracteres de
comprimento variável seja pelo menos 4 bytes menor que o comprimento do registro especificado na
cláusula da FilePutObject Variant Len FileOpen instrução .
Confira também
FileGet
FileGetObject
FilePut
FilePutObject
BC42358: como essa chamada não é aguardada, a
execução do método atual continua antes que a
chamada seja concluída
28/09/2021 • 6 minutes to read
Como esta chamada não era esperada, a execução do método atual continua antes da chamada ser concluída.
Considere aplicar o Await operador ao resultado da chamada.
O método atual chama um método assíncrono que retorna um ou um e não Task aplica o operador
Task<TResult> 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 é esperado. 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.
Um problema igualmente importante é o que acontece com exceções que são ativas no método assíncrono
chamado. Uma exceção lançada em um método que retorna uma Task ou Task<TResult> é armazenada na
tarefa retornada. Se você não aguardar a tarefa ou verificar explicitamente se há exceções, a exceção será
perdida. Se você aguardar a tarefa, a exceção será relançada.
Como uma melhor prática, você sempre deve aguardar a chamada.
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configuring Warnings in Visual Basic.
ID do erro: BC42358
' 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
' after the code.
Dim delay = 5000
' Call #3
' To contrast with an awaited call, replace the unawaited call
' (Call #1 or Call #2) with the following awaited call. The best
' practice is to await the call.
'Await CalledMethodAsync(delay)
[Link] &= vbCrLf & " Entering called method, starting and awaiting [Link]."
' Slow the process down a little so you can distinguish between awaiting
' and not awaiting. Adjust the value for howLong if necessary.
Await [Link](howLong)
[Link] &= vbCrLf & " [Link] is finished--returning from called method."
End Function
Exemplo
O seguinte aplicativo do WPF (Windows Presentation Foundation) contém os métodos do exemplo anterior. As
etapas a seguir configuram o aplicativo:
1. Crie um aplicativo WPF e nomeie-o AsyncWarning .
2. No Editor do Visual Studio Code, escolha a guia [Link] .
Se a guia não estiver visível, abra o menu de atalho para [Link] no Gerenciador de
Soluções e escolha Exibir Código .
3. Substitua o código na exibição XAML de [Link] pelo seguinte código:
<Window x:Class="MainWindow"
xmlns="[Link]
xmlns:x="[Link]
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button x:Name="StartButton" Content="Start" HorizontalAlignment="Left" Margin="214,28,0,0"
VerticalAlignment="Top" Width="75" HorizontalContentAlignment="Center" FontWeight="Bold"
FontFamily="Aharoni" Click="StartButton_Click" />
<TextBox x:Name="ResultsTextBox" Margin="0,80,0,0" TextWrapping="Wrap" FontFamily="Lucida
Console"/>
</Grid>
</Window>
Uma janela simples, contendo um botão e uma caixa de texto, aparecerá no modo de exibição de Design
de [Link].
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.
4. Substitua o código em [Link] pelo código a seguir.
Class MainWindow
' 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
' after the code.
Dim delay = 5000
' Call #3
' To contrast with an awaited call, replace the unawaited call
' (Call #1 or Call #2) with the following awaited call. The best
' practice is to await the call.
'Await CalledMethodAsync(delay)
[Link] &= vbCrLf & " Entering called method, starting and awaiting
[Link]."
' Slow the process down a little so you can distinguish between awaiting
' and not awaiting. Adjust the value for howLong if necessary.
Await [Link](howLong)
[Link] &= vbCrLf & " [Link] 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 do tipo é usada para inicializar outra
propriedade
27/09/2021 • 2 minutes to read
O compilador não aceita a conversão de um tipo anônimo em uma árvore de expressão quando uma
propriedade do tipo anônimo é usada para inicializar outra propriedade do tipo anônimo. Por exemplo, no
código a seguir, é declarado na lista de inicialização e, em seguida, usado como Prop1 o valor inicial para
Prop2 .
ID do erro: BC36548
Exemplo
Module M2
Sub Main()
' The following line causes the error.
ExpressionExample(Function() New With {.Prop1 = 2, .Prop2 = .Prop1})
End Sub
End Module
Sub Main()
Dim temp = 2
ExpressionExample(Function() New With {.Prop1 = temp, .Prop2 = temp})
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
27/09/2021 • 2 minutes to read
Você tentou colocar um controle ActiveX em um formulário em tempo de design ou adicionar um formulário a
um projeto com um controle ActiveX, mas as informações associadas no registro não foram encontradas.
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
28/09/2021 • 2 minutes to read
A [Link] classe permite que os aplicativos que dão suporte ao acesso remoto a objetos
entre os limites do domínio do aplicativo. Os tipos devem herdar da MarshalByRejectObject classe quando o
tipo é usado nos limites de domínio do aplicativo. O estado do objeto não deve ser copiado porque os membros
do objeto não podem ser usados fora do domínio do aplicativo no qual foram criados.
ID do erro: BC30310
Confira também
MarshalByRefObject
Instrução Dim
BC30369: não é possível fazer referência a um
membro de 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
27/09/2021 • 2 minutes to read
Você tentou fazer referência a um membro não compartilhado de uma classe de dentro de um procedimento
compartilhado. O exemplo a seguir demonstra tal situação:
Class Sample
Public x as Integer
Public Shared Sub SetX()
x = 10
End Sub
End Class
No exemplo anterior, a instrução de atribuição x = 10 gera essa mensagem de erro. Isso ocorre porque um
procedimento compartilhado está tentando acessar uma variável de instância.
A variável x é um membro de instância porque não está declarada como compartilhada. Cada instância da
classe Sample contém sua própria variável individual x . Quando uma instância define ou altera o valor de x ,
ela não afeta o valor de x em nenhuma outra instância.
No entanto, o procedimento SetX está Shared entre todas as instâncias da classe Sample . Isso significa que
ele não está associado a uma instância da classe, mas opera independentemente de instâncias individuais.
Como não tem conexão com uma instância específica, o setX não pode acessar uma variável de instância. Ele
deve operar somente em Shared variáveis. Quando SetX o define ou altera o valor de uma variável
compartilhada, esse novo valor está disponível para todas as instâncias da classe.
ID do erro: BC30369
Confira também
Compartilhado
Não é possível criar arquivo temporário necessário
28/09/2021 • 2 minutes to read
A unidade está cheia 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
27/09/2021 • 2 minutes to read
O arquivo especificado não pode ser aberto para gravação, talvez porque já foi aberto.
ID do erro: BC2012
Confira também
WriteAllText
WriteAllBytes
Gravar em arquivos
BC31098: a classe ' <classname> ' não pode ser
encontrada
27/09/2021 • 2 minutes to read
A classe ' <classname> ' não pode ser encontrada. Essa condição é geralmente o resultado de um
'[Link]' incompatível.
Não foi possível localizar um membro definido.
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
27/09/2021 • 2 minutes to read
A classe especificada na chamada de função GetObject ou CreateObject não expôs uma interface de
programação ou você alterou um projeto de .dll para .exe, ou vice-versa.
Confira também
Tipos de erro
Opções de comentários do Visual Studio
BC30481: a instrução ' class ' deve terminar com
uma ' End Class ' correspondente
27/09/2021 • 2 minutes to read
Class é usado para iniciar um Class bloco; portanto, ele só pode aparecer no início do bloco, com uma
instrução correspondente que End Class termina o bloco. Você tem uma instrução redundante Class ou não
terminou seu Class bloco com End Class .
ID do erro: BC30481
Confira também
<keyword>Instrução End
Instrução Class
Formato inválido de área de transferência
27/09/2021 • 2 minutes to read
O formato da Área de Transferência especificado é incompatível com o método que está sendo executado. Entre
as possíveis causas para esse erro estão:
Usando o método ou da Área de Transferência GetText com um formato de Área de Transferência
diferente de ou SetText vbCFText vbCFLink .
Usando o método ou da Área de Transferência com um formato de Área de GetData Transferência
diferente de , ou SetData vbCFBitmap vbCFDIB vbCFMetafile .
Usando os métodos ou de um com um formato de Área de Transferência no intervalo reservado pela
Microsoft Windows para formatos registrados GetData SetData DataObject (&HC000-&HFFFF),
quando esse formato de Área de Transferência não foi registrado com o Microsoft Windows.
Confira também
Área de transferência: adicionando outros formatos
BC30439: expressão constante não representável no
tipo ' <typename> '
27/09/2021 • 2 minutes to read
Você está tentando avaliar uma constante que não se ajustará ao tipo de destino, geralmente porque ela está
estouro do intervalo.
ID do erro: BC30439
Confira também
Visão geral de constantes
Constantes e enumerações
BC30424: constantes devem ser de um tipo
intrínseco ou enumerado, não uma classe, estrutura,
parâmetro de tipo ou tipo de matriz
27/09/2021 • 2 minutes to read
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 recipiente.
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 Enum tipo com base em um
dos tipos integrais.
ID do erro: BC30424
Confira também
Constantes e enumerações
Data Types
Data Types
BC30298: o Construtor ' <name> ' não pode
chamar a si mesmo
27/09/2021 • 2 minutes to read
Confira também
Tempo de vida do objeto: como os objetos são criados e destruídos
BC32053: copiar o valor do parâmetro ' ByRef ' '
<parametername> ' de volta para o argumento
correspondente reduz do tipo ' <typename1> ' para
o tipo ' <typename2> '
27/09/2021 • 2 minutes to read
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
28/09/2021 • 2 minutes to read
Ao contrário de um evento não personalizado, uma Custom Event declaração requer uma As cláusula após o
nome do evento que especifica explicitamente o tipo delegado para o evento.
Eventos não personalizados podem ser definidos com uma As cláusula e um tipo de delegado explícito, ou
com uma lista de parâmetros imediatamente após o nome do evento.
ID do erro: BC31122
2. Substitua a lista de parâmetros do evento personalizado por uma As cláusula especificando o tipo
delegado.
Continuando com o exemplo, a Custom Event declaração seria reescrita da seguinte maneira.
Exemplo
Este exemplo declara um Custom Event e especifica a cláusula necessária As com um tipo delegate.
Confira também
Instrução Event
Instrução Delegate
Eventos
BC36647 e BC36644: Tipos de dados dos
parâmetros de tipo não podem ser inferidos desses
argumentos
28/09/2021 • 2 minutes to read
Os tipos de dados dos parâmetros de tipo não podem ser inferidos desses argumentos. Especificar os tipos de
dados explicitamente pode corrigir esse erro.
Esse erro ocorre quando a resolução de sobrecarga falhou. Ela ocorre como uma mensagem subordinada que
informa 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.
NOTE
Ao especificar argumentos não é uma opção (por exemplo, para operadores de consulta em expressões de consulta), a
mensagem de erro aparece sem a segunda frase.
Module Module1
Sub Main()
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
28/09/2021 • 2 minutes to read
Uma instrução nãoclarativa, como uma atribuição ou instrução de loop, ocorre fora de qualquer procedimento.
Somente declarações são permitidas fora dos procedimentos.
Como alternativa, um elemento de programação é declarado sem uma palavra-chave de declaração como Dim
ou Const .
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, portanto,
deve ser declarada ' Shadows '
27/09/2021 • 2 minutes to read
Uma propriedade é declarada com o mesmo nome de uma propriedade definida na classe base. Nessa situação,
a propriedade nessa classe deve sombrear a propriedade da classe base.
Esta mensagem é um aviso. Shadows é assumido por padrão. Para obter mais informações sobre como ocultar
avisos ou tratar avisos como erros, consulte Configurando 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 da interface herdada '
<defaultpropertyname> ' da interface '
<interfacename1> ' e ' <defaultpropertyname> ' da
interface ' <interfacename2> '
27/09/2021 • 2 minutes to read
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.
Quando você especifica testObj(1) , o compilador tenta resolvê-lo para a propriedade padrão. No entanto, há
duas propriedades padrão possíveis devido às interfaces herdadas, portanto, o compilador sinaliza esse erro.
ID do erro: BC30686
-ou-
Implemente a interface herdada em uma classe. Em seguida, você pode implementar cada uma das
propriedades herdadas com nomes diferentes. No entanto, apenas uma delas pode ser a propriedade
padrão da classe de implementação. O exemplo a seguir ilustra essa situação.
Public Class useIface3
Implements Iface3
Default Public Property prop1(ByVal arg As Integer) As Integer Implements [Link]
' Insert code to define Get and Set procedures for prop1.
End Property
Public Property prop2(ByVal arg As Integer) As Integer Implements [Link]
' Insert code to define Get and Set procedures for prop2.
End Property
End Class
Confira também
Interfaces
BC30220: a classe delegate ' <classname> ' não tem
um método Invoke, portanto, uma expressão desse
tipo não pode ser o destino de uma chamada de
método
27/09/2021 • 2 minutes to read
Uma chamada para Invoke por meio de um delegado falhou porque Invoke não está implementada na classe
delegate.
ID do erro: BC30220
Confira também
Representantes
Instrução Delegate
Operador AddressOf
Instrução Dim
BC30029: classes derivadas não podem auar
eventos de classe base
27/09/2021 • 2 minutes to read
Um evento pode ser gerado somente do espaço de declaração no qual ele é declarado. Portanto, uma classe não
pode aucarcar eventos de nenhuma outra classe, mesmo uma da qual ela é derivada.
ID do erro: BC30029
Confira também
Instrução Event
Instrução RaiseEvent
Erro de E/S do dispositivo
27/09/2021 • 2 minutes to read
Ocorreu um erro de entrada ou saída enquanto o programa estava usando um dispositivo, como uma
impressora ou unidade de disco.
Confira também
Tipos de erro
A função 'Dir' deve ser chamada primeiro com um
argumento 'PathName'
27/09/2021 • 2 minutes to read
Uma chamada inicial para a Dir função não inclui o PathName argumento. A primeira chamada para Dir deve
incluir uma PathName , mas as chamadas subsequentes para não Dir precisam incluir parâmetros para
recuperar o próximo item.
Confira também
Dir
BC30205: fim da instrução esperada
27/09/2021 • 2 minutes to read
A instrução é sintaticamente concluída, mas um elemento de programação adicional segue o elemento que
conclui a instrução. Um terminador de linha é necessário no final de cada instrução.
Um terminador de linha divide os caracteres de um arquivo Visual Basic de origem em linhas. Exemplos de
terminadores de linha são o caractere de retorno de carro Unicode (&HD), o caractere de linha Unicode (&HA) e
o caractere de retorno de carro Unicode seguido pelo caractere de linha unicode. Para obter mais informações
sobre terminadores de linha, consulte a especificação Visual Basic linguagem .
ID do erro: BC30205
Confira também
Como: Quebrar e combinar instruções no código
Instruções
BC30140: Erro ao criar o manifesto do assembly:
<error message>
27/09/2021 • 2 minutes to read
O Visual Basic compilador chama o Assembly Linker ([Link], também conhecido como Alink) para gerar um
assembly com um manifesto. O vinculador reportou um erro no estágio de pré-emissão da criação do assembly.
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
[Link]
Opções de comentários do Visual Studio
BC30136: Erro ao criar recursos do Win32: <error
message>
27/09/2021 • 2 minutes to read
O Visual Basic compilador chama o Assembly Linker ([Link], também conhecido como Alink) para gerar um
assembly com um manifesto. O vinculador relatou um erro ao criar um recurso em memória. Isso pode ser um
problema com o ambiente ou o computador pode estar com pouca memória.
ID do erro: BC30136
Confira também
[Link]
Opções de comentários do Visual Studio
Erro no carregamento da DLL (Visual Basic)
27/09/2021 • 2 minutes to read
Uma DLL (biblioteca de vínculo dinâmico) é uma biblioteca especificada na Lib cláusula de uma Declare
instrução. Possíveis causas desse erro incluem:
O arquivo não é executável de DLL.
o arquivo não é uma DLL do Microsoft Windows.
A DLL faz referência a outra DLL que não está presente.
A DLL ou a DLL referenciada não está em um diretório especificado no caminho.
Confira também
Instrução Declare
BC30137: erro ao salvar o arquivo de recurso Win32
temporário ' <filename> ': <error message>
28/09/2021 • 2 minutes to read
o compilador Visual Basic chama o vinculador de Assembly ([Link], também conhecido como Alink) para gerar
um Assembly com um manifesto. O vinculador relatou um erro ao obter um nome de arquivo para uso na
gravação de um recurso na memória.
ID do erro: BC30137
Confira também
[Link]
Opções de comentários do Visual Studio
BC36810: Ocorreram erros ao compilar os esquemas
XML no projeto
27/09/2021 • 2 minutes to read
Ocorreram erros ao compilar os esquemas XML no projeto. Por isso, o Xml IntelliSense não está disponível.
Há um erro em um esquema XSD (definição de esquema XML) incluído no projeto. Esse erro ocorre quando
você adiciona um arquivo de esquema XSD (.xsd) que entra em conflito com o esquema XSD existente definido
para o projeto.
ID do erro: BC36810
Confira também
Janela Lista de Erros
XML
BC30722: Avaliação de expressão ou instrução com
tempo de vida
27/09/2021 • 2 minutes to read
Confira também
Depurando no Visual Studio
BC31423: o evento ' <eventname1> ' não pode
implementar <eventname2> o evento ' ' na
interface ' <interface> ' porque seus tipos
delegados ' <delegate1> ' e ' <delegate2> ' não
correspondem
27/09/2021 • 2 minutes to read
Visual Basic não pode implementar um evento porque o tipo delegado do evento não corresponde ao tipo
delegado do evento na interface. Esse erro pode ocorrer quando você define vários eventos em uma interface e,
em seguida, tenta implementá-los junto com o mesmo evento. Um evento pode implementar dois ou mais
eventos somente se todos os eventos implementados forem declarados usando a As sintaxe e especificarem o
mesmo tipo de delegado.
ID do erro: BC31423
Confira também
Instrução Event
Instrução Delegate
Eventos
BC31084: Eventos não podem ser declarados com
um tipo delegado que tenha um tipo de retorno
27/09/2021 • 2 minutes to read
Confira também
Eventos
BC30594: eventos de variáveis WithEvents
compartilhadas não podem ser tratados por
métodos não compartilhados
27/09/2021 • 2 minutes to read
Uma variável declarada com o Shared modificador é uma variável compartilhada. Uma variável compartilhada
identifica exatamente um local de armazenamento. Uma variável declarada com o WithEvents modificador
afirma que o tipo ao qual a variável pertence trata o conjunto de eventos que a variável gera. Quando um valor
é atribuído à variável, a propriedade criada pela WithEvents declaração desvincula qualquer manipulador de
eventos existente e conecta o novo manipulador de eventos por meio do Add método.
ID do erro: BC30594
Confira também
Compartilhado
WithEvents
BC30491: a expressão não produz um valor
27/09/2021 • 2 minutes to read
Você tentou usar uma expressão que não produz um valor em um contexto de produção de valor, como chamar
um Sub em um contexto em que um Function é esperado.
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 '
27/09/2021 • 2 minutes to read
Uma expressão é avaliada como um tipo que não pode ser encaixado pelo Common Language Runtime (CLR),
mas acessa um membro que requer boxing.
Boxing refere-se ao processamento necessário para converter um tipo para Object ou, ocasionalmente, para
ValueType . O Common Language Runtime não pode digitar determinados tipos de estrutura, por exemplo
ArgIterator , RuntimeArgumentHandle e TypedReference .
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, Visual Basic tentou uma conversão implícita de boxing
que causa esse erro.
ID do erro: BC31393
Confira também
Conversões implícitas e explícitas
BC30068: Expression é um valor e, portanto, não
pode ser o destino de uma atribuição
27/09/2021 • 2 minutes to read
Uma instrução tenta atribuir um valor a uma expressão. Você pode atribuir um valor somente a uma variável,
propriedade ou elemento de matriz gravável em tempo de execução. O exemplo a seguir ilustra como esse erro
pode ocorrer.
A última instrução do exemplo anterior falha porque ela cria apenas uma alocação temporária para a Point
estrutura retornada pela Location propriedade. 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
, que cria uma alocação mais permanente para a Point estrutura. O exemplo a seguir mostra o código que pode
substituir a última instrução do exemplo anterior.
ID do erro: BC30068
Confira também
Operadores e expressões
Instruções
Solucionando problemas de procedimentos
BC36593: expressão do tipo <type> não pode ser
consultada
27/09/2021 • 2 minutes to read
A expressão do <type> tipo não pode ser consultada. Certifique-se de que não está faltando uma referência de
assembly e/ou importação de namespace para o provedor LINQ.
Os tipos que podem ser consultados são definidos nos [Link] [Link] namespaces , e
[Link] . Você deve importar um ou mais desses namespaces para executar consultas LINQ.
O [Link] namespace permite que você consulte objetos como coleções e matrizes usando LINQ.
O namespace permite que você consulte conjuntos [Link] dados e bancos de dados [Link] SQL
Server usando LINQ.
O namespace permite que você consulte XML usando [Link] LINQ e use recursos XML em Visual
Basic.
ID do erro: BC36593
Confira também
[Link]
[Link]
[Link]
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 recipiente ' <propertyname> '
27/09/2021 • 2 minutes to read
Uma instrução no Set procedimento de uma definição de propriedade armazena um valor no nome da
propriedade.
A abordagem recomendada para manter o valor de uma propriedade é definir uma Private variável no
contêiner da propriedade e usá-la nos Get Set procedimentos e. O Set procedimento deve armazenar o
valor de entrada nessa Private variável.
O Get procedimento se comporta como um Function procedimento, portanto, ele pode atribuir um valor ao
nome da propriedade e ao controle de retorno ao encontrar a End Get instrução. No entanto, a abordagem
recomendada é incluir a Private variável como o valor em uma instrução return.
O Set procedimento se comporta como um Sub procedimento, que não retorna um valor. Portanto, o nome
do procedimento ou da propriedade não tem um significado especial dentro de um Set procedimento e você
não pode armazenar um valor nele.
O exemplo a seguir ilustra a abordagem que pode causar esse erro, seguida da abordagem recomendada.
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configurando avisos no Visual Basic.
ID do erro: BC42026
Confira também
Procedimentos de propriedade
Instrução Property
Instrução SET
Expressão muito complexa
27/09/2021 • 2 minutes to read
Confira também
Operadores e expressões
BC36550: o atributo 'Extension' pode ser aplicado
somente a declarações 'Module', 'Sub' ou 'Function'
27/09/2021 • 2 minutes to read
A única maneira de estender um tipo de dados Visual Basic é definir um método de extensão dentro de um
módulo padrão. O método de extensão pode ser Sub um procedimento ou um Function procedimento. Todos
os métodos de extensão devem ser marcados com o atributo de extensão, <Extension()> , do
[Link] namespace . Opcionalmente, um módulo que contém um método de
extensão pode ser marcado da mesma maneira. Nenhum outro uso do atributo de extensão é válido.
ID do erro: BC36550
Exemplo
O exemplo a seguir define um Print método para o tipo de String dados.
Imports StringUtility
Imports [Link]
Namespace StringUtility
<Extension()>
Module StringExtensions
<Extension()>
Public Sub Print (ByVal str As String)
[Link](str)
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
27/09/2021 • 2 minutes to read
Às vezes, um arquivo deve ser fechado antes FileOpen que outra ou outra operação possa ocorrer. Entre as
possíveis causas desse erro estão:
Uma operação de modo de saída sequencial FileOpen foi executada para um arquivo que já está aberto
Uma instrução refere-se a um arquivo aberto.
Confira também
FileOpen
O arquivo é muito grande para ser lido em um
array de bytes
27/09/2021 • 2 minutes to read
O tamanho do arquivo que você está tentando ler em uma matriz de bytes excede 4 GB. O
[Link] método 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)
27/09/2021 • 2 minutes to read
Não foi possível encontrar o nome especificado para o nome de arquivo ou a classe em uma chamada para a
GetObject função.
Confira também
Tipos de erro
Arquivo não localizado (erro de tempo de execução
do Visual Basic)
27/09/2021 • 2 minutes to read
O arquivo não foi encontrado quando especificado. O erro tem as seguintes causas possíveis:
Uma instrução refere-se a um arquivo que não existe.
Foi feita uma tentativa de chamar um procedimento em uma DLL (biblioteca de vínculo dinâmico), mas a
biblioteca especificada na Lib cláusula da Declare instrução não pode ser encontrada.
Você tentou abrir um projeto ou carregar um arquivo de texto que não existe.
Confira também
Instrução Declare
BC33107: o primeiro operand em uma expressão
binária 'If' deve ser anulada ou um tipo de
referência
27/09/2021 • 2 minutes to read
Uma If expressão 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 que pode ser anulado. Se o primeiro
argumento for avaliada como algo diferente de Nothing , seu valor será retornado. Se o primeiro argumento
for avaliado como Nothing , o segundo argumento será avaliado e retornado.
Por exemplo, o código a seguir contém If duas expressões, uma com três argumentos e outra com dois
argumentos. As expressões calculam e retornam o mesmo valor.
Dim choice1 = 4
Dim choice2 = 5
Dim booleanVar = True
ID do erro: BC33107
Confira também
Operador If
Instrução If...Then...Else
Tipos de valor que podem ser anulados
BC30148: a primeira instrução deste 'Sub New' deve
ser uma chamada para '[Link]' ou
'[Link]' (Nenhum construtor acessível sem
parâmetros)
27/09/2021 • 2 minutes to read
A primeira instrução deste 'Sub New' deve ser uma chamada para '[Link]' ou '[Link]' porque a
classe base ' ' de ' ' não tem um 'Sub New' acessível que pode ser chamado sem <basename> <derivedname>
argumentos.
Em uma classe derivada, cada construtor deve chamar um construtor de classe base ( [Link] ). Se a classe
base tiver um construtor sem parâmetros acessíveis a classes derivadas, [Link] poderá ser chamado
automaticamente. Caso não seja, 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
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 o '
<constructorname> ' na classe base '
<baseclassname> ' de ' <derivedclassname> ' está
marcado como obsoleto: ' <errormessage> '
27/09/2021 • 2 minutes to read
Um construtor de classe não chama explicitamente um construtor de classe base e o construtor da classe base
implícita é marcado com o ObsoleteAttribute atributo e a diretiva para tratá-lo como um erro.
quando um construtor de classe derivada não chama um construtor de classe base, Visual Basic tenta gerar uma
chamada implícita para um construtor de classe base sem parâmetros. se não houver nenhum construtor
acessível na classe base que possa ser chamado sem argumentos, Visual Basic não poderá gerar uma chamada
implícita. nesse caso, o construtor necessário é marcado com o ObsoleteAttribute atributo, portanto Visual Basic
não pode chamá-lo.
Você pode marcar qualquer elemento de programação como não sendo mais usado aplicando
ObsoleteAttribute -se a ele. Se você fizer isso, poderá definir a propriedade do atributo IsError como True ou
False . Se você defini-lo como True , o compilador tratará uma tentativa de usar o elemento como um erro.
Se você defini-lo como False , ou deixá-lo como padrão 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
instanciações de ' System. Collections. Generic.
IEnumerable (Of T) '
27/09/2021 • 2 minutes to read
Uma For Each instrução especifica uma variável de iterador que tem mais de um GetEnumerator método.
A variável de iterador deve ser de um tipo que implementa a [Link]
[Link]<T> interface ou em um dos Collections namespaces do .NET
Framework. É possível que uma classe implemente mais de uma interface genérica construída, usando um
argumento de tipo diferente para cada construção. Se uma classe que faz isso for usada para a variável de
iterador, essa variável terá mais de um GetEnumerator método. nesse caso, Visual Basic não pode escolher qual
método chamar.
ID do erro: BC32096
Confira também
Instrução For Each...Next
Interfaces
BC31535: a referência do assembly Friend
<reference> é inválida
27/09/2021 • 2 minutes to read
A referência do assembly Friend <reference> é inválida. O nome forte assinado em assemblies deve especificar
uma chave pública em suas declarações InternalsVisibleTo.
O nome do assembly passado para o InternalsVisibleToAttribute Construtor de atributo identifica um assembly
de nome forte, mas não inclui um PublicKey atributo.
ID do erro: BC31535
Confira também
AssemblyName
Assemblies Friend
BC42105: a função <procedurename> ' ' não
retorna um valor em todos os caminhos de código
27/09/2021 • 2 minutes to read
A função <procedurename> ' ' não retorna um valor em todos os caminhos de código. Você não tem uma
instrução 'Return'?
Um Function procedimento tem pelo menos um caminho possível por meio de seu código que não retorna um
valor.
Você pode retornar um valor de Function um procedimento de qualquer uma das seguintes maneiras:
Inclua o valor em uma instrução return.
Atribua o valor ao nome Function do procedimento e execute uma Exit Function instrução .
Atribua o valor ao nome Function do procedimento e execute a End Function instrução .
Se o controle passar para ou e você não tiver atribuído nenhum valor ao nome do procedimento, o
procedimento retornará o valor padrão Exit Function do tipo de dados de End Function retorno. Para obter
mais informações, consulte "Comportamento" na instrução function.
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configuring Warnings in Visual Basic.
ID do erro: BC42105
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
27/09/2021 • 2 minutes to read
A avaliação de função está desabilitada porque uma avaliação de função anterior atingiu o tempo limite. Para
reabilitar a avaliação da função, execute novamente ou reinicie a depuração.
no depurador de Visual Studio, uma expressão especifica uma chamada de procedimento, mas outra avaliação
atingiu o tempo limite.
As possíveis causas de uma chamada de procedimento para o tempo limite incluem um loop infinito ou um
loop infinito. Para obter mais informações, consulte para... Próxima instrução.
Um caso especial de um loop infinito é a recursão. Para obter mais informações, consulte 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 ser restritos à classe
27/09/2021 • 2 minutes to read
Um procedimento é declarado com um parâmetro opcional que usa um parâmetro de tipo que não está restrito
a ser um tipo de referência.
Você sempre deve 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 , que é Nothing um valor válido para qualquer tipo de referência. No
entanto, se o parâmetro for de um tipo de valor, esse tipo deverá ser um tipo de dados elementar predefinido
por Visual Basic. Isso porque um tipo de valor composto, como uma estrutura definida pelo usuário, não tem
nenhum valor padrão válido.
Ao usar um parâmetro de tipo para um parâmetro 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 Class palavra-chave 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
27/09/2021 • 2 minutes to read
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 Get instrução é marcada como particular e o código de chamada está fora da classe ou estrutura na
qual a propriedade é definida.
A Get instrução é marcada como protegida e o código de chamada não está na classe ou estrutura na
qual a propriedade é definida, nem em uma classe derivada.
A Get instrução é marcada como Friend e o código de chamada não está no mesmo assembly no qual a
propriedade é 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 Handles requer uma variável
WithEvents definida no tipo que contém ou um de
seus tipos base
27/09/2021 • 2 minutes to read
Você não forneceu uma WithEvents variável em sua Handles cláusula . A palavra-chave no final de uma
declaração de procedimento faz com que ela processe eventos gerados por uma variável de objeto Handles
declarada usando a WithEvents palavra-chave .
ID do erro: BC30506
Exemplo
No exemplo a seguir, Visual Basic gera o erro do compilador porque a palavra-chave BC30506 WithEvents não é
usada na definição da [Link] instância.
Imports [Link]
Module Module1
Private _timer1 As New Timer() With {.Interval = 1000, .Enabled = True}
Sub Main()
[Link]("Press any key to start the timer...")
[Link]()
_timer1.Start()
[Link]()
End Sub
O exemplo a seguir é compilado com êxito porque a _timer1 variável é definida com a palavra-chave
WithEvents :
Imports [Link]
Module Module1
Private WithEvents _timer1 As New Timer() With {.Interval = 1000}
Sub Main()
[Link]("Press any key to start the timer...")
[Link]()
_timer1.Start()
[Link]()
End Sub
End Module
Confira também
Alças
BC30203: identificador esperado
27/09/2021 • 2 minutes to read
Um elemento de programação que não é um nome de elemento declarado reconhecível ocorre quando o
contexto requer um nome de elemento. Uma causa possível é que um atributo foi especificado em algum lugar
diferente do início da instrução.
ID do erro: BC30203
Confira também
Nomes de elementos declarados
Visão geral de atributos
BC30033: O identificador é muito longo
28/09/2021 • 2 minutes to read
O nome ou identificador de cada elemento de programação é limitado a 1023 caracteres. Além disso, um nome
totalmente qualificado não pode exceder 1023 caracteres. Isso significa que toda a cadeia de caracteres do
identificador ( ) não pode ter mais de <namespace>.<...>.<namespace>.<class>.<element> 1023 caracteres,
incluindo os caracteres do operador de acesso de membro ( . ).
ID do erro: BC30033
Confira também
Nomes de elementos declarados
BC30996: inicializador esperado
27/09/2021 • 2 minutes to read
Você tentou declarar uma instância de uma classe usando um inicializador de objeto no qual a lista de
inicialização está vazia, conforme mostrado no exemplo a seguir.
' Not valid.
Pelo menos um campo ou propriedade deve ser inicializado na lista de inicializadores, conforme mostrado no
exemplo a seguir.
Dim aStudent As New Student With {.year = "Senior"}
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
27/09/2021 • 2 minutes to read
Uma Input instrução está lendo um arquivo vazio ou um em que todos os dados são usados, ou você usou a
EOF função com um arquivo aberto para acesso binário.
Confira também
Input
EOF
Seek
Loc
Erro interno ocorrido em <location>
27/09/2021 • 2 minutes to read
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 ' para ' ' ao copiar
o valor do parâmetro <typename1> <typename2>
'ByRef' ' de volta para <parametername> o
argumento correspondente.
27/09/2021 • 2 minutes to read
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 os operadores que têm tipos
de referência, mas esse operand tem o tipo de valor
<typename> ' '
27/09/2021 • 2 minutes to read
O Is operador de comparação determina se duas variáveis de objeto se referem à mesma instância. Essa
comparação não está definida para tipos de valor.
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 ', pois '
TypeName ' é um tipo anulável
27/09/2021 • 2 minutes to read
Uma variável declarada como um tipo de valor anulável foi comparada a uma expressão diferente de Nothing
usar o IsNot operador.
ID do erro: BC32128
End If
End If
Confira também
Tipos de valor anulável
Operador IsNot
BC30801: rótulos que são números devem ser
seguidos por dois-pontos
27/09/2021 • 2 minutes to read
Os números de linha seguem as mesmas regras que outros tipos de rótulos e devem conter dois-pontos.
ID do erro: BC30801
400: X += 1
Confira também
Instrução GoTo
BC42326: a expressão lambda não será removida
desse manipulador de eventos
27/09/2021 • 2 minutes to read
A expressão lambda não será removida desse manipulador de eventos. Atribua a expressão lambda a uma
variável e use a variável para adicionar e remover o evento.
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 eles
sejam idênticos. Portanto, o código a seguir exibe False .
Module Module1
Sub Main()
Dim fun1 As ChangeInteger = Function(p As Integer) p + 1
Dim fun2 As ChangeInteger = Function(p As Integer) p + 1
[Link](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
RemoveHandler instrução .
Module Module1
Sub Main()
End Sub
End Module
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configuring Warnings in Visual Basic.
ID do erro: BC42326
Sub Main()
' Use the variable again when you want to remove the listener.
RemoveHandler ProcessInteger, PrintHandler
End Sub
End Module
Confira também
Expressões lambda
Conversão de delegado reduzida
Eventos
BC36635: expressões lambda não são válidas na
primeira expressão de uma instrução ' Select Case '
27/09/2021 • 2 minutes to read
Você não pode usar uma expressão lambda para a expressão de teste em uma Select Case instrução. As
definições de expressão lambda retornam funções e a expressão de teste de uma Select Case instrução deve
ser um tipo de dados elementar.
O código a seguir causa esse erro:
ID do erro: BC36635
Você pode ter pretendido chamar a função, conforme mostrado no código a seguir:
Confira também
Expressões lambda
Instrução If...Then...Else
Instrução Select...Case
BC42017: resolução de limite tardia; Podem ocorrer
erros de runtime
28/09/2021 • 2 minutes to read
Se você declarar que a variável é de um tipo específico, o compilador poderá executar a associação antecipada
no tempo de compilação. Isso resulta em desempenho aprimorado, acesso controlado aos membros do tipo
específico e melhor capacidade de leitura do código.
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configuring Warnings in Visual Basic.
ID do erro: BC42017
Confira também
Associação antecipada e tardia
Declaração de Variável do Objeto
BC30933: a resolução de sobrecarga de latência não
pode ser aplicada a ' ' porque a instância de acesso
<procedurename> é um tipo de interface
28/09/2021 • 2 minutes to read
O compilador está tentando resolver uma referência a uma propriedade ou procedimento sobrecarregado, mas
a referência falha porque um argumento é do tipo e o objeto de referência tem o tipo de dados de Object uma
interface. O Object argumento força o compilador a resolver a referência como de limite tardia.
Nessas circunstâncias, o compilador resolve a sobrecarga por meio da classe de implementação em vez de por
meio da interface subjacente. Se a classe renomear uma das versões sobrecarregadas, o compilador não
considerará essa versão como uma sobrecarga porque seu nome é diferente. Isso, por sua vez, faz com que o
compilador ignore a versão renomeada quando ela pode ter sido a opção correta para resolver a referência.
ID do erro: BC30933
Exemplo
O exemplo a seguir mostra uma chamada para um procedimento sobrecarregado Sub que causa esse erro no
tempo de compilação.
Module m1
Interface i1
Sub s1(ByVal p1 As Integer)
Sub s1(ByVal p1 As Double)
End Interface
Class c1
Implements i1
Public Overloads Sub s1(ByVal p1 As Integer) Implements i1.s1
End Sub
Public Overloads Sub s2(ByVal p1 As Double) Implements i1.s1
End Sub
End Class
Sub Main()
Dim refer As i1 = New c1
Dim o1 As Object = 3.1415
' The following reference is INVALID and causes a compiler error.
refer.s1(o1)
End Sub
End Module
No exemplo anterior, se o compilador permitisse a chamada para conforme escrito, a resolução ocorreria por
meio da classe em s1 c1 vez da interface i1 . Isso significa que o compilador não consideraria porque seu
nome é diferente em , mesmo que seja a s2 c1 escolha correta, conforme definido por i1 .
Você pode corrigir o erro alterando a chamada para uma das seguintes linhas de código:
refer.s1(CType(o1, Integer))
refer.s1(CType(o1, Double))
Cada uma das linhas de código anteriores lança explicitamente a variável em um dos tipos de parâmetro
Object o1 definidos para as sobrecargas.
Confira também
Sobrecarga de procedimento
Resolução de sobrecarga
Função CType
BC30157: '.' ou '!' à frente só pode aparecer dentro
de uma instrução 'With'
27/09/2021 • 2 minutes to read
Um ponto (.) ou ponto de exclamação (!) que não está dentro de um bloco ocorre sem With uma expressão à
esquerda. O acesso de membro ( ) e o acesso de membro do dicionário ( ) exigem uma expressão que especifica
. o elemento que contém o ! membro. Isso deve aparecer imediatamente à esquerda do acessador ou como
o destino de um With bloco que contém o acesso de membro.
ID do erro: BC30157
Confira também
Caracteres especiais no código
Instrução With...End With
BC30494: a linha é muito longa
27/09/2021 • 2 minutes to read
Confira também
Tipos de erro
BC30830: não há mais suporte para instruções 'Line'
27/09/2021 • 2 minutes to read
Não há mais suporte para instruções de linha. A funcionalidade de E/S de arquivo está disponível como e a
funcionalidade de [Link] gráficos está disponível como
[Link] .
ID do erro: BC30830
Confira também
[Link]
[Link]
Access de arquivo com o Visual Basic
BC36563: o método não tem uma assinatura
compatível com o delegado
27/09/2021 • 2 minutes to read
Há uma incompatibilidade entre as assinaturas do método e o delegado que você está tentando usar. A
Delegate instrução define os tipos de parâmetro e os tipos de retorno de uma classe delegate. Qualquer
procedimento que tenha parâmetros correspondentes de tipos compatíveis e tipos de retorno pode ser usado
para criar uma instância desse tipo delegado.
ID do erro: BC36563
Confira também
Operador AddressOf
Instrução Delegate
Resolução de sobrecarga
Tipos genéricos no Visual Basic
BC32126: Métodos de '[Link](Of T)' não
podem ser usados como operadores do operador
'AddressOf'
27/09/2021 • 2 minutes to read
Uma instrução usa AddressOf o operador com um operador que representa um procedimento da estrutura
Nullable<T> .
ID do erro: BC32126
Module Module1
Sub Main()
Dim nullInstance As New Nullable(Of Integer)(1)
[Link]([Link]())
End Sub
Module As instruções devem aparecer na parte superior do arquivo de origem imediatamente após as
instruções e , atributos globais e declarações de namespace, mas antes de Option Imports todas as outras
declarações.
ID do erro: BC30617
Confira também
Instrução Module
BC40031: o nome <membername> não tem
conformidade com CLS
27/09/2021 • 2 minutes to read
Um assembly é marcado como <CLSCompliant(True)> , mas expõe um membro com um nome que começa com
um sublinhado ( _ ).
Um elemento de programação pode conter um ou mais sublinhados, mas para ser compatível com a
independência de idioma e com os componentes de Language-Independent (CLS), ele não deve começar com
um sublinhado. Consulte nomes de elementos declarados.
Quando você aplica o a CLSCompliantAttribute um elemento de programação, você define o parâmetro do
atributo isCompliant como True ou False para indicar conformidade ou não conformidade. Não há nenhum
padrão para esse parâmetro, e você deve fornecer um valor.
Se você não aplicar o CLSCompliantAttribute a um elemento, será considerado como não compatível.
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configurando 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 está declarado
27/09/2021 • 2 minutes to read
Uma instrução refere-se a um elemento de programação, mas o compilador não pode encontrar um elemento
com esse nome exato.
ID do erro: BC30451
3. Se a ortografia estiver correta e a sintaxe de qualquer acesso de membro de objeto estiver correta,
verifique se o elemento foi declarado. Para obter mais informações, consulte Elementos declarados.
4. Se o elemento de programação tiver sido declarado, verifique se ele está no escopo. Se a instrução de
referência estiver fora da região declarando o elemento de programação, talvez seja necessário qualificar
o nome do elemento. Para obter mais informações, consulte Escopo em Visual Basic.
5. Se você não estiver usando um tipo totalmente qualificado ou um tipo e um nome de membro (por
exemplo, seu código se refere a uma propriedade como em vez de ), adicione uma [Link]
[Link] 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 ) e a mensagem de erro se referir a um tipo ou membro no assembly do
[Link], configure seu aplicativo para compilar com uma referência à Biblioteca de
Runtime do * <Project Sdk="[Link]"> Visual Basic. Por padrão, um subconjunto da biblioteca
é inserido em seu assembly em um projeto no estilo SDK.
Por exemplo, o exemplo a seguir falha ao compilar porque o
[Link] método não pode ser encontrado. Ele
não está inserido no subconjunto do Visual Basic Runtime incluído com seu aplicativo.
Imports [Link]
Para resolver esse erro, adicione o elemento à seção projetos, como mostra Visual Basic
<VBRuntime>Default</VBRuntime> arquivo de projeto a <PropertyGroup> seguir.
<Project Sdk="[Link]">
<ItemGroup>
<Reference Include="[Link]" />
</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: <namespacename> o nome no
namespace raiz <fullnamespacename> não tem
conformidade com CLS
27/09/2021 • 2 minutes to read
Um assembly é marcado como <CLSCompliant(True)> , mas um elemento do nome do namespace raiz começa
com um sublinhado ( _ ).
Um elemento de programação pode conter um ou mais sublinhados, mas para ser compatível com a
independência de idioma e com os componentes de Language-Independent (CLS), ele não deve começar com
um sublinhado. Consulte nomes de elementos declarados.
Quando você aplica o a CLSCompliantAttribute um elemento de programação, você define o parâmetro do
atributo isCompliant como True ou False para indicar conformidade ou não conformidade. Não há nenhum
padrão para esse parâmetro, e você deve fornecer um valor.
Se você não aplicar o CLSCompliantAttribute a um elemento, será considerado como não compatível.
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configurando 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: namespace ou tipo especificado em
Importações ' ' não contém nenhum membro
público ou <qualifiedelementname> não pode ser
encontrado
27/09/2021 • 2 minutes to read
O namespace ou o tipo especificado em Importações <qualifiedelementname> ' ' não contém nenhum membro
público ou não pode ser encontrado. Certifique-se de que o namespace ou o tipo está definido e contém pelo
menos um membro público. Certifique-se de que o nome do alias não contenha outros aliases.
Uma Imports instrução especifica um elemento que contém que não pode ser encontrado ou não define
nenhum Public membro.
Um elemento que contém pode ser um namespace, classe, estrutura, módulo, interface ou enumeração. O
elemento que contém contém membros, como variáveis, procedimentos ou outros elementos que contêm.
A finalidade da importação é permitir que seu código acesse membros de namespace ou tipo sem precisar
qualificá-los. Seu projeto também pode precisar adicionar uma referência ao namespace ou ao tipo. Para obter
mais informações, consulte "Importando elementos que contêm" em Referências a elementos declarados.
Se o compilador não conseguir encontrar o elemento que contém especificado, ele não poderá resolver
referências que o usam. Se ele encontrar o elemento , mas o elemento não expor nenhum Public membro,
nenhuma referência poderá ser bem-sucedida. Em ambos os casos, não há sentido importar o elemento.
Tenha em mente que, se você importar um elemento que contém e atribuir um alias de importação a ele, não
poderá usar esse alias de importação para importar outro elemento. O código a seguir gera um erro do
compilador.
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: Namespace ou tipo especificado no nível
do projeto Importações ' ' não contém nenhum
membro público ou <qualifiedelementname> não
pode ser encontrado
28/09/2021 • 2 minutes to read
Namespace ou tipo especificado no nível do projeto <qualifiedelementname> Importações ' ' não contém
nenhum membro público ou não pode ser encontrado. Certifique-se de que o namespace ou o tipo está
definido e contém pelo menos um membro público. Certifique-se de que o nome do alias não contenha outros
aliases.
Uma propriedade de importação de um projeto especifica um elemento que contém que não pode ser
encontrado ou não define nenhum Public membro.
Um elemento que contém pode ser um namespace, classe, estrutura, módulo, interface ou enumeração. O
elemento que contém contém membros, como variáveis, procedimentos ou outros elementos que contêm.
A finalidade da importação é permitir que seu código acesse membros de namespace ou tipo sem precisar
qualificá-los. Seu projeto também pode precisar adicionar uma referência ao namespace ou ao tipo. Para obter
mais informações, consulte "Importando elementos que contêm" em Referências a elementos declarados.
Se o compilador não conseguir encontrar o elemento que contém especificado, ele não poderá resolver
referências que o usam. Se ele encontrar o elemento , mas o elemento não expor nenhum Public membro,
nenhuma referência poderá ser bem-sucedida. Em ambos os casos, não há sentido importar o elemento.
Use o designer Project para especificar elementos a importar. Use a seção Namespaces impor tados da
página Referências. Você pode acessar o designer Project clicando duas vezes no ícone Meu Project 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
27/09/2021 • 2 minutes to read
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 compatível com o delegado '
<delegatename> '
27/09/2021 • 2 minutes to read
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.
O erro será gerado se uma expressão lambda com um argumento for declarada como tipo Del :
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> '
27/09/2021 • 2 minutes to read
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 estiver definido em um módulo.
ID do erro: BC30737
Confira também
Estrutura de um programa Visual Basic
Procedimentos
BC40033: <membername> não é permitido
compatível com CLS em uma interface em
conformidade com CLS
27/09/2021 • 2 minutes to read
Confira também
Instrução Interface
BC36629: não há suporte para inferência de tipo
anulável neste contexto
27/09/2021 • 2 minutes to read
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.
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
27/09/2021 • 2 minutes to read
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 erro: BC30106
Confira também
matrizes
O objeto ou a classe não dá suporte ao conjunto de
eventos
27/09/2021 • 2 minutes to read
Você tentou usar uma WithEvents variável com um componente que não pode funcionar como uma origem do
evento para o conjunto de eventos especificado. Por exemplo, você queria coletar os eventos de um objeto e, em
seguida, criar outro objeto que Implements o primeiro objeto. Embora você possa imaginar que possa coletar os
eventos do objeto implementado, esse nem sempre é o caso. Implements implementa apenas uma interface
para métodos e propriedades. WithEvents Não tem suporte para privado UserControls , porque as
informações de tipo necessárias para gerar o ObjectEvent não estão disponíveis no tempo de execução.
Confira também
WithEvents
Instrução Implements
Objeto obrigatório (Visual Basic)
27/09/2021 • 2 minutes to read
Referências a propriedades e métodos geralmente exigem um qualificador de objeto explícito. Esse é um caso.
Confira também
Tipos de erro
Variável de objeto ou variável com bloco não
definida
27/09/2021 • 2 minutes to read
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, o padrão será o tipo Object .
Por exemplo, uma variável declarada com seria do Dim x tipo Object; uma variável declarada com seria
do Dim x As String tipo String .
TIP
A Option Strict instrução não permite a digitação implícita que resulta em um Object tipo. Se você omitir o
tipo, ocorrerá um erro em tempo de compilação. Consulte instrução Option Strict.
Você está tentando referenciar um objeto que foi definido como Nothing .
Você está tentando acessar um elemento de uma variável de matriz que não foi declarada corretamente.
Por exemplo, uma matriz declarada como products() As String disparará o erro se você tentar
referenciar 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 dentro de With...End With um bloco antes que o bloco seja
inicializado. Um With...End With bloco deve ser inicializado executando o ponto de entrada da With
instrução.
NOTE
Em versões anteriores do Visual Basic ou VBA, esse erro também era disparado atribuindo um valor a uma variável sem
usar a palavra-chave ( em vez Set x = "name" de Set x = "name" ). A Set palavra-chave não é mais válida no
Visual Basic .Net.
Option Strict On
Quando você executar o projeto, um erro do compilador aparecerá na Lista de Erros para qualquer
variável especificada sem um tipo.
2. Se você não quiser habilitar o , pesquise no código todas as variáveis que foram especificadas sem um
tipo ( em vez de ) e adicione o Option Strict Dim x tipo Dim x As String pretendido à declaração.
3. Certifique-se de que você não está se referindo a uma variável de objeto que foi definida como Nothing .
Pesquise o código para a palavra-chave e revise o código para que o objeto não seja definido como até
depois Nothing Nothing que você o referenciar.
4. Certifique-se de que todas as variáveis de matriz sejam dimensionadas antes de acessá-las. Você pode
atribuir uma dimensão ao criar a matriz pela primeira vez ( em vez de ) ou usar a palavra-chave para
definir as dimensões da matriz antes de Dim x(5) As String Dim x() As String ReDim acessá-la pela
primeira vez.
5. Certifique-se With de que o bloco seja inicializado executando o ponto de entrada da With instrução.
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 um
destes: +,-, *, , /, ^, & , like, mod, and ou, Xor, not,
<<, >>...
27/09/2021 • 2 minutes to read
Você pode declarar apenas um operador que seja elegível para sobrecarga. A tabela a seguir lista os operadores
que você pode declarar.
Observe que o operador = na lista binária é o operador de comparação, não o operador de atribuição.
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
27/09/2021 • 2 minutes to read
Um argumento opcional em uma declaração de procedimento é seguido por um argumento necessário. Cada
argumento após um argumento opcional também deve ser opcional.
ID do erro: BC30202
Confira também
Parâmetros Opcionais
BC30812: parâmetros opcionais devem especificar
um valor padrão
27/09/2021 • 2 minutes to read
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 exemplo a seguir gera BC30812:
Confira também
Opcional
O ordinal não é válido
28/09/2021 • 2 minutes to read
Sua chamada para uma DLL (biblioteca de vínculo dinâmico) indicou usar um número em vez de um nome de
procedimento, usando a #num sintaxe. Esse erro tem as seguintes causas possíveis:
Falha ao tentar converter a #num expressão em um ordinal.
O #num especificado não especifica nenhuma função na dll.
Uma biblioteca de tipos tem uma declaração inválida que resulta em uso interno de um número ordinal
inválido.
Confira também
Instrução Declare
BC2004: memória insuficiente
27/09/2021 • 2 minutes to read
Confira também
Tipos de erro
Sem espaço na pilha (Visual Basic)
27/09/2021 • 2 minutes to read
A pilha é uma área de trabalho de memória que aumenta e diminui dinamicamente com as demandas de seu
programa em execução. Seus limites foram excedidos.
Confira também
Janelas de memória
Fora do espaço da cadeia de caracteres (Visual
Basic)
27/09/2021 • 2 minutes to read
Com 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: Overflow (erro de Visual Basic)
27/09/2021 • 2 minutes to read
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)
27/09/2021 • 2 minutes to read
Um estouro resulta quando você tenta uma atribuição que excede os limites do destino da atribuição.
Confira também
[Link]
[Link]
Data Types
Tipos de erro
demarcador não localizado
27/09/2021 • 2 minutes to read
Durante uma operação de acesso a arquivo ou de acesso a disco, o sistema operacional não pôde localizar o
caminho especificado. O caminho para um arquivo inclui a especificação da unidade mais os diretórios e
subdiretórios que devem ser percorridos para localizar o arquivo. Um caminho pode ser relativo ou absoluto.
Confira também
Tipos de erro
Erro de acesso ao demarcador/arquivo
27/09/2021 • 2 minutes to read
Durante uma operação de acesso a arquivo ou de acesso a disco, o sistema operacional não pôde estabelecer
uma conexão entre o caminho e o nome do arquivo.
Confira também
Tipos de erro
Permissão negada (Visual Basic)
27/09/2021 • 2 minutes to read
Foi feita uma tentativa de gravar em um disco protegido por gravação ou acessar um arquivo bloqueado.
Confira também
Tipos de erro
A chamada de procedimento ou o argumento não
é válido (Visual Basic)
27/09/2021 • 2 minutes to read
Confira também
Tipos de erro
BC42107: a propriedade <propertyname> ' ' não
retorna um valor em todos os caminhos de código
27/09/2021 • 2 minutes to read
A propriedade <propertyname> ' ' não retorna um valor em todos os caminhos de código. Uma exceção de
referência nula pode ocorrer em tempo de executar quando o resultado é usado.
Um procedimento Get de propriedade tem pelo menos um caminho possível por meio de seu código que não
retorna um valor.
Você pode retornar um valor de um procedimento Get de propriedade de qualquer uma das seguintes
maneiras:
Atribua o valor ao nome da propriedade e execute uma Exit Property instrução .
Atribua o valor ao nome da propriedade e execute a End Get instrução .
Inclua o valor em uma instrução return.
Se o controle passar para ou e você não tiver atribuído nenhum valor ao nome da propriedade, o procedimento
retornará o valor padrão do tipo de Exit Property End Get dados da Get propriedade. Para obter mais
informações, consulte "Comportamento" na instrução function.
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configuring Warnings in Visual Basic.
ID do erro: BC42107
Confira também
Procedimentos de propriedade
Instrução Property
Instrução Get
O índice de matriz da propriedade não é válido
27/09/2021 • 2 minutes to read
Confira também
matrizes
Procedimento let de propriedade não definido e
procedimento get de propriedade não retornou um
objeto
27/09/2021 • 2 minutes to read
Determinadas propriedades, métodos e operações só podem ser aplicadas a Collection objetos. Você
especificou uma operação ou propriedade que é exclusiva para coleções, mas o objeto não é uma coleção.
Confira também
Collection
Propriedade não localizada
27/09/2021 • 2 minutes to read
Confira também
Tipos de erro
Propriedade ou método não localizado
27/09/2021 • 2 minutes to read
Confira também
Tipos de erro
BC36633: a variável <variable> de intervalo 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
27/09/2021 • 2 minutes to read
Um nome de variável de intervalo especificado em uma Select cláusula,, From Aggregate ou Let duplica o
nome de uma variável de intervalo já especificada anteriormente na consulta ou o nome de uma variável que é
implicitamente declarada pela consulta, como um nome de campo ou o nome de uma função de agregação.
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 pode ser
deduzido somente de um nome simples ou
qualificado sem argumentos
27/09/2021 • 2 minutes to read
Um elemento de programação que usa um ou mais argumentos é incluído em uma consulta LINQ. O
compilador não pode inferir uma variável de intervalo desse elemento de programação.
ID do erro: BC36599
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> '
28/09/2021 • 2 minutes to read
Uma expressão usa um tipo, como uma classe, estrutura, interface, enumeração ou delegado, que é definido
fora do seu projeto. No entanto, você tem referências de projeto para mais de um assembly que define esse
tipo.
Os projetos citados produzem assemblies com o mesmo nome. Portanto, o compilador não pode determinar
qual assembly usar para o tipo que você está acessando.
para acessar um tipo definido em outro assembly, o compilador Visual Basic deve ter uma referência a esse
assembly. Essa deve ser uma referência única e não ambígua que não cause referências circulares entre
projetos.
ID do erro: BC30969
Confira também
Gerenciando referências em um projeto
Referências a elementos declarados
Gerenciando propriedades de solução e de projeto
Solução de Problemas de Referências Quebradas
BC30007: referência necessária para o assembly '
<assemblyname> ' que contém a classe base '
<classname> '
27/09/2021 • 2 minutes to read
Referência necessária para o assembly ' <assemblyname> ' que contém a classe base ' <classname> '. Adicione
um ao seu projeto.
A classe é definida em uma DLL (biblioteca de vínculo dinâmico) ou assembly que não é referenciada
diretamente em seu projeto. o compilador Visual Basic requer uma referência para evitar ambigüidade, caso a
classe esteja definida em mais de uma DLL ou assembly.
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 tempo de
execução ' <function> ' não está definida.
27/09/2021 • 2 minutes to read
Visual Basic está tentando fazer uma chamada interna para uma função no tempo de execução de Visual Basic
([Link]) que não pode ser encontrado.
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="[Link]"> ). Por padrão, apenas um subconjunto do assembly [Link]
é inserido no assembly do aplicativo e <function> não é incluído nesse subconjunto.
<VBRuntime>Default</VBRuntime>
Confira também
-opção de compilador vbruntime
Retomar sem erro
27/09/2021 • 2 minutes to read
Uma Resume instrução apareceu fora do código de tratamento de erros ou o código entrou em um
manipulador de erros, embora não haja erro.
Confira também
Instrução Resume
Instrução On Error
BC40027: o tipo de retorno da função
<procedurename> ' ' não está em conformidade
com CLS
27/09/2021 • 2 minutes to read
Um procedimento é marcado como , mas retorna um tipo marcado como , não está marcado ou não se qualifica
porque é um Function <CLSCompliant(True)> tipo não <CLSCompliant(False)> compatível.
Para que um procedimento seja compatível com o CLS (Language Independent e Language-Independent
Components), ele deve usar apenas tipos compatíveis com CLS. Isso se aplica aos tipos dos parâmetros, ao tipo
de retorno e aos tipos de todas as suas variáveis locais.
Os seguintes Visual Basic de dados não são compatíveis com CLS:
Tipo de Dados SByte
Tipo de Dados UInteger
Tipo de Dados ULong
Tipo de Dados UShort
Ao aplicar o a um elemento de programação, você definirá o parâmetro do atributo como ou para indicar a
conformidade ou CLSCompliantAttribute isCompliant não True False conformidade. Não há nenhum padrão
para esse parâmetro e você deve fornecer um valor.
Se você não aplicar o CLSCompliantAttribute a um elemento, ele será considerado não compatível.
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configuring Warnings in 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
Set propriedade.
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 Set instrução é marcada como Privada e o código de chamada está fora da classe ou estrutura na qual
a propriedade é definida.
A instrução é marcada como Protegida e o código de chamada não está na classe ou estrutura na qual a
propriedade está definida, nem em Set uma classe derivada.
A Set instrução é marcada como Friend e o código de chamada não está no mesmo assembly no qual a
propriedade é 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
27/09/2021 • 2 minutes to read
Foi feita uma tentativa de excluir uma chave do registro, mas a operação falhou porque algumas subchaves não
podem ser excluídas. Normalmente, isso se deve à falta de permissões.
Confira também
[Link]
DeleteSubKey
RegistryPermission
BC32005: a instrução não pode encerrar um bloco
fora de uma instrução 'If' da linha
27/09/2021 • 2 minutes to read
Uma instrução de linha única contém várias instruções separadas por dois-pontos (:), uma das quais é uma
instrução para um bloco de controle fora da If End linha If única. Instruções de linha If única não usam a
End If instrução .
ID do erro: BC32005
Confira também
Instrução If...Then...Else
BC30001: a instrução não é válida em um
namespace
28/09/2021 • 2 minutes to read
A instrução não pode aparecer no nível de um namespace. As únicas declarações permitidas no nível de
namespace são declarações de módulo, interface, classe, delegado, enumeração e estrutura.
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
27/09/2021 • 2 minutes to read
A instrução não é válida em Sub um procedimento de propriedade , , ou Function Get Set . Algumas
instruções podem ser colocadas no nível do módulo ou da classe. Outros, como Option Strict , devem estar no
nível do namespace e preceder todas as outras declarações.
ID do erro: BC30024
Confira também
Instrução Sub
Instrução Function
Instrução Get
Instrução Set
BC30648: constantes de cadeia de caracteres devem
terminar com aspas duplas
27/09/2021 • 2 minutes to read
Confira também
Cadeias de caracteres
BC30941: a estrutura ' <structurename> ' deve
conter pelo menos uma variável de membro de
instância ou pelo menos uma declaração de evento
de instância não marcada como ' Custom '
27/09/2021 • 2 minutes to read
Uma definição de estrutura não inclui nenhuma variável não compartilhada ou eventos não compartilhados
não-personalizados.
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 a todas as instâncias coletivamente (compartilhado). As constantes, as propriedades
e os procedimentos não compartilhados não atendem a esse requisito. Além disso, se não houver nenhuma
variável não compartilhada e apenas um evento não compartilhado, esse evento não poderá ser um Custom
evento.
ID do erro: BC30941
Confira também
Estruturas
Como: Declarar uma estrutura
Instrução Structure
BC30420: ' Sub Main ' não encontrado em '
<name> '
27/09/2021 • 2 minutes to read
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)
27/09/2021 • 2 minutes to read
Um Sub ou Function deve ser definido para ser chamado. Possíveis causas do erro incluem:
Digitação incorreta do nome do procedimento.
Tentativa de chamar um procedimento de outro projeto sem adicionar explicitamente uma referência a
esse projeto na caixa de diálogo referências .
Especificar um procedimento que não seja visível para o procedimento de chamada.
declarando uma rotina de DLL (biblioteca de vínculo dinâmico) ou Windows uma rotina de recurso de
código do Macintosh que não está na biblioteca ou no recurso de código especificado.
Confira também
Tipos de erro
Gerenciando referências em um projeto
Instrução Sub
Instrução Function
Subscrito fora do intervalo (Visual Basic)
27/09/2021 • 2 minutes to read
Um subscrito de matriz não é válido porque está fora do intervalo permitido. O menor valor de subscrito para
uma dimensão é sempre 0, e o maior valor de subscrito é retornado pelo GetUpperBound método para essa
dimensão.
Confira também
[Link]
matrizes
TextFieldParser não pode concluir a operação de
leitura porque o tamanho máximo do buffer foi
excedido
27/09/2021 • 2 minutes to read
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 para a variável ' <variablename> '
não será inferido porque está associado a um
campo em um escopo delimitador
28/09/2021 • 2 minutes to read
O tipo da variável ' <variablename> ' não será inferido porque está associado a um campo em um escopo
delimitador. Altere o nome de ' <variablename> ' ou use o nome totalmente qualificado (por exemplo, ' me.
VariableName ' ou ' MyBase. VariableName ').
Uma variável de controle de loop em seu código tem o mesmo nome que um campo da classe ou outro escopo
delimitador. Como a variável de controle é usada sem uma As cláusula, ela é associada ao campo no escopo
delimitador, e o compilador não cria uma nova variável para ela ou infere seu tipo.
No exemplo a seguir, Index , a variável de controle na For instrução é associada ao Index campo na
Customer classe. O compilador não cria uma nova variável para a variável de controle Index ou infere seu tipo.
Class Customer
Sub Main()
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 Configurando avisos no Visual Basic.
ID do erro: BC42110
For I = 1 To 10
Esclareça que a variável de controle de loop é vinculada ao campo de classe prefixando Me. para o nome
da variável.
For [Link] = 1 To 10
Em vez de depender da inferência de tipo local, use uma As cláusula para especificar um tipo para a
variável de controle de loop.
For Index As Integer = 1 To 10
Exemplo
O código a seguir mostra o exemplo anterior com a primeira correção em vigor.
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)
28/09/2021 • 2 minutes to read
Confira também
matrizes
Esta chave já está associada a um elemento desta
coleção
27/09/2021 • 2 minutes to read
A chave especificada para um membro da coleção já identifica outro membro da coleção. Uma chave é uma
cadeia de caracteres especificada no Add método que identifica exclusivamente um membro específico de uma
coleção.
Confira também
Tipos de erro
Muitos arquivos
27/09/2021 • 2 minutes to read
Mais arquivos foram criados no diretório raiz do que o sistema operacional permite ou mais arquivos foram
abertos do que o número especificado na configuração files = no arquivo [Link].
Confira também
Tipos de erro
BC30251: o tipo ' <typename> ' não tem
construtores
27/09/2021 • 2 minutes to read
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: tipo <typename> não tem conformidade
com CLS
27/09/2021 • 2 minutes to read
Uma variável, propriedade ou retorno de função é declarada com um tipo de dados que não tem conformidade
com CLS.
Para que um aplicativo seja compatível com a independência de idioma e com os componentes de Language-
Independent (CLS), ele deve usar somente tipos em conformidade com CLS.
os tipos de dados a seguir Visual Basic não são compatíveis com CLS:
Tipo de Dados SByte
Tipo de Dados UInteger
Tipo de Dados ULong
Tipo de Dados UShort
ID do erro: BC40041
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 Enum como , , ou Structure Class Interface .
ID do erro: BC30002
Se o tipo estiver definido, mas a biblioteca de objetos ou a biblioteca de tipos na qual ele está definido
não estiver registrada no Visual Basic, clique em Adicionar Referência no menu Project e selecione a
biblioteca de objetos ou a biblioteca de tipos apropriada.
Verifique se o tipo está em um assembly que faz parte do perfil de .NET Framework direcionado. Para
obter mais informações, consulte Solução de problemas de erros de definição de destino do .NET
Framework.
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 os argumentos de
tipo a partir do delegado
27/09/2021 • 2 minutes to read
Uma instrução de atribuição usa AddressOf para atribuir o endereço de um procedimento genérico a um
delegado, mas não fornece nenhum argumento de tipo para o procedimento genérico.
Normalmente, quando você invoca um tipo genérico, você fornece um argumento de tipo para cada parâmetro
de tipo que o tipo genérico define. Se você não fornecer nenhum argumento de tipo, o compilador tentará
inferir os tipos a serem passados para os parâmetros de tipo. Se o contexto não fornecer informações
suficientes para que o compilador inferir os tipos, um erro será gerado.
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)
27/09/2021 • 2 minutes to read
Você tentou converter um valor em outro tipo de uma forma que não é válida.
Confira também
Tipos de erro
BC30982: o tipo de ' ' não pode ser inferido porque
os limites de loop e a variável de etapa não são
ampliados <variablename> para o mesmo tipo
27/09/2021 • 2 minutes to read
Você escreveu um loop no qual o compilador não pode inferir um tipo de dados para a variável de controle de
loop porque as For...Next seguintes condições são verdadeiras:
O tipo de dados da variável de controle de loop não é especificado com uma As cláusula .
Os limites de loop e a variável de etapa contêm pelo menos dois tipos de dados.
Não existem conversões padrão entre os tipos de dados.
Portanto, o compilador não pode inferir o tipo de dados da variável de controle de um loop.
No exemplo a seguir, a variável de etapa é um caractere e os limites de loop são inteiros. Como não há nenhuma
conversão padrão entre caracteres e inteiros, esse erro é relatado.
ID do erro: BC30982
Dim stepVar = 1
-ou-
Use funções de conversão explícitas para converter os limites de loop e a variável de etapa nos tipos
apropriados. No exemplo anterior, aplique a Val função a stepVar .
O tipo de dados especificado para esse membro não faz parte da independência de linguagem e dos
componentes de Language-Independent (CLS). isso não é um erro no seu componente, porque o .NET
Framework e Visual Basic oferecem 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 seu componente.
os tipos de dados a seguir Visual Basic não são compatíveis com CLS:
Tipo de Dados SByte
Tipo de Dados UInteger
Tipo de Dados ULong
Tipo de Dados UShort
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configurando avisos no Visual Basic.
ID do erro: BC40025
Confira também
Reflexão
BC40042: o tipo de valor opcional para o
parâmetro opcional não está em
<parametername> conformidade com CLS
28/09/2021 • 2 minutes to read
Um procedimento é marcado como <CLSCompliant(True)> , mas declara um parâmetro Opcional com o valor
padrão de um tipo não compatível.
Para que um procedimento seja compatível com o CLS (Language Independent e Language-Independent
Components), ele deve usar apenas tipos compatíveis com CLS. Isso se aplica aos tipos dos parâmetros, ao tipo
de retorno e aos tipos de todas as suas variáveis locais. Ele também se aplica aos valores padrão de parâmetros
opcionais.
Os seguintes Visual Basic de dados não são compatíveis com CLS:
Tipo de Dados SByte
Tipo de Dados UInteger
Tipo de Dados ULong
Tipo de Dados UShort
Ao aplicar o atributo a um elemento de programação, você pode definir o parâmetro do atributo como ou para
indicar a conformidade ou não CLSCompliantAttribute isCompliant True False conformidade. Não há
nenhum padrão para esse parâmetro e você deve fornecer um valor.
Se você não se aplicar CLSCompliantAttribute a um elemento, ele será considerado não compatível.
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configuring Warnings in Visual Basic.
ID do erro: BC40042
Se você estiver intercalando com objetos COM ou automação, tenha em mente que alguns tipos têm
larguras de dados diferentes das .NET Framework. Por exemplo, int geralmente são 16 bits em outros
ambientes. Se você estiver aceitando um inteiro de 16 bits desse componente, declare-o como em vez de
em seu Short Integer código Visual Basic gerenciado.
BC40028: tipo de parâmetro " <parametername> "
não tem conformidade com CLS
27/09/2021 • 2 minutes to read
Um procedimento é marcado como, <CLSCompliant(True)> mas declara um parâmetro com um tipo marcado
como <CLSCompliant(False)> , não está marcado ou não está qualificado porque é um tipo não compatível.
Para que um procedimento seja compatível com a independência de idioma e com os componentes de
Language-Independent (CLS), ele deve usar somente tipos em conformidade com CLS. Isso se aplica aos tipos
de parâmetros, ao tipo de retorno e aos tipos de todas as suas variáveis locais.
os tipos de dados a seguir Visual Basic não são compatíveis com CLS:
Tipo de Dados SByte
Tipo de Dados UInteger
Tipo de Dados ULong
Tipo de Dados UShort
Quando você aplica o a CLSCompliantAttribute um elemento de programação, você define o parâmetro do
atributo isCompliant como True ou False para indicar conformidade ou não conformidade. Não há nenhum
padrão para esse parâmetro, e você deve fornecer um valor.
Se você não aplicar o CLSCompliantAttribute a um elemento, será considerado como não compatível.
Por padrão, esta mensagem é um aviso. Para obter informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configurando avisos no Visual Basic.
ID do erro: BC40028
Um elemento de programação é qualificado com uma cadeia de caracteres de qualificação que inclui um
parâmetro de tipo.
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 que são definidos no momento da compilação.
O código a seguir pode gerar esse erro:
ID do erro: BC32098
Confira também
Referências a elementos declarados
Tipos genéricos no Visual Basic
Lista de Tipos
BC31026: não é possível criar um assembly de nome
forte do arquivo de chave ' <filename> ': <error>
27/09/2021 • 2 minutes to read
Um assembly de nome forte não pôde ser criado a partir do arquivo de chave especificado.
ID do erro: BC31026
Confira também
[Link] (ferramenta de nome forte))
BC30143: Não é possível inserir o arquivo de
recurso <filename> ' ': <error message>
27/09/2021 • 2 minutes to read
O Visual Basic compilador chama o Assembly Linker ([Link], também conhecido como Alink) para gerar um
assembly com um manifesto. O vinculador relatou um erro ao incorporar a um arquivo de recurso COM+
nativo no assembly.
ID do erro: BC30143
Confira também
[Link]
Opções de comentários do Visual Studio
BC30145: não é possível emitir o assembly: <error
message>
27/09/2021 • 2 minutes to read
o compilador Visual Basic chama o vinculador de assembly ([Link], 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
tlbimp <path to COM reference file> /out:<output assembly name> /keyfile:<path to .snk file>
TIP
Use aspas duplas se um caminho ou arquivo contiver espaços.
6. em Visual Studio, adicione uma referência de Assembly .net ao arquivo que você acabou de criar.
Confira também
[Link]
[Link] (ferramenta de nome forte)
Como criar um par de chaves Public-Private
Opções de comentários do Visual Studio
BC30655: não é possível localizar o arquivo
necessário ' <filename> '
27/09/2021 • 2 minutes to read
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
27/09/2021 • 2 minutes to read
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>
27/09/2021 • 2 minutes to read
o compilador Visual Basic chama o vinculador de Assembly ([Link], também conhecido como Alink) para gerar
um Assembly com um manifesto. O vinculador relatou um erro ao vincular a um arquivo de recurso COM+
nativo do assembly.
ID do erro: BC30144
Confira também
[Link]
Opções de comentários do Visual Studio
BC30712: Não é possível carregar informações para
a classe ' <classname> '
27/09/2021 • 2 minutes to read
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 é possível gravar a saída na memória
28/09/2021 • 2 minutes to read
Confira também
Opções de comentários do Visual Studio
BC30698: Não é possível gravar um arquivo
temporário porque o caminho temporário não está
disponível
27/09/2021 • 2 minutes to read
Visual Basic não foi possível determinar o caminho em que 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>
27/09/2021 • 2 minutes to read
Confira também
Opções de comentários do Visual Studio
BC40032: o tipo subjacente de Enum não está em
<typename> conformidade com CLS
27/09/2021 • 2 minutes to read
O tipo de dados especificado para essa enumeração não faz parte da CLS (Independência Language-
Independent Idioma). Isso não é um erro em seu componente, porque o .NET Framework e Visual Basic 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 seu
componente.
Os seguintes Visual Basic tipos de dados não são compatíveis com CLS:
Tipo de Dados SByte
Tipo de Dados UInteger
Tipo de Dados ULong
Tipo de Dados UShort
Por padrão, esta mensagem é um aviso. Para obter mais informações sobre como ocultar avisos ou tratar avisos
como erros, consulte Configuring Warnings in Visual Basic.
ID do erro: BC40032
Confira também
Reflexão (Visual Basic)
Reflexão
BC42324: usar a variável de iteração em uma
expressão lambda pode ter resultados inesperados
27/09/2021 • 2 minutes to read
O uso da 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 a ela o valor da variável de iteração.
Esse aviso aparece quando você usa uma variável de iteração de loop em uma expressão lambda que é
declarada dentro do loop. Por exemplo, o exemplo a seguir faz com que o aviso apareça.
For i As Integer = 1 To 10
' The warning is given for the use of i.
Dim exampleFunc As Func(Of Integer) = Function() i
Next
Module Module1
Sub Main()
Dim array1 As Func(Of Integer)() = New Func(Of Integer)(4) {}
For i As Integer = 0 To 4
array1(i) = Function() i
Next
End Sub
End Module
O For loop cria uma matriz de expressões lambda, cada uma delas retorna o valor da variável de iteração de
loop i . Quando as expressões lambda são avaliadas no For Each loop, você pode esperar ver 0, 1, 2, 3 e 4
exibidos, os valores sucessivos de i no For loop. 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 Configurando avisos no Visual Basic.
ID do erro: BC42324
Module Module1
Sub Main()
Dim array1 As Func(Of Integer)() = New Func(Of Integer)(4) {}
For i As Integer = 0 To 4
Dim j = i
array1(i) = Function() j
Next
End Sub
End Module
Confira também
Expressões lambda
BC30955: o valor do tipo ' <typename1> ' não pode
ser convertido em ' <typename2> '
28/09/2021 • 2 minutes to read
O valor do tipo ' <typename1> ' não pode ser convertido em ' <typename2> '. A incompatibilidade de tipos
pode ser devido à mistura de uma referência de arquivo com uma referência de projeto para o assembly '
<assemblyname> '. Tente substituir a referência de arquivo para ' <filepath> ' no projeto ' <projectname1> '
por uma referência de projeto para ' <projectname2> '.
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.
' ================ Visual Basic project P1 ================
commonObject = [Link]()
End Function
End Class
Project P1 faz uma referência de projeto indireta por meio do projeto P2 ao projeto P3 e também uma
referência direta de arquivo ao P3 . A declaração de commonObject usa a referência de arquivo para P3 ,
enquanto a chamada para [Link] usa a referência de projeto para P3 .
O problema nessa situação é que a referência de arquivo especifica um caminho e nome de arquivo para o
arquivo de saída do P3 (normalmente [Link]), enquanto as referências do projeto identificam o projeto de
origem ( P3 ) por nome do projeto. Por isso, o compilador não pode garantir que o tipo [Link] venha
do mesmo código-fonte por meio de duas referências diferentes.
Essa situação normalmente ocorre quando referências de projeto e referências de arquivo são misturadas. Na
ilustração anterior, o problema não ocorreria se P1 uma referência de projeto direta fosse feita em P3 vez de
uma referência de arquivo.
ID do erro: BC30955
Para corrigir este erro
Altere a referência de arquivo para uma referência de projeto.
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 de arquivo)
27/09/2021 • 2 minutes to read
O valor do tipo ' <typename1> ' não pode ser convertido em ' <typename2> '. A incompatibilidade de tipos
pode ser devido à combinação de uma referência de arquivo para ' <filepath1> ' no projeto ' <projectname1> '
com uma referência de arquivo para ' <filepath2> ' no projeto ' <projectname2> '. Se ambos os assemblies
forem idênticos, tente substituir essas referências para que ambas as referências sejam do mesmo local.
Em uma situação em que um projeto faz mais de uma referência de arquivo para um assembly, o compilador
não pode garantir que um tipo possa ser convertido em outro.
Cada referência de arquivo especifica um caminho de arquivo e um nome para o arquivo de saída de um
projeto (normalmente um arquivo DLL). O compilador não pode garantir que os arquivos de saída venham da
mesma fonte, ou que eles representam a mesma versão do mesmo assembly. Portanto, ele não pode garantir
que os tipos nas diferentes referências sejam do mesmo tipo, ou até mesmo que um deles possa ser convertido
para o outro.
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
Confira também
Conversões de tipo no Visual Basic
Gerenciando referências em um projeto
BC31194: o valor do tipo ' type1 ' não pode ser
convertido em ' type2 '
27/09/2021 • 2 minutes to read
O valor do tipo ' type1 ' não pode ser convertido em ' type2 '. Você pode usar a propriedade ' value ' para obter
o valor da cadeia de caracteres do primeiro elemento de ' <parentElement> '.
Foi feita uma tentativa de converter implicitamente um literal XML para um tipo específico. O literal XML não
pode ser convertido implicitamente no tipo especificado.
ID do erro: BC31194
Confira também
Convert
Funções de conversão do tipo
Literais XML
XML
BC30616: Variável <variablename> ' ' oculta uma
variável em um bloco delimitado
27/09/2021 • 2 minutes to read
Uma variável delimitada em um bloco tem o mesmo nome que outra variável local.
ID do erro: BC30616
Dim a, b, x As Integer
If a = b Then
Dim y As Integer = 20 ' Uniquely named block variable.
End If
Uma causa comum para esse erro é o uso de Catch e As Exception dentro de um manipulador de
eventos. Se esse for o caso, nomee a Catch variável de bloco ex em vez de e .
Outra fonte comum desse erro é uma tentativa de acessar uma variável local declarada dentro de um
Try bloco em um bloco Catch separado. Para corrigir isso, declare a variável fora da
Try...Catch...Finally estrutura .
Confira também
Instrução Try...Catch...Finally
Declaração de Variável
BC42104: a variável ' <variablename> ' é usada
antes de receber um valor
27/09/2021 • 2 minutes to read
A variável ' <variablename> ' é usada antes de receber um valor. Uma exceção de referência nula pode resultar
em tempo de execução.
Um aplicativo tem pelo menos um caminho possível por meio de seu código que lê uma variável antes que
qualquer valor seja atribuído a ela.
Se uma variável nunca tiver sido atribuído um valor, ela manterá o valor padrão para seu tipo de dados. Para um
tipo de dados de referência, esse valor padrão é Nothing. A leitura de uma variável de referência que tem 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, consulte Configurando avisos no Visual Basic.
ID do erro: BC42104
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
27/09/2021 • 2 minutes to read
Você tentou usar uma variável definida em uma biblioteca de tipos ou biblioteca de objetos que tem um tipo de
dados sem suporte pelo Visual Basic.
Confira também
Data Types
BC31168: as propriedades do eixo XML não
suportam associação tardia
27/09/2021 • 2 minutes to read
Uma propriedade do 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 '
27/09/2021 • 2 minutes to read
A <exception> marca fornece uma maneira de documentar as exceções que podem ser geradas por um
método. O cref Atributo Required designa o nome de um membro, que é verificado pelo gerador de
documentação. Se o membro existir, ele será convertido para o nome do elemento canônico no arquivo de
documentação.
ID do erro: BC42319
<exception cref="member">description</exception>
Confira também
<exception>
Como criar documentação XML
Marcações de Comentário XML
BC31180: não há suporte para referências de
entidade XML
27/09/2021 • 2 minutes to read
Uma referência de entidade (por exemplo, ) que não está definida na especificação XML 1.0 é incluída como um
© valor para um literal XML. Somente as referências de entidade XML & , e têm suporte em " < > '
literais XML.
ID do erro: BC31180
Confira também
Especificação dos literais XML e do XML 1.0
Literais XML
XML
BC31200: não há suporte para literais XML e
propriedades XML no código inserido [Link]
27/09/2021 • 2 minutes to read
Não há suporte para literais XML e propriedades XML no código inserido [Link]. Para usar recursos XML,
mova o código para code-behind.
Uma propriedade de literal XML ou eixo XML é definida no código inserido ( <%= => ) em um arquivo [Link]
dados.
ID do erro: BC31200
Confira também
Literais XML
Propriedades do eixo XML
XML
BC31183: URI de namespace XML
[Link] ; pode ser
vinculado somente a 'xmlns'
28/09/2021 • 2 minutes to read
Confira também
Instrução Imports (namespace XML)
Literais XML
XML
Referência (Visual Basic)
27/09/2021 • 2 minutes to read
esta seção fornece links para informações de referência sobre vários aspectos da programação de Visual Basic.
Nesta seção
Visual Basic Referência de linguagem
fornece informações de referência para vários aspectos do idioma do Visual Basic.
Compilador de linha de comando do 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.
Informações de referência do .NET Framework
fornece links para informações sobre como trabalhar com a biblioteca de classes de .NET Framework.
Especificação da linguagem Visual Basic
fornece links para a especificação de idioma completo 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)
Contém tópicos para caixas de diálogo e janelas usadas em Visual Studio.
Ferramentas XML no Visual Studio
Fornece links para tópicos sobre várias ferramentas XML disponíveis no Visual Studio.
Visual Studio Extensibilidade
fornece links para tópicos que abrangem automação e extensibilidade no Visual Studio, para componentes
compartilhados e específicos do idioma.
compilador de linha de comando Visual Basic
27/09/2021 • 2 minutes to read
o compilador de linha de comando Visual Basic fornece uma alternativa à compilação de programas de dentro
do IDE (ambiente de desenvolvimento integrado) Visual Studio. esta seção contém descrições para as opções de
compilador Visual Basic.
Cada opção de compilador está disponível em duas formas: -option e /option . A documentação mostra
apenas o -option formulário.
Nesta seção
Compilando da Linha de Comando
descreve o Visual Basic compilador de linha de comando, que é fornecido como uma alternativa à compilação
de programas de dentro do IDE Visual Studio.
Opções do compilador do Visual Basic listadas em ordem alfabética
Lista as opções de compilador em uma tabela alfabética
Opções de compilador do Visual Basic listadas por categoria
Apresenta opções de compilador in grupos funcionais.
Compilando a partir da linha de comando (Visual
Basic)
27/09/2021 • 2 minutes to read
Um Visual Basic projeto é feito de um ou mais arquivos de origem separados. Durante o processo conhecido
como compilação, esses arquivos são unidos em um pacote – um único arquivo executável que pode ser
executado como um aplicativo.
Visual Basic fornece um compilador de linha de comando como uma alternativa à compilação de programas de
dentro do IDE (ambiente de desenvolvimento integrado) do Visual Studio. O compilador de linha de comando
foi projetado para situações em que você não exige o conjunto completo de recursos no IDE, por exemplo,
quando você está usando ou escrevendo para computadores com memória do sistema limitada ou espaço de
armazenamento.
Para compilar arquivos de origem de dentro Visual Studio IDE, escolha o comando Compilar no menu
Compilar.
TIP
Ao criar arquivos de projeto usando o Visual Studio IDE, 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, Criar e
Executar e, em seguida,de definir o MSBuild detalhes de saída do build do projeto como Normal ou um nível mais alto
de detalhes. Para obter mais informações, consulte Como exibir, salvar e configurar arquivos de log de build.
Você pode compilar arquivos de projeto (.vbproj) em um prompt de comando usando MSBuild. Para obter mais
informações, consulte Referência de linha de comando e Passo a passo: usando MSBuild.
Nesta seção
Como invocar o Command-Line compilador
Descreve como invocar o compilador de linha de comando no prompt do MS-DOS ou em um subdiretório
específico.
Linhas de comando de compilação de exemplo
Fornece uma lista de linhas de comando de exemplo que você pode modificar para seu próprio uso.
Seções relacionadas
Visual Basic Command-Line compilador
Fornece listas de opções do compilador, organizadas em ordem alfabética ou por finalidade.
Compilação condicional
Descreve como compilar seções específicas do código.
Criando e limpando projetos e soluções Visual Studio
Descreve como organizar o que será incluído em diferentes builds, escolher propriedades do projeto e garantir
que os projetos sejam construídos na ordem correta.
Como invocar o compilador de linha de comando
(Visual Basic)
27/09/2021 • 2 minutes to read
Você pode invocar o compilador de linha de comando digitando o nome do arquivo executável na linha de
comando, também conhecida como prompt do MS-DOS. Se você compilar do prompt de Windows padrão,
deverá digitar o caminho totalmente qualificado para o arquivo executável. Para substituir esse comportamento
padrão, você pode usar o Prompt de Comando do Desenvolvedor para Visual Studio ou modificar a variável de
ambiente PATH. Ambos permitem compilar de qualquer diretório simplesmente digitando o nome do
compilador.
NOTE
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.
Confira também
Compilador de linha de comando do Visual Basic
Compilação condicional
Linhas de comando de compilação de exemplo
(Visual Basic)
27/09/2021 • 2 minutes to read
como alternativa à compilação de Visual Basic programas de dentro Visual Studio, você pode compilar a partir
da linha de comando para produzir arquivos executáveis (.exe) ou arquivos de .dll (biblioteca de vínculo
dinâmico).
o compilador de linha de comando Visual Basic dá suporte a um conjunto completo de opções que controlam
arquivos de entrada e saída, assemblies e opções de depuração e pré-processador. Cada opção está disponível
em duas formas intercambiáveis: -option e /option . Esta documentação mostra apenas o -option
formulário.
A tabela a seguir lista algumas linhas de comando de exemplo que você pode modificar para seu próprio uso.
PA RA USE
compilar todos os arquivos de Visual Basic no diretório atual, vbc -define:DEBUG=1 -optimize -out:[Link] *.vb
com otimizações em e o DEBUG símbolo definido,
produzindo [Link]
compilar todos os arquivos de Visual Basic no diretório atual, vbc -target:library -out:[Link] -nowarn -nologo
produzindo uma versão de depuração de [Link] sem exibir -debug *.vb
o logotipo ou avisos
compilar todos os arquivos de Visual Basic no diretório atual vbc -target:library -out:[Link] *.vb
para [Link]
TIP
ao criar um projeto usando o Visual Studio IDE, você pode exibir informações sobre o comando vbc associado com 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, compile e executee, em seguida, defina o MSBuild detalhes da saída da compilação do projeto como
Normal ou um nível mais alto de detalhamento.
Confira também
Compilador de linha de comando do Visual Basic
Compilação condicional
Visual Basic do compilador listadas em ordem
alfabética
28/09/2021 • 4 minutes to read
O Visual Basic compilador de linha de comando é fornecido como uma alternativa à compilação de programas
Visual Studio IDE (ambiente de desenvolvimento integrado). Veja a seguir uma lista das opções Visual Basic do
compilador de linha de comando do Visual Basic ordenadas em ordem alfabética.
Cada opção de compilador está disponível em duas formas: -option e /option . A documentação mostra
apenas o -option formulário.
OPÇ ÃO F IN A L IDA DE
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)
27/09/2021 • 2 minutes to read
Sintaxe
@response_file
Argumentos
response_file
Obrigatórios. Um arquivo que lista as opções do compilador ou os arquivos de código-fonte a compilar.
Coloque o nome do arquivo entre aspas (" ") se ele contiver um espaço.
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 eles tivessem sido especificados na linha de comando.
Para especificar mais de um arquivo de resposta em uma compilação, especifique várias opções de arquivo de
resposta, como as seguintes.
@[Link] @[Link]
Em um arquivo de resposta, várias opções do compilador e arquivos de código-fonte podem aparecer em uma
linha. Uma única especificação de opção do compilador deve aparecer em uma linha (não pode abranger várias
linhas). Os arquivos de resposta podem ter comentários que começam com o # símbolo.
Você pode combinar opções especificadas na linha de comando com opções especificadas em um ou mais
arquivos de resposta. O compilador processa as opções de comando conforme as encontra. Portanto, os
argumentos de linha de comando podem substituir as opções listadas anteriormente nos arquivos de resposta.
Por outro lado, as opções em um arquivo de resposta substituem as opções listadas anteriormente na linha de
comando ou em outros arquivos de resposta.
Visual Basic fornece o arquivo [Link], que está localizado no mesmo diretório que o arquivo [Link]. O arquivo
[Link] é incluído por padrão, a menos que -noconfig a opção seja usada. Para obter mais informações,
consulte -noconfig.
NOTE
A opção não está disponível no ambiente de Visual Studio desenvolvimento; ela está disponível somente durante a
compilação da @ linha de comando.
Exemplo 1
As linhas a seguir são de um arquivo de resposta de exemplo.
# build the first output file
-target:exe
-out:[Link]
[Link]
[Link]
Exemplo 2
O exemplo a seguir demonstra como usar a @ opção com o arquivo de resposta chamado [Link] .
vbc @[Link]
Confira também
Compilador de linha de comando do Visual Basic
-noconfig
Linhas de Comando de Compilação de Exemplo
-addmodule
28/09/2021 • 2 minutes to read
Faz com que o compilador verifique todos os tipos de informações de arquivos especificados disponíveis para o
projeto que você está compilando.
Sintaxe
-addmodule:fileList
Argumentos
fileList
Obrigatórios. Lista delimitada por vírgulas de arquivos que contêm metadados, mas que não contêm manifestos
de assembly. Os nomes de arquivo que contêm espaços devem ser entre aspas (" ").
Comentários
Os arquivos listados pelo parâmetro devem ser criados com a opção ou com o equivalente de fileList
-target:module outro compilador para -target:module .
Todos os módulos adicionados com -addmodule devem estar no mesmo diretório que o arquivo de saída em
tempo de operação. Ou seja, você pode 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 executar. Se não estiver, você obterá um
TypeLoadException erro.
Se você especificar (implicitamente ou explicitamente) qualquer opção-target (Visual Basic) diferente de com , os
arquivos que você passar para se tornar parte do -target:module assembly do -addmodule -addmodule projeto.
Um assembly é necessário para executar um arquivo de saída que tem um ou mais arquivos adicionados com
-addmodule .
Use -reference (Visual Basic) para importar metadados de um arquivo que contém um assembly.
NOTE
A opção não está disponível no ambiente de Visual Studio desenvolvimento; ela está disponível somente durante a
compilação da -addmodule linha de comando.
Exemplo
O código a seguir cria um módulo.
' [Link]
' Compile with vbc /target:module [Link].
' Outputs [Link].
' [Link]
' Compile with vbc /addmodule:[Link] [Link].
Option Strict Off
Namespace NetmoduleTest
Module Module1
Sub Main()
Dim x As TestClass
x = New TestClass
x.i = 802
[Link](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
27/09/2021 • 2 minutes to read
Sintaxe
-baseaddress:address
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
O endereço base padrão para uma DLL é definido pelo .NET Framework.
Esteja ciente de que a palavra de ordem inferior nesse endereço é arredondada. Por exemplo, se você especificar
0x11110001, ele será arredondado para 0x11110000.
Para concluir o processo de assinatura de uma DLL, use a opção –R da ferramenta de Nomenização Forte
([Link]).
Essa opção será ignorada se o destino não for uma DLL.
Confira também
Compilador de linha de comando do Visual Basic
-target (Visual Basic)
Linhas de Comando de Compilação de Exemplo
[Link] (Ferramenta de Nome Forte))
-bugreport
27/09/2021 • 2 minutes to read
Sintaxe
-bugreport:file
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
As informações a seguir são adicionadas a file :
Uma cópia de todos os arquivos de código-fonte na compilação.
Uma lista das opções de compilador usadas na compilação.
Informações de versão sobre seu compilador, Common Language Runtime e sistema operacional.
Saída do compilador, se houver.
Uma descrição do problema, para o qual você será solicitado.
Uma descrição de como você acredita que o problema deve ser corrigido, para o qual você será
solicitado.
Como uma cópia de todos os arquivos de código-fonte está incluída no file , talvez você queira reproduzir o
defeito do código (suspeito) no programa mais curto possível.
IMPORTANT
A -bugreport opção produz um arquivo que contém informações potencialmente confidenciais. isso inclui a hora atual,
a versão do compilador, a versão .NET Framework, 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-se opções de linha de comando no arquivo de
[Link] para uma compilação no lado do servidor de um aplicativo [Link]. Para evitar isso, modifique o arquivo de
[Link] para impedir que os usuários sejam compilados no servidor.
Se essa opção for usada com -errorreport:prompt , -errorreport:queue ou -errorreport:send , e seu aplicativo
encontrar um erro de compilador interno, as informações em file serão enviadas para a Microsoft
Corporation. Essas informações ajudarão os engenheiros da Microsoft a identificar a causa do erro e poderão
ajudar a melhorar a próxima versão do Visual Basic. Por padrão, nenhuma informação é enviada à Microsoft. No
entanto, quando você compila um aplicativo usando o -errorreport:queue , que é habilitado por padrão, o
aplicativo coleta seus relatórios de erros. Em seguida, quando o administrador do computador fizer logon, o
sistema de relatórios de erros exibirá uma janela pop-up que permite ao administrador encaminhar à Microsoft
quaisquer relatórios de erros ocorridos desde o logon.
NOTE
a -bugreport opção não está disponível no ambiente de desenvolvimento de Visual Studio; ela está disponível somente
quando você compila a partir da linha de comando.
Exemplo
O exemplo a seguir compila T2. vb e coloca todas as informações de relatório de bugs no arquivo [Link].
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 ([Link] Configurações esquema)
-codepage (Visual Basic)
27/09/2021 • 2 minutes to read
Especifica a página de código a ser usada para todos os arquivos de código-fonte na compilação.
Sintaxe
-codepage:id
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
Para compilar o código-fonte salvo com uma codificação específica, você pode usar para especificar -codepage
qual página de código deve ser usada. A -codepage opção se aplica a todos os arquivos de código-fonte em sua
compilação. Para obter mais informações, consulte Codificação de caracteres no .NET Framework.
A opção não será necessária se os arquivos de código-fonte foram salvos usando a página de código -codepage
ANSI atual, Unicode ou UTF-8 com uma assinatura. Visual Studio salva todos os arquivos de código-fonte com a
página de código ANSI atual por padrão, a menos que o usuário especifique outra codificação na caixa de
diálogo Codificação. Visual Studio usa a caixa de diálogo Codificação para abrir arquivos de código-fonte
salvos com uma página de código diferente.
NOTE
A opção não está disponível no ambiente de Visual Studio desenvolvimento; ela está disponível somente durante a
compilação da -codepage linha de comando.
Confira também
Compilador de linha de comando do Visual Basic
-debug (Visual Basic)
27/09/2021 • 2 minutes to read
Faz com que o compilador gere informações de depuração e coloque-as nos arquivos de saída.
Syntax
-debug[+ | -]
ou
-debug:[full | pdbonly]
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
Use essa opção para criar builds de depuração. Se você não especificar , ou , não poderá depurar o -debug
arquivo de saída do -debug+ -debug:full programa.
Por padrão, as informações de depuração não são emitidas ( -debug- ). Para emitir informações de depuração,
-debug especifique 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.
Confira também
Compilador de linha de comando do Visual Basic
-bugreport
Linhas de Comando de Compilação de Exemplo
-definir (Visual Basic)
27/09/2021 • 2 minutes to read
Syntax
-define:["]symbol[=value][,symbol[=value]]["]
ou
-d:["]symbol[=value][,symbol[=value]]["]
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
A -define opção tem um efeito semelhante ao uso de uma #Const diretiva de pré-processador em seu
arquivo de origem, exceto que as constantes definidas com -define são públicas e se aplicam a todos os
arquivos no projeto.
Você pode usar símbolos criados por essa opção com a diretiva #If ... Then ... #Else para compilar os arquivos
de origem condicionalmente.
-d é a forma abreviada de -define .
Você pode definir vários símbolos com -define usando uma vírgula para separar as definições de símbolos.
Exemplo
O código a seguir define e usa duas constantes de compilador condicional.
' Vbc /define:DEBUGMODE=True,TRAPERRORS=False [Link]
Sub mysub()
#If debugmode Then
' Insert debug statements here.
MsgBox("debug mode")
#Else
' Insert default statements here.
#End If
End Sub
Confira também
Compilador de linha de comando do Visual Basic
#If... Diretivas then... #Else
#Const diretiva
Linhas de Comando de Compilação de Exemplo
-delaysign
27/09/2021 • 2 minutes to read
Sintaxe
-delaysign[+ | -]
Argumentos
+ | -
Opcional. Use -delaysign- se você quiser um assembly totalmente assinado. Use -delaysign+ se você quiser
colocar a chave pública no assembly e reservar espaço para o hash assinado. O padrão é -delaysign- .
Comentários
A -delaysign opção não tem nenhum efeito, a menos que seja usado com -keyfile ou -keycontainer.
Quando você solicita um assembly totalmente assinado, o compilador usa o hash no arquivo que contém o
manifesto (metadados de assembly) e sinaliza esse hash com a chave particular. A assinatura digital resultante é
armazenada no arquivo que contém o manifesto. Quando um assembly é assinado com atraso, o compilador
não computa e armazena a assinatura, mas reserva espaço no arquivo para que a assinatura possa ser
adicionada posteriormente.
Por exemplo, usando , um desenvolvedor em uma organização pode distribuir versões de teste sem assinatura
de um assembly que os testadores podem registrar com o -delaysign+ cache de assembly global e usar.
Quando o trabalho no assembly é concluído, a pessoa responsável pela chave privada da organização pode
assinar totalmente o assembly. Essa compartimentalização protege a chave privada da organização contra
divulgação, permitindo que todos os desenvolvedores trabalhem nos assemblies.
Consulte Criando e usando assemblies Strong-Named para obter mais informações sobre como assinar um
assembly.
Para definir -delaysign no ambiente Visual Studio de desenvolvimento integrado
1. Selecione um projeto no Gerenciador de Soluções . No menu Projeto , clique em Propriedades .
2. Clique na guia Assinatura .
3. De definir o valor na caixa Somente sinal de atraso.
Confira também
Compilador de linha de comando do Visual Basic
-keyfile
-keycontainer
Linhas de Comando de Compilação de Exemplo
-deterministic
27/09/2021 • 2 minutes to read
Faz com que o compilador produza um assembly cuja saída byte a byte é idêntica entre compilações para
entradas idênticas.
Sintaxe
-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.
O compilador considera as seguintes entradas com a finalidade de determinismo:
A sequência de parâmetros de linha de comando.
O conteúdo do arquivo de resposta .rsp do compilador.
A versão precisa do compilador usado e seus assemblies referenciados.
O caminho do diretório atual.
O conteúdo binário de todos os arquivos passados explicitamente para o compilador direta ou
indiretamente, incluindo:
Arquivos de origem
Assemblies referenciados
Módulos referenciados
Recursos
O arquivo de chave de nome forte
@ arquivos de resposta
Analisadores
Conjuntos de regras
Arquivos adicionais que podem ser usados por analisadores
A cultura atual (para o idioma no qual as mensagens de diagnóstico e exceção são produzidas).
A codificação padrão (ou a página de código atual) se a codificação não for especificada.
A existência, a inexistência e o conteúdo dos arquivos em caminhos de pesquisa do compilador
(especificados, por exemplo, por -lib ou -recurse ).
A plataforma CLR na qual o compilador é executado.
O valor de %LIBPATH% , que pode afetar o carregamento de dependência do analisador.
Quando as fontes estão disponíveis publicamente, a compilação determinística pode ser usada para estabelecer
se um binário é compilado de uma fonte confiável. Isso também pode ser útil em um sistema de compilação
contínua para determinar se as etapas de compilação dependentes de alterações para um binário precisam ser
executadas.
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-doc
28/09/2021 • 2 minutes to read
Syntax
-doc[+ | -]
ou
-doc:file
Argumentos
T ERM O DEF IN IÇ Ã O
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:
Tipos definidos pelo usuário, como uma classe ou interface
Membros, como um campo, evento, propriedade, função ou sub-rotina.
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 manifesto do assembly para o arquivo de saída
da compilação.
Veja Marcas de Comentário XML para descobrir as maneiras de gerar documentação de comentários em seu
código.
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
28/09/2021 • 2 minutes to read
especifica como o compilador de Visual Basic deve relatar erros internos do compilador.
Sintaxe
-errorreport:{ prompt | queue | send | none }
Comentários
essa opção fornece uma maneira conveniente de relatar um erro de compilador interno do Visual Basic (ICE)
para a equipe de Visual Basic da Microsoft. Por padrão, o compilador não envia informações à 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.
A capacidade do usuário de enviar relatórios depende das permissões de política de computador e de usuário.
A tabela a seguir resume o efeito da -errorreport opção.
OPÇ ÃO C O M P O RTA M EN TO
O compilador envia dados que incluem a pilha no momento do erro, que geralmente inclui um código-fonte. Se
-errorreport for usado com a opção -bugreport , o arquivo de origem inteiro será enviado.
Essa opção é melhor usada com a opção -bugreport , pois permite que os engenheiros da Microsoft
reproduzam o erro mais facilmente.
NOTE
a -errorreport opção não está disponível no ambiente de desenvolvimento de Visual Studio; ela está disponível
somente durante a compilação na linha de comando.
Exemplo
O código a seguir tenta compilar [Link] e, se o compilador encontrar um erro de compilador interno, ele
solicitará que você envie o relatório de erros à Microsoft.
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-bugreport
-filealign
28/09/2021 • 2 minutes to read
Sintaxe
-filealign:number
Argumentos
number
Obrigatórios. Um valor que especifica o alinhamento das seções no arquivo de saída. Os valores válidos são
512, 1024, 2048, 4096 e 8192. Esses valores estão em bytes.
Comentários
Você pode usar a -filealign opção 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 (Executável Portátil) que contém código ou dados. A opção
permite compilar seu aplicativo com um alinhamento não padrão; a maioria dos desenvolvedores não
-filealign precisa usar essa opção.
Cada seção é alinhada em um limite que é um múltiplo do -filealign valor. Não há nenhum padrão fixo. Se
-filealign não for especificado, o compilador escolherá um padrão no tempo de compilação.
Especificando o tamanho da seção, você pode alterar o tamanho do arquivo de saída. Modificar o tamanho da
seção pode ser útil para programas que serão executados em dispositivos menores.
NOTE
A opção não está disponível no ambiente de Visual Studio desenvolvimento; ela está disponível somente durante a
compilação da -filealign linha de comando.
Confira também
Compilador de linha de comando do Visual Basic
/help, /? (Visual Basic)
27/09/2021 • 2 minutes to read
Syntax
-help
ou
-?
Comentários
Se você incluir essa opção em uma compilação, nenhum arquivo de saída será criado e nenhuma compilação
ocorrerá.
NOTE
A opção não está disponível no ambiente de Visual Studio desenvolvimento; ela está disponível somente durante a
compilação da -help linha de comando.
Exemplo
O código a seguir exibe a ajuda da linha de comando.
vbc -help
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-highentropyva (Visual Basic)
27/09/2021 • 2 minutes to read
Indica se um executável de 64 bits ou um executável que é marcado pela opção de compilador -Platform:
anycpu dá suporte à alta possibilidade de seleção de layout de espaço de endereço de entropia (ASLR).
Sintaxe
-highentropyva[+ | -]
Argumentos
+ | -
Opcional. A opção está desativada por padrão ou, se você especificar -highentropyva- . A opção estará ativada
se você especificar -highentropyva ou -highentropyva+ .
Comentários
se você especificar essa opção, as versões compatíveis do kernel Windows poderão usar graus mais altos de
entropia quando o kernel distribui o layout de espaço de endereço de um processo como parte de ASLR. Se o
kernel usar graus maiores 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 está ativada, o executável de destino e todos os módulos dos quais depende devem ser
capazes de lidar com valores de ponteiro maiores que 4 gigabytes (GB) quando esses módulos estiverem sendo
executados como processos 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)
27/09/2021 • 2 minutes to read
Sintaxe
-imports:namespaceList
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
A opção importa qualquer namespace definido dentro do conjunto atual de arquivos de -imports origem ou de
qualquer assembly referenciado.
Os membros em um namespace especificado com estão disponíveis para todos os arquivos -imports de
código-fonte na compilação. Use a instrução Imports (Namespace e Tipo do .NET) para usar um namespace em
um único arquivo de código-fonte.
Exemplo
O código a seguir compila -imports:[Link] quando é especificado. Sem ele, a compilação bem-
sucedida exige que uma instrução seja incluída no início do arquivo de código-fonte ou que a propriedade
Imports [Link] seja totalmente qualificada como
[Link] .
Module Example
Public Sub Main()
[Link]($"The current culture is {[Link]}")
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
27/09/2021 • 2 minutes to read
Especifica um nome de contêiner de chave para um par de chaves para dar um nome forte a um assembly.
Sintaxe
-keycontainer:container
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
O compilador cria o 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 -i opção instala o par de chaves em um contêiner. Para obter mais informações, [Link]
(Ferramenta de Nome Forte)).
Se você compilar com , o nome do arquivo de chave será mantido no módulo e incorporado no assembly criado
quando você compilar um assembly com -target:module -addmodule.
Também é possível especificar essa opção como um atributo personalizado (AssemblyKeyNameAttribute) no
código-fonte de qualquer módulo MSIL (Microsoft Intermediate Language).
Também é possível passar suas informações de criptografia para o compilador com -keyfile. Use -delaysign se
quiser um assembly parcialmente assinado.
Consulte Criando e usando assemblies Strong-Named para obter mais informações sobre como assinar um
assembly.
NOTE
A opção não está disponível no ambiente de Visual Studio desenvolvimento; ela está disponível somente durante a
compilação da -keycontainer linha de comando.
Exemplo
O código a seguir compila o arquivo de [Link] origem e especifica um contêiner de chave.
Especifica um arquivo que contém uma chave ou um par de chaves para dar um nome forte a um assembly.
Sintaxe
-keyfile:file
Argumentos
file
Obrigatórios. Arquivo que contém a chave. Se o nome do arquivo contiver um espaço, coloque o nome entre
aspas (" ").
Comentários
O compilador insere a chave pública no manifesto do assembly e 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,
[Link] (Ferramenta de Nome Forte)).
Se você compilar com , o nome do arquivo de chave será mantido no módulo e incorporado no assembly criado
quando você compilar um assembly com -target:module -addmodule.
Também é possível passar suas informações de criptografia para o compilador com -keycontainer. Use -
delaysign se quiser um assembly parcialmente assinado.
Você também pode especificar essa opção como um atributo personalizado ( AssemblyKeyFileAttribute ) no
código-fonte para qualquer módulo de linguagem intermediária da Microsoft.
Caso e -keyfile -keycontainer sejam especificados (por opção de linha de comando ou por atributo
personalizado) na mesma compilação, o compilador primeiro tentará o contêiner de chave. Se isso ocorrer, o
assembly será assinado com as informações no contêiner de chaves. Se o compilador não encontrar o contêiner
de chave, ele tentará o arquivo especificado com -keyfile . Se isso for bem-sucedido, o assembly será assinado
com as informações no arquivo de chave e as informações de chave serão instaladas no contêiner de chave
(semelhante a ) para que, na próxima compilação, o contêiner de chave seja sn -i válido.
Observe que um arquivo de chave pode conter somente a chave pública.
Consulte Criando e usando assemblies Strong-Named para obter mais informações sobre como assinar um
assembly.
NOTE
A opção não está disponível no ambiente de Visual Studio desenvolvimento; ela está disponível somente durante a
compilação da -keyfile linha de comando.
Exemplo
O código a seguir compila o arquivo de [Link] origem e especifica um arquivo de chave.
vbc -keyfile:[Link] [Link]
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)
28/09/2021 • 2 minutes to read
Faz com que o compilador aceite apenas a sintaxe incluída na versão de linguagem Visual Basic especificada.
Sintaxe
-langversion:version
Argumentos
version
Obrigatórios. A versão do idioma a ser usada durante a compilação. Os valores aceitos 9 são , , , , , , , , 10 e 11
12 14 15 15.3 15.5 16 default latest .
Qualquer um dos números inteiros também pode ser especificado usando .0 como a versão secundária, por
exemplo, 11.0 .
Você pode ver a lista de todos os valores possíveis especificando -langversion:? na linha de comando.
Comentários
A -langversion opção especifica qual sintaxe o compilador aceita. Por exemplo, se você especificar que a versão
do idioma é 9.0, o compilador gerará erros para sintaxe válida somente na versão 10.0 e posterior.
Você pode usar essa opção ao desenvolver aplicativos destinados a diferentes versões do .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 da versão 10.0 da linguagem.
Você pode definir -langversion diretamente somente 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 [Link] compila para Visual Basic 9.0.
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-libpath
28/09/2021 • 2 minutes to read
Sintaxe
-libpath:dirList
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
A -libpath opção especifica o local dos assemblies referenciados pela opção -reference.
O compilador pesquisa referências de assembly que não são totalmente qualificadas na seguinte ordem:
1. Diretório de trabalho atual. Esse é o diretório do qual o compilador é invocado.
2. O diretório de sistema do Common Language Runtime.
3. Diretórios especificados por -libpath .
4. Diretórios especificados pela variável de ambiente LIB.
A -libpath opção é aditiva; especificá-la mais de uma vez é anexada a quaisquer valores anteriores.
Use -reference para especificar uma referência de assembly.
Exemplo
O código a seguir é [Link] compilado para criar um .exe arquivo. O compilador procura no 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.
vbc -libpath:c:\;"c:\New Assemblies" -reference:[Link] [Link]
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)
27/09/2021 • 4 minutes to read
Faz com que o compilador disponibilize as informações de tipo COM nos assemblies especificados para o
projeto sendo compilado no momento.
Syntax
-link:fileList
ou
-l:fileList
Argumentos
T ERM O DEF IN IÇ Ã 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.
A opção -link incorpora apenas interfaces, estruturas e delegados. Não há suporte para a inserção de classes
COM.
NOTE
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 -linkem 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 .
Se você vincular a um assembly COM (Assembly A) que em si faz referência a outro assembly COM (Assembly
B), também precisará vincular ao Assembly B se uma das seguintes opções for verdadeira:
Um tipo do Assembly A herda de um tipo ou implementa uma interface do Assembly B.
Um campo, propriedade, evento ou método que tem um tipo de retorno ou de parâmetro do Assembly B
é invocado.
Use -libpath para especificar o diretório no qual uma ou mais de suas referências de assembly estão localizadas.
Assim como a opção do compilador -reference, a opção do compilador usa o arquivo de resposta [Link], que
faz referência a assemblies .NET Framework usados com -link frequência. Use a opção do compilador -
noconfig se não quiser que o compilador use o arquivo [Link].
A forma abreviada de -link é -l .
' The following code causes an error if ISampleInterface is an embedded interop type.
Dim sample As ISampleInterface(Of SampleType)
Imports [Link]
Imports [Link]
Class Utility
' The following code causes an error when called by a client assembly.
Public Function GetRange1() As List(Of Range)
End Function
' The following code is valid for calls from a client assembly.
Public Function GetRange2() As IList(Of Range)
End Function
End Class
No exemplo a seguir, o código do cliente pode chamar o método que retorna a interface genérica IList sem
erros.
Module Client
Public Sub Main()
Dim util As New Utility()
Exemplo
A linha de comando a seguir compila o arquivo de [Link] origem e os assemblies de referência
[Link] de e para produzir [Link] [Link] .
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)
28/09/2021 • 2 minutes to read
Syntax
-linkresource:filename[,identifier[,public|private]]
ou
-linkres:filename[,identifier[,public|private]]
Argumentos
filename
Obrigatórios. O arquivo de recurso a ser vinculado ao assembly. Se o nome do arquivo contiver um espaço,
coloque o nome entre aspas ("").
identifier
Opcional. O nome lógico do recurso. O nome 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:[Link],[Link],public . Por padrão, filename é público no assembly.
Comentários
A -linkresource opção não incorpora o arquivo de recurso no arquivo de saída; use a -resource opção para
fazer isso.
A -linkresource opção requer uma das -target opções diferentes de -target:module .
se filename for um arquivo de recurso .NET Framework criado, por exemplo, pelo [Link] (gerador de
arquivo de recurso) ou no ambiente de desenvolvimento, ele poderá ser acessado com membros no
[Link] namespace. (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 Assembly
classe.
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.
A forma abreviada de -linkresource é -linkres .
NOTE
a -linkresource opção não está disponível no ambiente de desenvolvimento Visual Studio; ela está disponível somente
quando você compila a partir da linha de comando.
Exemplo
O código a seguir compila [Link] e vincula ao arquivo de recurso [Link] .
Confira também
Compilador de linha de comando do Visual Basic
-Target (Visual Basic)
-recurso (Visual Basic)
Linhas de Comando de Compilação de Exemplo
-main
27/09/2021 • 2 minutes to read
Sintaxe
-main:location
Argumentos
location
Obrigatórios. O nome da classe ou do módulo que contém o Sub Main procedimento a ser chamado quando o
programa for iniciado. Isso pode estar no formato -principal: módulo ou -principal: namespace. Module .
Comentários
Use essa opção quando você criar um arquivo executável ou Windows programa executável. Se a opção -Main
for omitida, o compilador pesquisará um compartilhamento válido Sub Main em todos os módulos e classes
públicas.
consulte o procedimento principal no Visual Basic para obter uma discussão sobre as várias formas do Main
procedimento.
Quando location é uma classe que herda de Form , o compilador fornece um Main procedimento padrão que
inicia o aplicativo se a classe não tiver nenhum Main procedimento. Isso permite que você compile o código na
linha de comando que foi criada no ambiente de desenvolvimento.
Exemplo
O código a seguir compila [Link] e [Link] , especificando que o Sub Main procedimento será encontrado na
Test2 classe.
Sintaxe
-moduleassemblyname:assembly_name
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
O compilador processa -moduleassemblyname a opção somente se a opção tiver sido -target:module
especificada. Isso faz com que o compilador crie um módulo. O módulo criado pelo compilador é válido
somente para o assembly especificado com a -moduleassemblyname opção . Se você colocar o módulo em um
assembly diferente, ocorrerão erros em tempo de executar.
A -moduleassemblyname opção só é necessária quando o seguinte é verdadeiro:
Um tipo de dados no módulo precisa de acesso a Friend um tipo em um assembly referenciado.
O assembly referenciado concedeu acesso de assembly amigo ao assembly no qual o módulo será
criado.
Para obter mais informações sobre como criar um módulo, consulte -target (Visual Basic). Para obter mais
informações sobre assemblies de amigos, consulte Assemblies de amigos.
NOTE
A opção não está disponível no ambiente de Visual Studio desenvolvimento; ela só está disponível quando você compila
em -moduleassemblyname um prompt de comando.
Confira também
Como criar 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
Friend Assemblies
-netcf
27/09/2021 • 2 minutes to read
Sintaxe
-netcf
Comentários
A opção faz com que o Visual Basic compilador seja destinado ao .NET Compact Framework -netcf em vez do
.NET Framework. A funcionalidade de linguagem que está presente apenas na lista .NET Framework está
desabilitada.
A -netcf opção foi projetada para ser usada com -sdkpath. Os recursos de linguagem -netcf desabilitados
pelo são os mesmos recursos de linguagem não presentes nos arquivos direcionados com -sdkpath .
NOTE
A opção não está disponível no ambiente de Visual Studio desenvolvimento; ela está disponível somente durante a
compilação da -netcf linha de comando. A -netcf opção é definida quando um projeto Visual Basic dispositivo é
carregado.
Module Module1
Sub Main()
End ' not valid to terminate execution with /netcf
End Sub
End Module
A associação tardia, em todos os formulários, está desabilitada. Erros de tempo de compilação são
gerados quando cenários de associação tardia reconhecidos são encontrados. O programa a seguir
compila e é executado -netcf sem , mas falha no tempo de compilação com -netcf .
Class LateBoundClass
Sub S1()
End Sub
Module Module1
Sub Main()
Dim o1 As Object
Dim o2 As Object
Dim o3 As Object
Dim IntArr(3) As Integer
o1 = New LateBoundClass
o2 = 1
o3 = IntArr
Os modificadores Auto, Ansie Unicode estão desabilitados. A sintaxe da instrução Declare também é
modificada para Declare Sub|Function name Lib "library" [Alias "alias"] [([arglist])] . O código a
seguir mostra o efeito de -netcf em uma compilação.
Usar Visual Basic palavras-chave 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 é compilado com o .NET Compact Framework, usando as versões do [Link] e
[Link] encontradas no diretório de instalação padrão do .NET Compact Framework na
[Link] unidade C. Normalmente, você usaria a versão mais recente do .NET Compact Framework.
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-sdkpath
-noconfig
27/09/2021 • 2 minutes to read
especifica que o compilador não deve referenciar automaticamente os assemblies de .NET Framework usados
com frequência ou importar os System [Link] namespaces e.
Sintaxe
-noconfig
Comentários
A -noconfig opção instrui o compilador a não compilar com o arquivo Vbc. rsp, que está localizado no mesmo
diretório que o arquivo de [Link]. o arquivo Vbc. rsp faz referência aos assemblies de .NET Framework usados
com frequência e importa os System [Link] namespaces e. O compilador referencia
implicitamente o assembly [Link], a menos que a -nostdlib opção seja especificada. A -nostdlib opção
informa o compilador para não compilar com Vbc. rsp ou referenciar automaticamente o assembly [Link].
NOTE
Os assemblies [Link] e [Link] são sempre referenciados.
Você pode modificar o arquivo Vbc. rsp para especificar opções adicionais do compilador que devem ser
incluídas em cada compilação de [Link] (exceto ao especificar a -noconfig opção). Para obter mais
informações, confira @ (Especificar de arquivo de resposta).
O compilador processa as opções passadas para o vbc comando por último. Portanto, qualquer opção na linha
de comando substitui a configuração da mesma opção no arquivo Vbc. rsp.
NOTE
a -noconfig opção não está disponível no ambiente de desenvolvimento de Visual Studio; ela está disponível somente
durante a compilação na linha de comando.
Confira também
-nostdlib (Visual Basic)
Compilador de linha de comando do Visual Basic
@ (especificar arquivo de resposta)
-referência (Visual Basic)
-nologo (Visual Basic)
28/09/2021 • 2 minutes to read
Sintaxe
-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.
NOTE
a -nologo opção não está disponível no ambiente de desenvolvimento de Visual Studio; ela está disponível somente
durante a compilação na linha de comando.
Exemplo
O código a seguir compila [Link] e não exibe uma faixa de direitos autorais.
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-nostdlib (Visual Basic)
28/09/2021 • 2 minutes to read
Sintaxe
-nostdlib
Comentários
A -nostdlib opção remove a referência automática para o assembly [Link] e impede que o compilador
Leia o arquivo Vbc. rsp. o arquivo Vbc. rsp, localizado no mesmo diretório que o arquivo de [Link], faz
referência aos assemblies de .NET Framework usados com frequência e importa System os
[Link] namespaces e.
NOTE
Os assemblies [Link] e [Link] são sempre referenciados.
NOTE
a -nostdlib opção não está disponível no ambiente de desenvolvimento de Visual Studio; ela está disponível somente
durante a compilação na linha de comando.
Exemplo
O código a seguir é compilado [Link] sem referenciar as bibliotecas padrão. Você deve definir a _MYTYPE
constante de compilação condicional para a cadeia de caracteres "Empty" para remover o My objeto.
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
27/09/2021 • 2 minutes to read
Sintaxe
-nowarn[:numberList]
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
A -nowarn opção faz com que o compilador não gere avisos. Para suprimir um aviso individual, forneça a ID de
aviso à -nowarn opção após os dois-pontos. Separe vários números de aviso com vírgulas.
Você precisa especificar apenas a parte numérica do identificador de aviso. Por exemplo, se você quiser suprimir
BC42024, o aviso para variáveis locais não utilizadas, especifique -nowarn:42024 .
Para obter mais informações sobre os números de identificação de aviso, consulte Configurando avisos no
Visual Basic.
Exemplo 1
O código a seguir compila [Link] e não exibe nenhum aviso.
Exemplo 2
O código a seguir compila [Link] e não exibe os avisos para variáveis locais não utilizadas (42024).
Sintaxe
-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
27/09/2021 • 2 minutes to read
Sintaxe
-optimize[ + | - ]
Argumentos
T ERM O DEF IN IÇ Ã 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, o -optimize+ pode dificultar a
depuração.
Todos os módulos gerados com -target:module para um assembly devem usar as mesmas -optimize
configurações que o assembly. Para obter mais informações, consulte -Target (Visual Basic).
Você pode combinar as -optimize -debug Opções e.
Exemplo
O código a seguir compila [Link] e habilita as otimizações do compilador.
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
27/09/2021 • 2 minutes to read
Sintaxe
-optioncompare:{binary | text}
Comentários
Você pode especificar em uma das duas formas: usar comparações de cadeia de caracteres binárias e usar
comparações de cadeia -optioncompare -optioncompare:binary de -optioncompare:text caracteres de texto. Por
padrão, o compilador usa -optioncompare:binary .
No Microsoft Windows, a página de código atual determina a ordem de classificação binária. Uma ordem de
classificação binária típica é a seguinte:
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
As comparações de cadeia de caracteres baseadas em texto são baseadas em uma ordem de classificação de
texto que não faz sentido de maiúsculas e minúsculas determinada pela localidade do sistema. Uma ordem de
classificação de texto típica é a seguinte:
(A = a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø)
Exemplo
O código a seguir compila [Link] e usa comparações de cadeia de caracteres binárias.
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
27/09/2021 • 2 minutes to read
Faz com que o compilador reporte erros se as variáveis não são declaradas antes de ser usadas.
Sintaxe
-optionexplicit[+ | -]
Argumentos
+ | -
Opcional. -optionexplicit+ Especifique para exigir a declaração explícita de variáveis. A -optionexplicit+ opção
é o padrão e é a mesma que -optionexplicit . A -optionexplicit- opção habilita a declaração implícita de
variáveis.
Comentários
Se o arquivo de código-fonte contiver uma instrução Option Explicit, a instrução substituirá a -optionexplicit
configuração do compilador de linha de comando.
Para definir -optionexplicit no Visual Studio IDE
1. Selecione um projeto no Gerenciador de Soluções . No menu Projeto , clique em Propriedades .
2. Clique na guia Compilar .
3. Modifique o valor na caixa Opção Explícita.
Exemplo
O código a seguir compila quando -optionexplicit- é usado.
Module Module1
Sub Main()
i = 99
[Link](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
28/09/2021 • 2 minutes to read
Sintaxe
-optioninfer[+ | -]
Argumentos
T ERM O DEF IN IÇ Ã O
NOTE
Você pode usar a opção -noconfig para manter os padrões internos do compilador em vez dos especificados no
[Link]. O padrão do compilador para essa opção é -optioninfer- .
Comentários
Se o arquivo de código-fonte contiver uma instrução Option Infer, a instrução substituirá a configuração do
-optioninfer compilador de linha de comando.
Exemplo
O seguinte código compila [Link] com a inferência de tipo local habilitada.
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
27/09/2021 • 2 minutes to read
Sintaxe
-optionstrict[+ | -]
-optionstrict[:custom]
Argumentos
+ | -
Opcional. A -optionstrict+opção restringe a conversão implícita de tipo. O padrão para essa opção é
-optionstrict- . A -optionstrict+ opção é a mesma que -optionstrict . Você pode usar ambos para
semântica de tipo permissiva.
custom
Obrigatórios. Avisar quando a semântica de idioma estrita não for respeitada.
Comentários
Quando -optionstrict+ está em vigor, somente as conversões de tipo de ampliação podem ser feitas
implicitamente. Conversões de tipo de restrição implícitas, como a atribuição de um objeto de tipo a um objeto
de tipo Decimal inteiro, são relatadas como erros.
Para gerar avisos para conversões de tipo de restrição implícitas, use -optionstrict:custom . Use
-nowarn:numberlist para ignorar avisos específicos -warnaserror:numberlist e tratar avisos específicos como
erros.
Para definir -optionstrict no Visual Studio IDE
1. Selecione um projeto no Gerenciador de Soluções . No menu Project, clique em Propriedades.
2. Clique na guia Compilar .
3. Modifique o valor na caixa Opção Estrita.
Para definir -optionstrict programaticamente
Consulte instrução Option Strict.
Exemplo
O código a seguir é compilado [Link] usando semântica de tipo estrito.
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)
27/09/2021 • 2 minutes to read
Sintaxe
-out:filename
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
Especifique o nome completo e a extensão do arquivo a ser criado. Se você não fizer isso, o arquivo de .exe
usará o nome do arquivo de código-fonte que contém o Sub Main procedimento e o arquivo de .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 -target opção do
compilador.
Exemplo
O código a seguir compila [Link] e cria o arquivo de saída [Link] .
Confira também
Compilador de linha de comando do Visual Basic
-Target (Visual Basic)
Linhas de Comando de Compilação de Exemplo
-plataforma (Visual Basic)
27/09/2021 • 3 minutes to read
Especifica qual versão de plataforma do common language runtime (CLR) pode executar o arquivo de saída.
Sintaxe
-platform:{ x86 | x64 | Itanium | arm | anycpu | anycpu32bitpreferred }
Argumentos
T ERM O DEF IN IÇ Ã O
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:
Estruturas que contêm membros que alteram o tamanho de acordo com a plataforma, como qualquer
tipo de ponteiro.
Aritmética de ponteiro que inclui tamanhos constantes.
As declarações COM ou de invocação de plataforma incorreta que usam Integer para identificadores
em vez de IntPtr.
Convertendo IntPtr para Integer .
Usando a invocação de plataforma ou a interoperabilidade COM com os componentes que não existem
em todas as plataformas.
A opção -Platform atenuará alguns problemas se você souber que fez suposições sobre a arquitetura em que
seu código será executado. Especificamente:
Se decidir atingir uma plataforma de 64 bits e o aplicativo for executado em uma máquina de 32 bits, a
mensagem de erro vem muito mais cedo e mais direcionada ao problema do que o erro que ocorre sem
usar essa comutador.
Se você definir o sinalizador x86 na opção e, em seguida, o aplicativo for executado em uma máquina de
64 bits, o aplicativo será executado no subsistema WOW em vez de ser executado nativamente.
Em um sistema operacional do Windows de 64 bits:
Assemblies compilados com -platform:x86 serão executados no CLR de 32 bits em execução no
WOW64.
Executáveis compilados com o -platform:anycpu serão executados no CLR de 64 bits.
Uma DLL compilada com o -platform:anycpu será executada no mesmo CLR que o processo no qual foi
carregado.
Executáveis compilados com -platform:anycpu32bitpreferred serão executados no CLR de 32 bits.
para obter mais informações sobre como desenvolver um aplicativo para ser executado em uma versão de 64
bits do Windows, consulte aplicativos de 64 bits.
para definir a plataforma no IDE Visual Studio
1. em Gerenciador de Soluções , escolha o projeto, abra o menu Project e clique em propriedades .
2. Na guia Compilar , marque ou desmarque a caixa de seleção preferir 32 bits ou, na lista CPU de
destino , escolha um valor.
para obter mais informações, consulte compilar página, Designer de Project (Visual Basic).
Exemplo
O exemplo a seguir mostra como usar a opção do compilador -platform .
Confira também
-Target (Visual Basic)
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-quiet
27/09/2021 • 2 minutes to read
Impede que o compilador exiba código para erros e avisos relacionados à sintaxe.
Sintaxe
-quiet
Comentários
Por padrão, -quiet não está em vigor. Quando o compilador relata um erro ou aviso relacionado à sintaxe, ele
também gera a linha do código-fonte. Para aplicativos que analisam a saída do compilador, pode ser mais
conveniente para o compilador gerar somente o texto do diagnóstico.
No exemplo a seguir, Module1 gera um erro que inclui o código-fonte quando compilado sem -quiet .
Module Module1
Sub Main()
x()
End Sub
End Module
Saída:
C:\projects\[Link](3) : error BC30451: 'x' is not declared. It may be inaccessible due to its protection
level.
x()
~
NOTE
a -quiet opção não está disponível no ambiente de desenvolvimento de Visual Studio; ela está disponível somente
durante a compilação na linha de comando.
Exemplo
O código a seguir compila [Link] e não exibe código para diagnósticos de compilador relacionados à sintaxe:
Sintaxe
-recurse:[dir\]file
Argumentos
dir
Opcional. O diretório no qual você deseja que a pesquisa comece. Se não for especificado, a pesquisa começará
no diretório do projeto.
file
Obrigatórios. Os arquivos a serem pesquisados. São permitidos caracteres curinga.
Comentários
Você pode usar caracteres curinga em um nome de arquivo para compilar todos os arquivos correspondentes
no diretório do projeto sem usar o -recurse . Se nenhum nome de arquivo de saída for especificado, o
compilador baseará o nome do arquivo de saída no primeiro arquivo de entrada processado. Esse é geralmente
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 -out opção.
NOTE
a -recurse opção não está disponível no ambiente de desenvolvimento de Visual Studio; ela está disponível somente
durante a compilação na linha de comando.
Exemplo
o comando a seguir compila todos os arquivos de Visual Basic no diretório atual.
vbc *.vb
o comando a seguir compila todos os arquivos de Visual Basic no Test\ABC diretório e em todos os diretórios
abaixo dele e, em seguida, gera [Link] .
Confira também
Compilador de linha de comando do Visual Basic
-out (Visual Basic)
Linhas de Comando de Compilação de Exemplo
-referência (Visual Basic)
27/09/2021 • 2 minutes to read
Faz com que o compilador transforme informações de tipo nos assemblies especificados disponíveis para o
projeto que você está compilando no momento.
Syntax
-reference:fileList
ou
-r:fileList
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
Os arquivos que você importar devem conter metadados de assembly. Somente tipos públicos são visíveis fora
do assembly. A opção -addmodule importa os metadados de um módulo.
Se você referenciar um assembly (assembly A) que, por sua vez, faz referência a outro assembly (assembly B),
você precisará referenciar o assembly B se:
Um tipo do Assembly A herda de um tipo ou implementa uma interface do Assembly B.
Um campo, propriedade, evento ou método que tem um tipo de retorno ou de parâmetro do Assembly B
é invocado.
Use -LIBPATH para especificar o diretório no qual uma ou mais das suas referências de assembly estão
localizadas.
Para que o compilador reconheça 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 será conhecido pelo compilador.
o arquivo de resposta Vbc. rsp, que faz referência a assemblies de .NET Framework comumente usados, é usado
por padrão. Use -noconfig se você não quiser que o compilador use Vbc. rsp.
A forma abreviada de -reference é -r .
Exemplo
O comando a seguir compila o arquivo [Link] de origem e os assemblies de referência de [Link] e
[Link] para produzir [Link] .
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)
27/09/2021 • 2 minutes to read
A opção -refonly indica que a saída primária da compilação deve ser um assembly de referência em vez de um
assembly de 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.
Cada opção de compilador está disponível em duas formas: -option e /option . A documentação mostra
apenas o -option formulário.
Sintaxe
-refonly
Comentários
Visual Basic dá suporte à -refonly opção a partir da versão 15,3.
Os assemblies de referência são um tipo especial de assembly que contém apenas a quantidade mínima de
metadados necessários para representar a superfície da API pública da biblioteca. Eles incluem declarações para
todos os membros que são significativos ao referenciar um assembly em ferramentas de compilação, mas
excluem todas as implementações de membro e declarações de membros privados que não têm impacto
observável em seu contrato de API. Para obter mais informações, consulte Reference Assemblies in .net Guide.
As -refonly -refout Opções e são mutuamente exclusivas.
Confira também
-refout
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-refout (Visual Basic)
27/09/2021 • 2 minutes to read
A opção -refout especifica um caminho de arquivo em que o assembly de referência deve ser gerado.
Cada opção de compilador está disponível em duas formas: -option e /option . A documentação mostra
apenas o -option formulário.
Sintaxe
-refout:filepath
Argumentos
filepath
O caminho e o nome do arquivo do assembly de referência. Ele geralmente deve estar em uma sub pasta do
assembly primário. A convenção recomendada (usada pelo MSBuild) é colocar o assembly de referência em
uma subpasta "ref/" em relação ao assembly principal. Todas as pastas no filepath devem existir; o compilador
não as cria.
Comentários
Visual Basic dá suporte à -refout opção começando com a versão 15.3.
Assemblies de referência são um tipo especial de assembly que contém apenas a quantidade mínima de
metadados necessários para representar a superfície de API pública da biblioteca. Eles incluem declarações para
todos os membros que são significativos ao referenciar um assembly em ferramentas de build, mas excluem
todas as implementações de membros e declarações de membros privados que não têm nenhum impacto
observável em seu contrato de API. Para obter mais informações, consulte Assemblies de referência no Guia do
.NET.
As -refout opções e são -refonly mutuamente exclusivas.
Confira também
-refonly
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-removeintchecks
27/09/2021 • 2 minutes to read
Sintaxe
-removeintchecks[+ | -]
Argumentos
T ERM O DEF IN IÇ Ã O
Exemplo
O código a seguir compila [Link] e desativa a verificação de erro de estouro de inteiros.
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-resource (Visual Basic)
27/09/2021 • 2 minutes to read
Syntax
-resource:filename[,identifier[,public|private]]
ou
-res:filename[,identifier[,public|private]]
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
Use -linkresource para vincular um recurso a um assembly sem colocar o arquivo de recurso no arquivo de
saída.
Se for um arquivo de recurso .NET Framework criado, por exemplo, [Link] (Gerador de Arquivos de
Recurso) ou no ambiente de desenvolvimento, ele poderá ser acessado com membros no namespace (consulte
para obter filename [Link] mais ResourceManager informações). Para acessar todos os outros
recursos em tempo de operação, use um dos seguintes métodos: GetManifestResourceInfo
GetManifestResourceNames , ou GetManifestResourceStream .
A forma abreviada de -resource é -res .
Para obter informações sobre como definir -resource no IDE Visual Studio, consulte Gerenciando recursos de
aplicativo (.NET).
Exemplo
O código a seguir compila [Link] e anexa o arquivo de recurso [Link] .
vbc -res:[Link] [Link]
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
27/09/2021 • 2 minutes to read
Sintaxe
-rootnamespace:namespace
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
Se você usar Visual Studio arquivo executável ([Link]) para compilar um projeto criado no ambiente de
desenvolvimento integrado do Visual Studio, use para especificar o valor da -rootnamespace RootNamespace
propriedade. Confira Opções de linha de comando do Devenv para obter mais informações.
Use o MSIL Disassembler do Common Language Runtime ( [Link] ) para exibir os nomes de namespace
no arquivo de saída.
Exemplo
O código a seguir [Link] compila e inclui todas as declarações de tipo no namespace mynamespace .
Confira também
Compilador de linha de comando do Visual Basic
[Link] (IL Disassembler)
Linhas de Comando de Compilação de Exemplo
-sdkpath
27/09/2021 • 2 minutes to read
Sintaxe
-sdkpath:path
Argumentos
path
O diretório que contém as versões de [Link] e [Link] a serem usadas para compilação.
Esse caminho não é verificado até que seja carregado. Coloque o nome do diretório entre aspas ("") se ele
contiver um espaço.
Comentários
essa opção informa o compilador de Visual Basic para carregar os arquivos de [Link] e
[Link] de um local não padrão. A -sdkpath opção 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 idioma não encontrados nos dispositivos.
NOTE
a -sdkpath opção não está disponível no ambiente de desenvolvimento de Visual Studio; ela está disponível somente
durante a compilação na linha de comando. a -sdkpath opção é definida quando um projeto de dispositivo Visual Basic
é carregado.
você pode especificar que o compilador deve compilar sem uma referência para a biblioteca de tempo de
execução Visual Basic usando a -vbruntime opção do compilador. Para obter mais informações, consulte -
vbruntime.
Exemplo
O código a seguir é compilado [Link] com o .NET Compact Framework, usando as versões do [Link] e
[Link] 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.
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-netcf
-vbruntime
-Target (Visual Basic)
27/09/2021 • 4 minutes to read
Sintaxe
-target:{exe | library | module | winexe | appcontainerexe | winmdobj}
Comentários
A tabela a seguir resume o efeito da -target opção.
OPÇ ÃO C O M P O RTA M EN TO
-target:module Faz com que o compilador gere um módulo que pode ser
adicionado a um assembly.
a menos que você especifique -target:module , -target faz com que um manifesto de assembly .NET
Framework seja adicionado a um arquivo de saída.
Cada instância do [Link] 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, o último processo do compilador será colocado 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 aqueles criados com -target:module contêm metadados de assembly no manifesto. Use
[Link] (desmontador de Il) para exibir os metadados em um arquivo de saída.
A forma abreviada de -target é -t .
para definir o destino no IDE Visual Studio
1. Selecione um projeto no Gerenciador de Soluções . No menu Projeto , clique em Propriedades .
2. Clique na guia Aplicativo .
3. Modifique o valor na caixa tipo de aplicativo .
Exemplo
O código a seguir é compilado [Link] , criando [Link] :
Confira também
Compilador de linha de comando do Visual Basic
-principal
-out (Visual Basic)
-referência (Visual Basic)
-addmodule
-moduleassemblyname
Assemblies no .NET
Linhas de Comando de Compilação de Exemplo
-SubSystemVersion (Visual Basic)
28/09/2021 • 2 minutes to read
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 aproveitar os recursos de segurança específicos que não
estão disponíveis com versões mais antigas do Windows.
NOTE
Para especificar o subsistema em si, use a opção do compilador -target.
Sintaxe
-subsystemversion:[Link]
Parâmetros
[Link]
A versão mínima obrigatória do subsistema, conforme expresso em uma notação de ponto para versões
principais e secundárias. Por exemplo, você pode especificar que um aplicativo não pode ser executado em um
sistema operacional mais antigo que o Windows 7 se definir o valor dessa opção como 6.01, conforme descrito
na tabela mais adiante neste tópico. Você deve especificar os valores de major e minor como inteiros.
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.
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:
O valor padrão é 6.02 se qualquer opção do compilador na lista a seguir for definida:
-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.
O valor padrão é 4.00 se nenhuma das condições anteriores for verdadeira.
Confira também
Compilador de linha de comando do Visual Basic
MSBuild Properties
-utf8output (Visual Basic)
27/09/2021 • 2 minutes to read
Sintaxe
-utf8output[+ | -]
Argumentos
+ | -
Opcional. O padrão para essa opção é -utf8output- , 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
do. Nessas situações, use -utf8output e redirecione a saída do compilador para um arquivo.
NOTE
a -utf8output opção não está disponível no ambiente de desenvolvimento de Visual Studio; ela está disponível
somente durante a compilação na linha de comando.
Exemplo
O código a seguir compila [Link] e direciona o compilador para exibir a saída usando a codificação UTF-8.
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-vbruntime
28/09/2021 • 2 minutes to read
Especifica que o compilador deve compilar sem uma referência à biblioteca Visual Basic Runtime ou com uma
referência a uma biblioteca de runtime específica.
Sintaxe
-vbruntime:{ - | + | * | path }
Argumentos
-
Compile sem uma referência à biblioteca Visual Basic Runtime.
+
Compile com uma referência à biblioteca de Visual Basic Runtime padrão.
*
Compile sem uma referência à biblioteca Visual Basic Runtime do Visual Basic e inserir a funcionalidade
principal da biblioteca Visual Basic Runtime no assembly.
path
Compile com uma referência à DLL (biblioteca) especificada.
Comentários
A opção do compilador permite que você especifique que o compilador deve ser compilado sem uma referência
à -vbruntime biblioteca Visual Basic Runtime. Se você compilar sem uma referência à Biblioteca de Runtime do
Visual Basic, erros ou avisos serão registrados em constructos de código ou idioma que geram uma chamada
para um auxiliar Visual Basic runtime. (Um Visual Basic auxiliar de runtime é uma função definida no
[Link] que é chamada em runtime para executar uma semântica de idioma específica.)
A -vbruntime+ opção produzirá o mesmo comportamento que ocorrerá se nenhuma -vbruntime opção for
especificada. Você pode usar a -vbruntime+ opção para substituir as opções -vbruntime anteriores.
A maioria dos objetos My do tipo não está disponível quando você usa as opções ou -vbruntime-
-vbruntime:path .
Exemplo
O exemplo a seguir mostra como usar a -vbruntime opção para compilar com uma referência a uma biblioteca
personalizada.
vbc -vbruntime:C:\VBLibraries\[Link]
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
27/09/2021 • 2 minutes to read
Sintaxe
-verbose[+ | -]
Argumentos
+ | -
Opcional. Especificar -verbose é o mesmo que especificar -verbose+ , o que faz com que o compilador emita
mensagens detalhadas. O padrão para essa opção é -verbose- .
Comentários
A -verbose opção 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.
NOTE
a -verbose opção não está disponível no ambiente de desenvolvimento de Visual Studio; ela está disponível somente
durante a compilação na linha de comando.
Exemplo
O código a seguir compila [Link] e direciona o compilador para exibir informações detalhadas de status.
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-warnaserror (Visual Basic)
27/09/2021 • 2 minutes to read
Faz com que o compilador trate a primeira ocorrência de um aviso como um erro.
Sintaxe
-warnaserror[+ | -][:numberList]
Argumentos
T ERM O DEF IN IÇ Ã O
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, está em vigor, o que faz com que os avisos sejam apenas informativos. A opção
-warnaserror-
-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.
NOTE
A opção -warnaserror não controla como os avisos são exibidos. Use a opção -nowarn para desativar os avisos.
Exemplo 1
O código a seguir compila [Link] e direciona o compilador para exibir um erro para a primeira ocorrência de
cada aviso que ele encontre.
Exemplo 2
O código a seguir compila [Link] e trata apenas o aviso de variáveis locais não utilizadas (42024) como um
erro.
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
27/09/2021 • 2 minutes to read
Insere um arquivo. ico no arquivo de saída. Esse arquivo. ico representa o arquivo de saída no Explorador de
arquivos .
Sintaxe
-win32icon:filename
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
você pode criar um arquivo. ico com o compilador de recursos do Microsoft Windows (RC). O compilador de
recursos é invocado quando você compila um programa de Visual C++; um arquivo. ico é criado a partir do
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 de .NET Framework. Consulte -Win32Resource para
importar um arquivo. res.
Exemplo
O código a seguir compila [Link] e anexa um arquivo. ico, [Link] .
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
-win32manifest (Visual Basic)
28/09/2021 • 2 minutes to read
Identifica um arquivo de manifesto do aplicativo Win32 definido pelo usuário para ser inserido no arquivo
executável portátil (PE) de um projeto.
Sintaxe
-win32manifest: fileName
Argumentos
T ERM O DEF IN IÇ Ã O
Comentários
por padrão, o compilador Visual Basic insere um manifesto do aplicativo que especifica um nível de execução
solicitado de asInvoker. Ele cria o manifesto na mesma pasta em que o arquivo executável é criado,
normalmente a pasta bin\Debug ou bin\Release quando você usa 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 essa opção para especificar o nome do arquivo.
NOTE
Essa opção e a opção -Win32Resource são mutuamente exclusivas. Se você tentar usar ambas as opções na mesma linha
de comando, receberá um erro de compilaçã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 qualquer uma das seguintes condições for verdadeira:
1. você usa a -nowin32manifest opção e não fornece um manifesto em uma etapa de compilação posterior
ou como parte de um arquivo de Windows recurso (. res) usando a -win32resource opção.
2. Você fornece um manifesto personalizado que não especifica um nível de execução solicitado.
O Visual Studio cria um arquivo .manifest padrão e o armazena nos diretórios de depuração e liberação
juntamente com o arquivo executável. você pode exibir ou editar o arquivo. manifest do aplicativo padrão
clicando em exibir UAC Configurações na guia aplicativo no Designer de Project. Para obter mais
informações, consulte Página de aplicativo, Designer de Projeto (Visual Basic).
Você pode fornecer o manifesto do aplicativo como uma etapa de pós-compilação personalizada ou como parte
de um arquivo de recurso do Win32 usando a -nowin32manifest opção. Use essa mesma opção se quiser que o
aplicativo seja sujeito à virtualização de arquivo ou Registro no Windows Vista. Isso impedirá que o compilador
crie e incorpore um manifesto padrão no arquivo PE.
Exemplo
o exemplo a seguir mostra o manifesto padrão que o Visual Basic compilador insere em um PE.
NOTE
O compilador insere um nome de aplicativo padrão [Link] no XML do manifesto. Essa é uma solução
alternativa para habilitar os aplicativos para serem executados no Windows Server 2003 Service Pack 3.
Confira também
Compilador de linha de comando do Visual Basic
-nowin32manifest (Visual Basic)
-win32resource
28/09/2021 • 2 minutes to read
Sintaxe
-win32resource:filename
Argumentos
filename
O nome do arquivo de recurso a ser adicionar ao arquivo de saída. Coloque o nome do arquivo entre aspas (" ")
se ele contiver um espaço.
Comentários
Você pode criar um arquivo de recurso Win32 com o RC (Compilador de Recursos do Microsoft Windows).
Um recurso win32 pode conter informações de versão ou bitmap (ícone) que ajudam a identificar seu aplicativo
no Explorador de Arquivos . Se você não especificar -win32resource , o compilador gerará informações de
versão com base na versão do assembly. As opções -win32resource e -win32icon são mutualmente exclusivas.
Consulte -linkresource (Visual Basic) para referenciar um arquivo de recurso .NET Framework ou -resource
(Visual Basic) para anexar um arquivo .NET Framework recurso.
NOTE
A opção não está disponível no ambiente de Visual Studio desenvolvimento; ela está disponível somente durante a
compilação da -win32resource linha de comando.
Exemplo
O código a seguir [Link] compila e anexa um arquivo de recurso Win32, [Link] :
Confira também
Compilador de linha de comando do Visual Basic
Linhas de Comando de Compilação de Exemplo
Visual Basic opções de compilador listadas por
categoria
27/09/2021 • 4 minutes to read
o compilador de linha de comando Visual Basic é fornecido como uma alternativa à compilação de programas
de dentro do ambiente de desenvolvimento integrado (IDE) Visual Studio. veja a seguir uma lista de Visual Basic
opções do compilador de linha de comando classificadas por categoria funcional.
Cada opção de compilador está disponível em duas formas: -option e /option . A documentação mostra
apenas o -option formulário.
Saída do compilador
OPÇ ÃO F IN A L IDA DE
Optimization
OPÇ ÃO F IN A L IDA DE
Arquivos de saída
OPÇ ÃO F IN A L IDA DE
Assemblies .NET
OPÇ ÃO F IN A L IDA DE
Depuração/verificação de erros
OPÇ ÃO F IN A L IDA DE
Ajuda
OPÇ ÃO F IN A L IDA DE
Idioma
OPÇ ÃO F IN A L IDA DE
Pré-processador
OPÇ ÃO F IN A L IDA DE
Recursos
OPÇ ÃO F IN A L IDA DE
Diversos
OPÇ ÃO F IN A L IDA DE
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)
27/09/2021 • 2 minutes to read
este tópico fornece links para informações sobre como trabalhar com a biblioteca de classes de .NET
Framework.
Seções relacionadas
Introdução
Fornece uma visão geral abrangente do .NET Framework e links para recursos adicionais.
Visão geral da biblioteca de classes
Apresenta as classes, as interfaces e os tipos de valor que ajudam a agilizar e otimizar o processo de
desenvolvimento e fornecer acesso à funcionalidade do sistema.
Guia de desenvolvimento
Fornece um guia para todas as áreas de tecnologia-chave e tarefas para o desenvolvimento de aplicativos,
incluindo a criação, configuração, depuração, proteção e implantação de seu aplicativo. Este tópico também
fornece informações sobre programação dinâmica, interoperabilidade, extensibilidade, gerenciamento de
memória e Threading.
Ferramentas
descreve as ferramentas que você pode usar para desenvolver, configurar e implantar aplicativos usando as
tecnologias do .NET Framework.
Navegador de API .NET
fornece sintaxe, exemplos de código e informações relacionadas para cada classe nos namespaces de .NET
Framework.
especificação da linguagem Visual Basic
27/09/2021 • 2 minutes to read
a especificação de linguagem de Visual Basic é a fonte autoritativa para respostas a todas as perguntas sobre
Visual Basic gramática e sintaxe. ele contém informações detalhadas sobre a linguagem, incluindo muitos
pontos não abordados na documentação de referência do Visual Basic.
A especificação está disponível na Centro de Download da Microsoft.
este site contém a especificação Visual Basic 11. Ela é criada de arquivos Markdown contidos no repositório do
GitHub dotnet/vblang.
Problemas na especificação devem ser criados no repositório dotnet/vblang. Ou, se você estiver interessado em
corrigir quaisquer erros encontrados, poderá enviar uma solicitação de pull para o mesmo repositório.
Confira também
Visual Basic Referência de linguagem
PR Ó XIM O
Instruções passo a passo da linguagem Visual Basic
27/09/2021 • 2 minutes to read
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.
Escrevendo um programa assíncrono
Mostra como criar uma solução assíncrona usando Async e Await.
declarar e gerar eventos
Ilustra como eventos são declarados e gerados em Visual Basic.
Manipulando eventos
Mostra como manipular eventos usando a palavra-chave WithEvents padrão ou as novas palavras-chave
AddHandler / RemoveHandler .