Você está na página 1de 35

c   

   

Objetos são fundamentais para programação de Visual Basic: Formulários e controles são objetos.
Bancos de dados são objetos. Se você tiver usado Visual Basic por um tempo, ou caso você tenha
trabalhado através de exemplos na documentação, então você programou com objetos, mas há
muito mais objetos do que você viu até o momento.
Nos tópicos a seguir, você verá como é fácil criar seus próprios objetos a partir de classes que
você define e para usar objetos para simplificar sua codificação e aumentar a reutilização de
código.
Nesta seção
Introdução a Objetos no Visual Basic
Fornece uma introdução aos termos e conceitos usados em programação orientada a
objetos.
Noções básicas sobre classes
Fornece uma visão geral das classes e um exemplo de como definir uma classe.
Criando e Usando Objetos
Mostra como criar e usar as instâncias das classes.
Coleções em Visual Basic
Fornece uma visão geral das coleções.
Eventos no Visual Basic
Mostra como Declarar e usar os eventos.
Delegados no Visual Basic
Mostra como Declarar e usar delegados.
Interfaces em Visual Basic
Descreve o que são interfaces e como você pode usá-las em seus aplicativos.
A herança no Visual Basic
Descreve como definir classes Visual Basic para servirem como base para outras classes.
Membros compartilhados no Visual Basic
Descreve os membros que podem ser usados sem instâncias.
Vinculação antecipada e mais tarde
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 vinculação-antecipada e
vinculação atrasada.
?

ð
   

Um objeto é uma estrutura quem contém dados e métodos para manipular os dados. Quase tudo
que você faz em Visual Basic é associado com objetos. Se você é novato na programação
orientada a objetos, os termos e conceitos a seguir vão lhe ajudar nesta fase introdutória.
Classes e Objetos
As palavras "classe" e "objeto" são tão usadas em programação orientada a objeto que é fácil
confundir os termos. De modo geral, uma class é uma representação abstrata de algo, enquanto
um objeto é um exemplo manipulável daquilo que a classe representa. A única exceção a esta
regra são os membros da classe compartilhados, que são manipuláveis em ambas as instâncias de
uma classe e variáveis de objeto declaradas como o tipo da classe.
Campos, Propriedades, Métodos e Eventos
Classes consistem de campos, propriedades, métodos e eventos. Campos e propriedades
representam informações que um objeto contém. Campos são como variáveis, porque eles podem
ser lidos ou alterados diretamente. Por exemplo, se você tem um objeto chamado "Carro" você
pode armazenar sua cor em um campo chamado "Cor."
Propriedades são recuperadas e modificadas como campos, mas são implementadas pelos
procedimentos Get e Set, que fornecem maior controle sobre como valores são alterados ou
recuperados. A camada indireta entre o valor sendo armazenado e os procedimentos que usam
este valor ajuda a isolar seus dados e permite que você valide valores antes de eles serem
atribuídos ou recuperados.
Métodos representam ações que um objeto pode realizar. Por exemplo, um objeto "Carro" pode
ter os métodos "PartidaNoMotor", "Dirigir" e "Parar". Você define métodos ao adicionar
procedimentos, quer sejam Sub rotinas ou funções, a sua classe.
Eventos são notificações que um objeto recebe de, ou transmite para, outros objetos ou
aplicativos. Eventos permitem que objetos realizem ações sempre que uma ocorrência específica
ocorrer. Um exemplo de evento para a classe "Carro" seria o evento "Check-Eengine". Como o
Microsoft Windows é um sistema operacional movido por eventos, eventos podem vir de outros
objetos, aplicativos ou de entradas do usuário como cliques do mouse ou teclas pressionadas.
Encapsulamento, Herança e Polimorfismo
Campos, propriedades, métodos e eventos são apenas a metade da equação da programação
orientada a objeto. Verdadeira programação orientada a objeto requer objetos para suporte
de três qualidades: Encapsulamento, herança e polimorfismo.
K capsulame to significa que um grupo de propriedades, métodos e outros membros relacionados
são tratados como unidade ou um objeto único. Objetos podem controlar como as propriedades
são alteradas e os métodos são executados. Por exemplo, um objeto pode validar valores antes de
permitir que as propriedades mudem. Encapsulamento também torna mais fácil de alterar a
implementação em uma ocasião mais tarde permitindo que você oculte detalhes da
implementação de seus objetos, uma prática conhecida como ocultame to de dados.
Hera a descreve a habilidade de se criarem novas classes baseadas em uma classe pré-existente.
A nova classe herda todas as propriedades, métodos e eventos da classe base, e pode ser
customizada com propriedades e métodos adicionais. Por exemplo, você pode criar uma nova
classe chamada "Caminhão" baseada na classe "Carro". A classe "Caminhão" herda a propriedade
"Cor" da classe "Carro" e pode ter propriedades adicionais como "TraçãoEmQuatroRodas".
Polimorfismo significa que você pode ter múltiplas classes que podem ser usadas
intercambiavelmente, mesmo que cada classe implemente as mesmas propriedades e métodos de
modos diferentes. Polimorfismo é importante para a programação orientada a objeto porque
permite que você use itens com o mesmo nome, independente de qual tipo de objeto está em uso
no momento. Por exemplo, dada a classe base "Carro", o polimorfismo permite que o
programador defina diferentes métodos "PartidaNoMotor" para qualquer número de classes
derivadas. O método "PartidaNoMotor" de uma classe derivada chamada "CarroADiesel" pode ser
completamente diferente do método de mesmo nome na classe base. Outros procedimentos ou
métodos podem usar o método "PartidaNoMotor" da classe derivada da mesma maneira, sem
importar qual tipo de objeto "Carro" está sendo usado no momento.
Sobrecarga, Substituição e Sombreamento
Sobrecarga, substituição e sombreamento são conceitos similares que podem ser facilmente
confundidos. Embora todas as três técnicas permitam que você crie membros com o mesmo
nome, há algumas diferenças importantes.
å? Membros sobrecarregados são usados para prover diferentes versões de uma propriedade
ou método que têm o mesmo nome, mas aceitam diferente número de parâmetros ou
parâmetros com diferentes tipos de dados.
å? Propriedades e métodos substituídos são usados para substituir uma propriedade ou
método herdado que não é apropriado à classe derivada. Membros substituídos devem
aceitar o mesmo tipo de dados e número de argumentos. Classes derivadas herdam
membros substituídos.
å? Membros sombreados são usados para substituir localmente um membro que tem um
escopo mais amplo. Qualquer tipo pode sombrear qualquer outro tipo. Por exemplo, você
pode declarar uma propriedade que sombreia um método herdado com o mesmo nome.
Membros sombreados não podem ser herdados.
?

°    


Classes são importantes porque permitem que você agrupar itens relacionados como uma
unidade, bem como controlar sua visibilidade e acessibilidade de outros procedimentos de
programação orientada a objeto. Classes também podem herdar e reutilizar código definido em
Outro classes.
?

þ c
   
Classes são representações simbólicas de objetos; classes descrevem as propriedades, campos,
métodos e eventos que forma objetos da mesma forma que plantas descrevem os itens que
formam construções. Assim com uma planta pode ser usada para criar diversas construções, uma
única classe pode ser usada para criar quantos objetos forem necessários. Assim como uma planta
define quais partes da construção são acessíveis para pessoas que usam a construção, classes
podem controlar o acesso de usuários a itens do objeto através de encapsulação.
Classes e Objetos
Os termos classe e objeto são às vezes usados representando a mesma coisa, mas na verdade,
classes descrevem a estrutura de objetos, enquanto objetos são instâncias úteis de classes. Cada
instância é uma cópia exata ainda distinta da sua classe. Porque um objeto é uma instância de
uma classe, o ato de criação de um objeto é chamado instanciação. Cada instância é uma cópia
exata ainda distinta da sua classe. Porque um objeto é uma instância de uma classe, o ato de
criação de um objeto é chamado instanciação.
Usando a analogia da planta, a classe é a planta, e o objeto é a construção feita daquela planta.
Geralmente, a mudança de dados num objeto não muda as informações contidas em nenhum
outro objeto. (A exceção são os membros compartilhados, membros de classe declarados com o
modificador Shared, que existem independentemente de instâncias específicas da classe.)
Encapsulamento
K capsulame to é a habilidade de conter e controlar o acesso a um grupo de itens associados.
Classes fornecem um dos modos mais comuns de encapsular itens. No exemplo abaixo, a classe
O  encapsula os métodos, campos, e propriedade que descrevem a conta de banco.
Sem encapsulação, você declararia procedimentos separados e variável para armazenar e
gerenciar informação da conta de banco, e isso tornaria difícil trabalhar com mais de uma conta ao
mesmo tempo. Com encapsulamento você pode usar as informações e procedimentos na classe
BankAccount como uma unidade. Você pode trabalhar com contas de banco múltiplas
concomitantemente sem confusão pois cada conta é representada por uma instância única da
classe.
Encapsulamento também permite controlar como a informação e procedimentos são usados. Você
pode usar modificadores de acesso, como crivate ou crotected, para previnir procedimentos
externos de executar métodos de classe ou ler e modificar dados em procedimentos e campos.
Você deve declarar detalhes internos de uma classe como crivate para previnir que eles sejam
usados fora da classe; essa técnica é chamada de esco der i formaes, e é como informações do
cliente como o saldo da conta são protegidas.
Uma regra básica de encapsulamento é que dados da classe devem ser modificados ou
recuperados somente através de procedimentos ou métodos Property. Escondendo os detalhes da
implementação de suas classes, previne as classes de serem usadas de forma não desejada, e
permite que você modifique esses itens no futuro sem risco de problemas de compatibilidade. Por
exemplo, versões posteriores da classe O  poderiam mudar o tipo de dados do campo
O   sem quebrar outras aplicações que dependem desse campo tendo um tipo
específico de tipo de dados.
Herança
Como estruturas Visual Basic, você pode usar classes para defiir tipos de dados que encapsulam
um grupo de itens relacionados. Diferentemente de estruturas, no entanto, classes Visual Basic
podem herdar e extender as características de outras classes. Classes que servem como base para
Novo classes são chamados de classes base . Classes derivadas de classes base são chamadas
classes derivadas. Classes derivadas herdam todos os campos, propriedades, métodos e eventos da
classe base. Isso significa que você pode desenvolver e debugar uma classe por vez e, depois
reusá-la como base para outras classes.
O seguinte exemplo define uma classe base que representa uma conta bancária genéric a, e uma
classe específica que herda as propriedades da classe base mas é customizada para descrever
uma conta corrente.
Visual Basic
?
Copiar Código ?
þ

O 
   
 
  O   
  
   
O    

  


        
  
!
" 
# $ % $ O    
  
& 
 #          !
#   O  
" & 
" % $
" þ



þ

þ 
 
O 
 

þ 
    % 

   '  
!
" 
" þ


Para obter mais informações sobre herança, consulte Noções básicas sobre herança.
Membros compartilhados
Por padrão, os dados da classe são específicos para cada instância da classe, mas pode haver
ocasiões em que você queira que um único item de dados seja compartilhado por todos objetos
criados de uma classe. Nesses casos, use o modificador Shared para fazer com que uma variável
compartilhe o mesmo valor em todas instâncias de uma classe ( Membros Compartilhados são
algumas vezes chamados de "Membros Estáticos" em outras linguagens de programação). Você
pode chamar métodos compartilhados diretamente usando um nome de classe sem antes criar
uma instância dessa classe.
Para obter mais informações sobre membros compartilhados, veja Membros compartilhados no
Visual Basic.
Sombreamento
Classes derivadas podem usar a palavra chave Shadows para declarar um membro com o mesmo
nome que um membro herdado. Membros sombreados não precisam ser do mesmo tipo de dados
que o membro sendo sombreado. Por exemplo, uma propriedade pode sombrear uma variável do
tipo Integer.
Para obter mais informações sobre membros compartilhados, veja Sombreamento em Visual
Basic.
?

_ 
 c_ 
  
Essa explicação passo a passo demonstra como definir classes, que você pode usar para criar
objetos. Ele também mostra como adicionar propriedades e métodos à nova classe e demonstra
como inicializar um objeto.

@bservação:

As caixas de Caixa de diálogo e o menu comandos você consulte pode diferir daquelas descritas na
Ajuda , Dependendo de suas configurações Ativo ou edição. Para alterar as configurações, Clique em
ð  
 no menu  
. Para obter mais informações, consulte
Configurações do Visual Studio.

cara definir uma classe

.? Crie um projeto, clicando em ° no menu  . A caixa de diálogo °ovo
crojeto aparecerá.
2.? Selecione aplicativos do Windows na lista de modelos de projetos Visual Basic para exibir
o novo projeto.
3.? Adicione uma nova classe ao projeto, clicando em  
 no menu de . A
caixa de diálogo Adicionar novo item é exibida.
4.? Selecione o modelo .

5.? Nomeie a nova classe h


   ! e, em seguida, clique em  
 para exibir o
código para a nova classe.

Visual Basic

Copiar Código ?
 þ

h
   
" þ


@bservação:

Você pode usar o Visual Basic   to add a class to your startup form by typing the þlass
keyword followed by the name of the new class. O    fornece uma instrução Knd
þlass correspondente para você.

6.? Defina um campo particular para a classe adicionando o seguinte código entre as
instruções þlass e Knd þlass:

Visual Basic

Copiar Código ?
  
  (  
 
Declarar o campo como crivate significa que ele pode ser usado somente dentro da
classe. Você pode disponibilizar campos de fora de uma classe usando modificadores de
acesso, como cublic, que fornecem mias acesso. For more information, see Níveis de
acesso em Visual Basic.
7.? Defina uma propriedade para a classe adicionando o seguinte código:

Visual Basic

Copiar Código ?
 % $ h
   
 
& 
 & 
 % % $   !
#   
  ( 
" & 
 O$(  (  
 
  
 % % $   !

  (   ( 
"  
" % $
Õ.? Defina um método para a classe adicionando o seguinte código:

Visual Basic

Copiar Código ?
  þ % ) 
 þ % )      % % $!

  (   hþ

  (  
" 
Ú.? Defina um construtor com parâmetros para a nova classe adicionando um procedimento
denominado   ':

Visual Basic

Copiar Código ?
   'O$(  h
  
 
    % % $   !
* !h
   h
 
" 
O construtor   ' é chamado automaticamente quando um objeto baseado nessa
classe é criado. Esse construtor define o valor do campo que contém o nome de usuário.

cara criar um botão para testar a classe

.? Altere o formulário de inicialização para o modo de design clicando com o botão direito em
seu nome no -
 e, em seguida, clicando em 

 !. Por padrão, o formulário de inicialização para projetos de aplicativos Windows é
chamado Form.vb. O formulário principal, em seguida, será exibido.
2.? Adicione um botão ao formulário principal e clique duas vezes nele para exibir o código
para o manipulador de eventos O+,þ. Adicione o seguinte código para chamar
o procedimento de teste:

Visual Basic

Copiar Código ?
 þ   
    

!
 

 ' h
    -* . O$- 
 þ % )      % % $!

!þ % ) 
 
% $      % % $!
*
O/-0    h
  
1 - 2 
!h
  
 þ       % % $!

!h
   -3  . 4 -
 # 
% $      % % $!
*
O/-0  ' h
  
1 - 2 
!h
  

cara executar seu aplicativo

.? Execute o aplicativo pressionando F5. Clique no botão do formulário para chamar o
procedimento de teste. Ele exibe uma mensagem informando que o h
  original é
"MOORE, BOBBY", porque o procedimento chama o método þ % ) do objeto.
2.? Clique @ para descartar a caixa de mensagem. O procedimento O+ þ altera o
valor da propriedade h
  e exibe uma mensagem informando que o novo valor de
h
  é "Worden, Joe".
?

þ   


Classes e módulos são tipos de referência que encapsulam os itens definidos dentro, mas eles
diferem em como itens são acessados a partir de outros procedimentos.
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 recebe o mesmo valor se ler essa variável. Em
contraste, dados do objeto existem separadamente para cada objeto instanciado. Outra diferença
é que, ao contrário dos módulos padrão, classes podem implementar interfaces.

@bservação:

Quando o Modificador de Shared é aplicado a um membro da classe, ele é associado com a classe
propriamente dito, em vez de uma instância específica da classe. O membro é acessado diretamente
usando o nome da classe, da mesma maneira que membros de módulo são acessados. Para obter
mais informações sobre membros compartilhados, veja Membros compartilhados no Visual Basic.

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 apenas durante a vida útil
do objeto. Para acessar membros de classe de fora de uma classe, você deve usar nomes
totalmente qualificados no formato de @bjeto.Membro.
Por outro lado, o 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 na realidade variáveis globais, pois estão visíveis de qualquer
lugar em seu projeto, e existem durante a vida útil do programa.
?

þ         


 
Uma instância de uma classe, um objeto, é criado usando a palavra-chave New. Tarefas de
inicialização geralmente devem ser executadas no novos objetos antes de serem usadas. Tarefas
de inicialização ComComumComum Incluir Abrindo de arquivos, conectar a bancos de dados e ler
valores de chaves do Registro. Visual Basic controla a inicialização de novos objetos usando
procedimentos chamados co strutores (métodos EEspecial que permitem o controle sobre a
inicialização).
Depois de Comum objeto sai do escopo, ela é lançada pelo ComComumComum Idioma Tempo de
execução (CLR). Visual Basic controla o versãosão de recursos do sistema usando os
procedimentos chamados destruidores. Juntos, construtores e destrutores oferecem suporte a
criação de bibliotecas de classes robusta e previsível.
Sub Novo e Sub Finalize
O Sub °ew e procedimentos de Sub Finalize no Visual Basic inicializar e destruir objetos; eles
Substituir a þlass_Initialize e métodos de þlass_Terminate usados no Visual Basic 6.0 e
versões anteriores. Ao contrário de þlass_Initialize, o construtor de Sub °ew pode executar
apenas uma vez quando uma classe é Criado. Ele não pode ser chamado explicitamente em
qualquer lugar diferente na Primeiro linha do código de outro construtor da qualquer classe
mesma ou de uma classe derivada. Além disso, o código no método Sub °ew sempre será
executado antes de qualquer outro código em uma classe. Visual Basic 2005 e versões posteriores
implicitamente criar um construtor Sub °ew em tempo de execução se você não definir
explicitamente um procedimento de Sub °ew para uma classe.
Antes de liberar objetos, o CLR automaticamente chama o método Finalize de objetos que
definem um procedimento de Sub Finalize. O método Finalize pode conter código que precisa
executar imediatamente antes de um objeto é destruído, como o código para fechar arquivos e
Salvando informações de estado. Há uma penalidade de desempenho pequeno para executar Sub
Finalize, portanto, você deve definir um método Sub Finalize somente quando você precisa
versão objetos explicitamente.

@bservação:

O coletor de lixo do CLR não tem como (e não pode) finalizar objetos não gerenciados, objetos que o
sistema operacional executa diretamente, fora do ambiente CLR. Isso ocorre porque diferentes
objetos não gerenciados devem ser descartados de maneiras diferentes. Essa informação não está
diretamente associada com o objeto não gerenciado; ele deve ser encontrado na documentação para
o objeto. Uma classe que usa os objetos não gerenciados deve descarregá-los em seu método
Finalize.

O destruidor Finalize é um método protegido que pode ser chamado somente da classe que ele
pertence, ou de classes derivadas. O sistema chama Finalize automaticamente quando um objeto
é destruído, portanto, você não deve chamar explicitamente Finalize de fora da implementação
de Finalize uma classe derivada.
Ao contrário de þlass_Terminate, que será executada assim que um objeto é definido como
nada, geralmente há um atraso entre quando um objeto perca escopo e quando o Visual Basic
chama o destruidor Finalize. Visual Basic 2005 e versãosões posteriores permitem um segundo
tipo de destruidor, Dispose, que pode ser explicitamente chamado a a qualquer hora para liberar
imediatamente recursos.

@bservação:

O Finalize, destruidor, não deve lançar exceções, pois eles não podem ser manipulados pelo
aplicativo e podem fazer com que o aplicativo encerre.

Interface IDisposable
Instâncias da classe geralmente Controlaram recursos não gerenciados pelo CLR, como
identificadores do Windows e conexões de banco de dados. Esses recursos devem ser descartados
no método Finalize de classe, para que eles serão liberados quando o objeto é destruído pelo
coletor de lixo. No entanto, o coletor de lixo destrói objetos apenas quando o CLR requer mais
memória livre. Isto significa que os recursos podem não ser liberados até muito tempo depois que
o objeto sai do escopo.
Para complementar o Garbage Collection, suas classes podem fornecem um mecanismo para
gerenciar ativamente os recursos de sistema se eles implementam a interface de IDisposable.
IDisposable tem um método, Dispose, o qual os clientes devem chamar quando terminarem de
usar um objeto. Você pode usar o método Dispose para Eliminar imediatamente, liberar recursos e
executar tarefas como fechar arquivos de dados e conexões. Ao contrário do destruidor Finalize ,
o método Dispose não é chamado automaticamente. Clientes de uma classe devem chamar
explicitamente o Dispose quando pretendem liberar imediatamente recursos.
Implementação de IDisposable
Uma classe que implementa a interface de IDisposable deve incluir essas seções de código:
å? Um campo para controlar das se o objeto foi descartado:

Copiar Código ?
   
%
 
O    

å? Uma sobrecarga de Dispose que libera recursos da classe. Este método deve ser chamado
pelo Dispose e métodos de Finalize da classe base:

Copiar Código ?
       
%
O$(  
%
 
O 
  * !
%
 0 
 
%
 0 
 
      
 
!
" 
 
      
 
!
" 
* !
%
  0 
" 
å? Uma implementação de Dispose contém o seguinte código:

Copiar Código ?
  
%
 %  

%
 !
%


%
0  
&þ!%%

 ) * 
" 
å? Finalize um override do método que contém apenas o seguinte código:

Copiar Código ?
    
  ) 

%
 

*$O
! ) 
" 
Derivando de uma classe que implementa IDisposable
Uma classe que deriva de uma classe base que implementa a interface de IDisposable não precisa
substituir qualquer um dos métodos base a menos que ele use recursos adicionais que precisam
ser descartados. Nessa situação, a classe derivada deve substituir método de

%

%
 da classe base para Dispose de recursos da classe derivada. Este override
deve chamar a classe base do Dispose (disposing) método
?
Copiar Código ?
    
 
%
O$(  
%
 
O 
  * !
%
 0 
 
%
 0 
 
      
 
!
" 
 
      
 
!
" 
*$O
!
%

%

" 
A classe derivada não deve sobrepor os métodos Dispose e Finalize da classe base. Quando esses
métodos são chamados de uma instância da classe derivada, implementação da classe base
desses métodos chamar Substituir a classe derivada do método 
%

%
.
Ôisualização
O diagrama a seguir mostra quais métodos são herdados e quais métodos são substituídos na
classe derivada.
Quando este Dispose e Finalize padrão é seguido, os recursos da classe derivada e a classe base
são corretamente eliminados. A diagrama a seguir mostra quais métodos chamados quando as
classes são descartadas e finalizadas.

Lixo coleção e Finalize Destructor


O .NET Framework usa o sistema de coleção de lixo (Garbage Collection) da referência de
rastreamento para periodicamente liberar os recursos não utilizados. O Visual Basic 6.0 e versões
anteriores usam um sistema diferente chamado referência de contagem para gerenciar recursos.
Embora ambos os sistemas executem a mesma função automaticamente, existem algumas
diferenças importantes.
O CLR periodicamente destrói objetos quando o sistema determina que esses objetos não são
mais necessários. Os objetos são liberados mais rapidamente quando recursos do sistema estão
no fornecimento Abreviado e com menos freqüência caso contrário. O atraso entre quando um
objeto perca escopo e quando o CLR libera ele significa que, ao contrário com objetos no Visual
Basic 6.0 e versões anteriores, você não pode determinar exatamente quando o objeto será
destruído. Em tais situações, objetos são considerados ter de vida útil de não-determinística . Na
maioria dos casos, vida útil de não-determinística não Altera como escrever aplicativos, desde que
você se lembre de que o destruidor Finalize não pode ser executado imediatamente quando um
objeto perde o escopo.
Outra diferença entre o lixo coleção (Garbage Collection) envolve o uso de Nothing. Para usufruir
da contagem de referência no Visual Basic 6.0 e versões anteriores, os programadores atribuem
às vezes, Nothing a variáveis de objeto para liberar as referências a essas variáveis. Se a variável
realizada a última referência ao objeto, o objeto de recursos foram liberados imediatamente Em
versões posteriores do Visual Basic, enquanto que pode haver casos em que este procedimento
ainda seja valioso, desenvolvê-lo nunca faz com que o objeto referenciado para liberar seus
recursos seja de fato liberado imediatamente. Para liberar recursos imediatamente, use o
método Dispose do objeto, se disponível. A única vez que você deve definir uma variável como
°othing é quando sua vida útil é tempo relativo para o tempo que o coletor de lixo leva para
detectar objetos órfãos.
?

þð 
 _ 
   
!
The Dispose Finalize pattern ensures that resources are released when the object is no longer
needed.
Exemplo
The #
  þ

class in the following example utilizes managed and unmanaged resources


and then uses the Dispose Finalize pattern to dispose of them properly. Os recursos e suas
funções são:
å? A implementação do método Dispose, que permite aos usuários da classe Dispose de
instâncias de classe. Este método chama 
%
0   para Dispose de recursos do
objeto e, então, chama SuppressFinalize para impedir que o código de finalização
executando um segundo tempo.
å? A Substituir do método base Finalize, que permite que o ComComumComum Idioma
Tempo de execução (CLR) coletor de lixo Dispose de instâncias de classe. Este método
chama 
%
 
 para Dispose de recursos do objeto. Observe que se Dispose era
chamado anteriormente para o objeto, sua chamada SuppressFinalize poderia impedir o
coletor de lixo chamar o método Finalize.
å? A sobrecarga do método Dispose, que faz o trabalho de descarte. Leva um parâmetro
booleano, 
%
, que indica se o seu código iniciadas alienação do objeto. Quando
você descartar um objeto, Tudo seus recursos devem ser descartados da. Quando o
coletor de lixo CLR descarta de um objeto, somente os recursos não gerenciados devem
ser descartados da; o coletor de lixo descarta automaticamente os recursos gerenciados
quando necessário.
For more information, see Como objetos são criados e destruídos Outros recursos.
Visual Basic
?
Copiar Código ?
 þ

#
  þ


%  

%


     #
  
$
 !þ% * !þ% 
     #
  
 
   
%
 
O    


   '
 
 %% %   
    !
" 

        
 
%
 ,
O$(  
%
 
O 
  * !
%
 0 
 
%
 0 
   #
  !
%

" 
     
    
  !
   #
     !5 
    

  
!
" 
* !
%
  0 
" 

  $ * 

 * !
%
 0 
0 '  '
6 
%
"/ % * !& 0$% !0 . ,
-0
6  
  
%
!- 
" 
" 

7#  - 
%
 %%  -
           
 
!
   %   
%
O$(  
%
 
O !
   
 
%
 %  

%
 !
%


%
0  
&þ!%%

 )  * 
" 
    
  ) 

%
 

*$O
! ) 
" 
7" # 
" þ


Este exemplo de código também está disponível como um trecho de código IntelliSense. No
selecionador de trechos de código, ele está localizado em Ô " #
 . Para obter mais
informações, consulte HOW TO: Trechos Inserir em seu código (Visual Basic).
Compilando o código
Este exemplo requer:
å? Acesso aos membros do espaços para nomes System e System.ComponentModel.
Adicione uma declaração Imports se você não está qualificando completamente os
nomes de membros em seu código. Para obter mais informações, consulte Declaração
Imports (Tipo e Namespace .NET).
Essas alterações devem ser feitas no código:
å? Substituir #
  þ

com o nome da classe que implementa IDisposable.


å? Use o teste no $ * 
em quaisquer métodos usando os recursos que podem
ter sido alienados.
å? Substituir a declaração de    #
  com declarações de qualquer gerenciados
objetos na sua classe que precisam ser descartados. Se uma classe implementa
IDisposable ou tem um método de þlose, ele provavelmente precisará ser descartado.
No método de Dispose, fechar ou Dispose desses objetos.
å? Substituir a declaração de *   #
  com declarações de objetos não
gerenciados em sua classe que precisam ser descartados. O método de descarte desses
objetos depende de como o objeto é definido. Para obter detalhes, consulte a
documentação no objeto.
Programação robusta
Depois que tiver sido chamado o método Dispose, objetos contidos na sua coleção não será
válidos. Você deve testar o campo 
%
 antes de executar quaisquer operações sobre o
objeto. Para obter um exemplo, consulte o método $ * 
no exemplo de código.
?

h
þ
    _    
Construtores e destrutores controlam a criação e a destruição de objetos.
Construtores
Para criar um construtor para uma classe, crie um procedimento chamado Sub °ew em qualquer
lugar na definição da classe. Para criar um construtor com parâmetros, especifique os nomes e
tipos de dados dos argumentos para Sub °ew exatamente como você faria para qualquer outro
procedimento, como no código a seguir:
Visual Basic
?
Copiar Código ?
  'O$( 

 
Os construtores são freqüentemente sobrecarregados, como no código a seguir:
Visual Basic
?
Copiar Código ?
  'O$( 

 .  
  
Quando você define uma classe derivada de outra classe, a primeira linha de um construtor deve
ser uma chamada para o construtor da classe base, a menos que a classe base tenha um
construtor acessível que não recebe parâmetros. Uma chamada para a classe base que contém o
construtor acima, por exemplo, seria *$O
! '
. Caso contrário, *$O
! ' é opcional, e o
tempo de execução Visual Basic chama implicitamente.
Depois que você Gravar o código para chamar o construtor do objeto pai, você pode adicionar
qualquer código de inicialização adicionais para o procedimento de Sub °ew. Sub °ew pode
aceitar argumentos quando chamado como um construtor com parâmetros. Esses parâmetros são
passados do procedimento que está chamando o construtor, por exemplo,  6  
 '
0
þ

8.
Destructors
O código a seguir mostra como usar Dispose e Finalize para liberar recursos em um classe base.

@bservação:

Você deve seguir as diretrizes para implementação IDisposable definir check-out no Como objetos
são criados e destruídos Outros recursos.

Visual Basic
?
Copiar Código ?
 
 %    


!
 þ

O

%  

%


 9 %    '   6  

%
!
   
%
 
O    


 0
  
%

 
6 

 
!
       
%
O$(  
%
 
O 
  * !
%
 0 
 
%
 0 
 
      
 
!
" 
 
      
 
!
" 
* !
%
  0 
" 

7#  - 
%
 %%  -
           
 
!
   %   
%
O$(  
%
 
O !
  
%
 %  

%
 !
%


%
0  
&þ!%%

 )  * 
" 
    
  ) 

%
 

*$O
! ) 
" 
7" # 
" þ


O código a seguir mostra como usar Dispose e Finalize para liberar recursos em um classe base.
Visual Basic
?
Copiar Código ?
 
 %       

!
 þ

  
 
O


 0
  
%

    6 

 
!
    
 
%
O$(  
%
 
O 
  * !
%
 0 
 
%
 0 
 
      
 
!
" 
 
      
 
!
" 
*$O
!
%

%

" 

 0    


    )  
  
%
  ' %  
  
  

     


!
" þ


O código a seguir mostra um padrão de design comum para o destrutor Dispose , usando um
bloco Using e um bloco Try...Finally equivalente.
Visual Basic
?
Copiar Código ?
  
  h

h
  
 '   
 þ  
    6  
 !
" h

" 

  
  0 $
  
    
0 $
   '   
 þ  
    6  
 !
 $
 þ   
%
  '   .     

/ %!
   
 0 
!
%

" 
" 0 $
" 
O próximo exemplo cria um objeto usando um construtor com parâmetros e em seguida, chama
destrutores quando o objeto não for mais necessário.

@bservação:

Embora este exemplo use Collect para demonstrar os métodos que o coletor de lixo chamar Dispose
métodos, em geral, você deve permitir que o ComComumComum Idioma Tempo de execução (CLR)
Gerenciar lixo coleção.

Visual Basic
?
Copiar Código ?
 0
þ
 

 

  
  '  h

     
 
%
 !
h
 6  
 ' 0
þ

:
  
   
   
 6 !
*
O/-0    0
% $     )  - 2
,
- $  
  
- 2 6 !0
% $ 2 -!-
" h


  
  '        
  )  !
 6 ; 
 ' 0
þ

:
6 ;  
&þ!þ 
" 

 þ

O
þ


  '
*
O/-O
þ


 ) '   '!- 
" 

    
  ) 
*
O/-O
þ



 ' '   ) !- 
      % 

 !
*$O
! ) 
" 
" þ



 þ

0
þ


 
O
þ


%  

%


  'O$(   (  
  
 þ  *$O
! '  

   

!
*$O
! '
*
O/-0
þ


 ) '   '!- 
    ) 
   
 !
0
% $(    ( 
" 

  0
% $(  
 
% $ 0
% $ 
 
& 
þ  
%

0
% $  0
% $( 
" & 
 O$(  (  
  
þ  
%

0
% $(   ( 
"  
" % $

    
  ) 
*
O/-0
þ



 ' '   ) !- 

%
 

" 

        
 !
   
 
%
 %  

%
 !
%

*
O/-0
þ



 ' '  
%
!- 

%
0  
&þ!%%

 )  * 
" 

  
%
 
O    

  þ  
%

 * !
%
 0 
0 '  ' 6 
%
"/ % * !& 0$% !0 . ,
-0
6  
  
%
!- 
" 
" 

        
 
%
 ,
O$(  
%
 
O 
*
O/-0
þ



 ' '   
%

  !- 
      % 

 !
  * !
%
 0 
 
%
 0 
 
%
 $    
 
!
" 
 
%
 $    
  !

 þ  *$O
! )  

   

.
   



 %   
%
!
*$O
! ) 
" 
* !
%
  0 
" 

" þ


Quando você executa esse exemplo, a classe 0
þ

chama o construtor Sub °ew da classe


O
þ

. Depois que o construtor da classe base finalizar, a classe 0


þ

executa as
instruções restantes em Sub °ew que inicializam um valor para a propriedade 0
% $.
Quando a classe não for mais necessária, o destrutor Dispose é chamado em 0
þ

.
Este exemplo ilustra o seguinte:
O
þ


 ) '   '!
0
þ


 ) '   '!
0    0
% $     )  $  
  
:!
0
þ



 ' '  
%
!
0
þ



 ' '   
%
  !
O
þ



 ' '   ) !
O
þ


 ) '   '!
0
þ


 ) '   '!
0
þ



 ' '   ) !
0
þ



 ' '   
%
  !
O
þ



 ' '   ) !
?

c     þ "þ #$  


Em geral, os campos e propriedades representam informações sobre um objeto, enquanto os
métodos representam ações que um objeto pode executar.
Os tópicos a seguir descrevem os mecanismos para adicionar propriedades, campos e métodos
classes e lidar com problemas associados com esses itens.
Nesta seção
Como: Adicionar campos e propriedades a uma classe
Fornece informações sobre como declarar campos e propriedades.
Propriedades e Procedimentos de Propriedades
Explica como procedimetos croperty funcionam e como implementar tipos de
propriedades comuns.
Propriedade procedimentos vs. Campos
Ajuda a decidir quando usar campos para armazenar dados em uma classe, e quando as
propriedades são uma melhor opção.
Métodos de classe
Descreve os procedimentos públicos que você adiciona à sua classe.
Propriedades vs. Métodos
Ajuda a decidir se a funcionalidade desejada é melhor implementada como uma
propriedade ou um método.
Propriedades Padrão
Descreve as propriedades usadas quando nenhuma propriedade específica é chamada.
Propriedades e métodos sobrecarregados
Descreve como definir Múltiplo propriedades ou métodos com o mesmo nome, mas
trabalhar com dados diferentes tipos.
Sobrescrevendo propriedades e métodos
Discute redefinir uma propriedade herdada ou método.
?

þ% 
       
Você pode usar Ambos campos e propriedades para armazenar informações em um objeto.
Embora os campos e propriedades sejam quase indistinguíveis da perspectiva do aplicativo cliente,
elas são declaradas diferente dentro de uma classe. Enquanto os campos são variáveis Público
simplesmente que expõe uma classe, o propriedades usar croperty procedimentos para controlar
como os valores serão definidos ou retornados.

cara adicionar um campo a uma classe

å? Declare uma variável Público na definição de classe, como no código a seguir:

Visual Basic

Copiar Código ?
þ

0
þ


 0
  
 
" þ

cara adicionar uma propriedade para uma classe

.? Declare uma variável local dentro da classe para armazenar o valor da propriedade. Esta
etapa é necessária porque propriedades não alocar qualquer armazenamento por conta
própria. Para proteger seus valores contra modificação direta, variáveis usadas para
armazenar valores de propriedade devem ser declarados como crivate.
2.? Iniciar declarações de propriedade com modificadores, como cublic e Shared, conforme
apropriado. Use a palavra-chave croperty declare o nome da propriedade e declare o
tipo de dados que a propriedade armazena e retorna.
3.? Defina Get e Set procedimentos de propriedade dentro da definição de propriedade.
Procedimentos de propriedade Get são usados para retornar o valor de uma propriedade
e são basicamente equivalente para funções na sintaxe. Eles aceitam sem argumentos e
podem ser usados para retornar o valor de particulares variáveis Local declaradas dentro
da classe usada para armazenar o valor da propriedade. Procedimentos de propriedade
Set são usados para definir o valor de uma propriedade; eles têm um parâmetro,
normalmente chamado (  , com o mesmo tipo de dados como a propriedade
propriamente dito. Sempre que o valor da propriedade é alterado, (  é passado para
o procedimento de propriedade Set, onde ele pode ser validado e armazenado em uma
variável local.
4.? Encerrar Get e procedimentos de propriedade de Set com Knd Get e Knd Set instruções
conforme apropriado.
5.? Encerrar o Bloquear de propriedade com uma instrução de Knd croperty.

@bservação:

Se você estiver trabalhando na Visual Studio ambiente de desenvolvimento integrado (IDE), você
pode direcioná-la a fim de criar Vazio Get e os procedimentos de propriedade Set. Type
croperty PropName ãs _ataType (where PropName is the name of your property, and _ataType is a
specific data type, such as Integer), and the property procedures appear in the  .

6.? O exemplo a seguir declara uma propriedade em uma classe:


7.? Visual Basic

Õ? ?
? Copiar Código ?
+<!? þ

0
þ


++!?   , %(  
 
+;!?  % $   
 
+=!? & 
+>!?  #     
         !
+?!? #   , %( 
+:!? " & 
+@!?  O$(  (  
 
+A!?            !
+B!? , %(   ( 
;<!? "  
;+!? " % $
;;!? " þ


23.? Quando você cria uma instância de ThisClass e define o valor da propriedade One, o
procedimento Set da propriedade é chamado e o valor é passado no parâmetro Value, que
é armazenado em um variável local denominado m_PropVal. Quando o valor da
propriedade é recuperado, o procedimento Get da propriedade é chamado como uma
função e retorna o valor armazenado na variável local m_PropVal.

c     c  
 c    
Você pode usar as propriedades e campos para armazenar informações em um objeto. Enquanto
os campos são simplesmente variáveis públicas, propriedades usam procedimentos de propriedade
para controlar como os valores são definidos ou retornados. Procedimentos de propriedades são
blocos de código declarados dentro de definições de propriedade que você pode usar para
executar código quando um valor da propriedade é definido ou recuperado.
Visual Basic tem dois tipos de procedimentos de propriedade: os procedimentos de propriedade
Get para recuperar um valor de propriedade e os procedimentos de propriedade Set para atribuir
um valor a uma propriedade. Por exemplo, uma propriedade que armazena o saldo de uma conta
bancária pode usar código em um procedimento de propriedade Get para postar juros e verificar
taxas de serviço antes de retornar o saldo disponível. Você poderia então utilizar um procedimento
de propriedade Set para validar o saldo e impedir que ele seja atualizado incorretamente.
Resumindo, procedimento de propriedade permitem a um objeto proteger e validar seus próprios
dados.
O fragmento de código a seguir compara como campos e propriedades validam valores.
Visual Basic
?
Copiar Código ?
    0
 
 % 

 

 .  
/ % .    $    

     % % $ 


  +<!
  'þ


 ' 0
þ



 0
     !

 3 
  
 
      !
 'þ

!0
   =:
 3 %  =:!
*
O/-0
   - 2  'þ

!0
 

 0  % 
           +< '

 $ !
 'þ

!0
% $  =:
 0  /
    ' %       < 
 !
*
O/-0
% $  - 2  'þ

!0
% $
" 

 þ

0
þ


    !
 0
  
 
   
  % $   % 
!
  
% $(  
   <
   % % $!
 % $ 0
% $ 
 
& 
#   
% $( 
" & 
 O$(  (  
  
 $ '   %    


  +<!
 (  C +< 0  
% $(   ( 
"  
" % $
" þ


O procedimento 0
 
 % 
cria uma instância da classe e define e recupera os
valores dos campos e propriedades. Por questão de neste exemplo, presume-se que os valores
somente válidos são números Menoses do que 0. Porque existe nenhuma maneira para validar os
valores atribuídos aos campos, Configuração o campo valor 36 é permitido. A propriedade, no
entanto, somente executa Atribuição para números menores do que 0, portanto, a tentativa para
defini-la para 36 é ignorada.
Propriedades somente leitura e somente gravação
A maioria das propriedades possuem os procedimentos de propriedade Get e Set , que você pode
usar para ler e modificar o valor armazenado. No entanto, você pode usar os modificadores
Read@nly ou Write@nly para evitar que propriedades sejam modificadas ou lidas.
Propriedades somente leitura não podem ter procedimento de propriedade Set; tais propriedades
são úteis para itens que você deseja expor, mas não permite que sejam modificados. Por
exemplo, você pode usar uma propriedade somente leitura para fornecer a velocidade do
processador de um computador.
Propriedades somente gravação não podem ter procedimentos de propriedade Get e são úteis
para configurar objetos com dados que não devem ou não podem ser armazenados no objeto. Por
exemplo, uma propriedade somente gravação pode ser usada para pegar uma senha e alterar o
estado do objeto sem armazenar a senha.

@bservação:

Versões anteriores do Visual Basic suporte Let propriedade procedimentos para uso ao atribuir a
objetos em Propriedades. Visual Basic elimina a necessidade para Let procedimentos de propriedade
porque o objeto atribuição é tratada como qualquer outro tipo de atribuição.

c      
&þ
Propriedades e campos Ambos armazenar e recuperar informações em um objeto. Sua
semelhança pode dificultar a determinar qual é a melhor opção programação em um
maiúscminúsc de determinado.
Use os procedimentos de propriedade quando:
å? Você precisa controlar quando e como um valor é definido ou recuperado.
å? A propriedade tem um conjunto bem definido de valores que precisam ser validados.
å? Configuração o valor causa alguma Alterar perceptível no estado do objeto, como uma
propriedade 
(
 .

å? Configuração a propriedade faz com que as alterações Outro variáveis internas ou para os
valores das Outro propriedades.
å? Um conjunto de etapas deve ser executado antes que a propriedade pode ser definida ou
recuperada.
Use campos quando:
å? O valor é de um tipo self-validating. Por exemplo, um erro ou conversão de dados
Automático ocorre se um valor Outro que True ou False é atribuído a uma variável
Boolean.
å? Qualquer valor no intervalo de suporte para o tipo de dados é válido. Isso é verdadeiro de
muitos propriedades do tipo Single ou Double.
å? A propriedade é um tipo de dados String, e não há nenhuma restrição no tamanho ou
valor da Cadeia de Caracteres de.
?

#$    
Os métodos de uma classe são somente procedimentos Sub ou Function declarados dentro da
classe. Por exemplo, para criar um método 3 ' de uma classe denominada , você
poderia adicionar essa função cublic ao módulo de classe:
Visual Basic
?
Copiar Código ?
  3 '  O$(   
  . ,
O$(  0 
þ 
O$  

     %    ' ' .
    
  .
   
     !
" 
Métodos compartilhados
Métodos compartilhados podem ser chamados diretamente da classe sem primeiro criar uma
instância da classe. Métodos compartilhados são úteis quando você não deseja um método a ser
associado uma instância específica de uma classe. Métodos compartilhados não podem ser
declarados usando os modificadores @verridable, °ot@verridable, ou Must@verride. Métodos
declarados em módulos são implicitamente compartilhados e não é possível usar o modificador
Shared explicitamente.
Kxemplo
Visual Basic
?
Copiar Código ?
þ

 þ


    
*
O/-   !- 
" 
" þ



 0

 þ    !
 þ

! 
" 
Protegendo detalhes de implementação
Procedimentos utilitários que são usados internamente por uma classe devem ser declarados como
crivate,crotected, ou Friend. Restringir a acessibilidade de tais métodos protege os
desenvolvedores que usam os objetos, permitindo que seja possível fazer alterações futuras sem
afetar o código que utiliza os objetos.
Proteger os detalhes da implementação de um objeto é outro aspecto do e capsulame to .
Encapsulamento permite que você melhorar o desempenho dos métodos, ou alterar
completamente a maneira como o método é implementado, sem ter de alterar o código que utiliza
o método.
?

c    &#$  
Propriedades e métodos são similares no fato de que ambos são implementados como
procedimentos que aceitam argumentos. Em geral, propriedades armazenam dados para um
objeto, o métodos são ações as quais pode ser requisitado a um objeto que realize. Algumas
características de objeto são obviamente propriedades, como   , e algumas são obviamente
métodos, como * e '. Em outros casos, não é óbvio quais membros de classe devam ser
propriedades e quais devam ser métodos. Por exemplo, o método   de uma classe de coleção
armazena e recupera dados e pode ser implementado como uma propriedade indexada. Por outro
lado, é também razoável implementar   como um método.
Propriedade sintaxe vs.Sintaxe do método
Um modo de se decidir como implementar um membro de classe é considerar como você deseja
que ele seja usado. Embora a sintaxe para recuperar informações de uma propriedade
parametrizada seja idêntica à sintaxe usada com um método implementado como uma função, a
sintaxe para modificar tal valor é ligeiramente diferente. Por exemplo, se você implementar o
membro de uma classe como uma propriedade, a sintaxe a seguir descreve como ele deve ser
usado:
This@bject.ThisProperty(I dex) = NewValue
Se você implementar o membro de classe como um método, então o valor que está sendo
modificado precisa ser um argumento. O fragmento de código a seguir descreve o uso equivalente
de sintaxe:
This@bject.ThisProperty(I dex, NewValue)
Mensagens de erro
Outro fator a se considerar quando se escolhe como implementar um membro de classe é que tipo
de mensagens será gerado quando sua classe for usada incorretamente. Se alguém tenta
acidentalmente designar um valor a uma propriedade somente-leitura, uma mensagem de erro é
retornada diferente da resposta para uma chamada similar a um método. Membros de classe
implementados corretamente retornam mensagens de erro que são fáceis de se interpretar.
?

c    c 
Uma propriedade que aceita argumentos pode ser declarada como a propriedade padrão para uma
classe. Uma propriedade padrão é a propriedade que o Visual Basic usará quando nenhuma
propriedade específica for denominada para um objeto. Propriedades padrão são úteis porque elas
permitem que você faça seu código-fonte mais compacto, omitindo nomes de propriedades usados
com freqüência.
Os melhores candidatos para propriedades padrão são as propriedades que aceitam parâmetros e
que você acha que serão usadas com mais freqüência. Por exemplo, a propriedade   é uma
boa opção para a propriedade padrão de uma classe coleção porque é usada com freqüência.
As seguintes regras se aplicam às propriedades padrão:
å? Um tipo pode ter apenas uma propriedade padrão, incluindo propriedades herdadas de
um classe base. Há uma exceção a essa regra. Uma propriedade padrão definida em um
classe base pode ser sombreada por outra propriedade padrão em um classe derivada.
å? Se uma propriedade padrão de uma classe base é sombreada por uma propriedade que
não seja padrão, em um classe derivada, a propriedade padrão ainda será acessível
usando a sintaxe da propriedade padrão.
å? Uma propriedade padrão não pode ser Shared ou crivate.
å? Se uma propriedade sobrecarregada for uma propriedade padrão, todas as propriedades
padrão como o mesmo nome também deverão especificar Default.
å? As propriedades padrão devem aceitar pelo menos um argumento.
Exemplo
O exemplo a seguir declara uma propriedade que contém uma matriz de seqüências de caracteres
como a propriedade padrão para uma classe:
Visual Basic
?
Copiar Código ?
þ

þ

;
        
  % % $   !
  % $( 

 
      % % $!
   % $ %+O$(   / 
   
 
& 
#   % $( 
 /
" & 
 O$(  (  
 
 % $( 

 0 
 0 $  
 '  
 

!
#  % $( 
<
"

 # D 
  $     '   !
# 
 % $( 
 hO % $( 
 E
+
" 
% $( 
 /  ( 
"  
" % $
" þ


Acessando Propriedades Padrão
Você pode acessar as propriedades padrão usando a sintaxe abreviada. Por exemplo, o fragmento
de código a seguir usa o padrão e a sintaxe da propriedade padrão:
Visual Basic
?
Copiar Código ?
 þ 
 ' þ

;
 0 
 ' 
  

% % $ 
   ' $!

 % $

 !
þ! %+<  -(   -
 % $    !
*
O/þ! %+<

 0 ' ' 
  
  % % $
$ /!

 % $

 !
þ+  -(  0'-
 % $    !
*
O/þ+
?

c     $     


Sobrecarga é a criação de mais de um procedimento, construtor de instância ou propriedade em
uma classe com o mesmo nome mas tipos de argumento diferente.
Sobrecarga de uso
Sobrecarga é especialmente útil quando o seu modelo de objeto determina que você utilizar
nomes idênticos para procedimentos que operam em diferentes tipos de dados. Por exemplo, uma
classe que pode exibir vários tipos de dados diferentes poderia ter procedimentos 
% $ que
esta aparência:
Visual Basic
?
Copiar Código ?
  
 
% $O$(   þ 
þ 
     
% $
þ   !
" 
  
 
% $O$(     
  
     
% $
    !
" 
  
 
% $O$(    
 
     
% $
   !
" 
Sem a sobrecarga, você precisará criar nomes distintos para cada procedimento, mesmo que eles
fazem o mesmo, conforme mostrado Avançar:
Visual Basic
?
Copiar Código ?
 
% $þ  O$(   þ 
þ 
     
% $
þ   !
" 
 
% $ O$(     
  
     
% $
    !
" 
 
% $  O$(    
 
     
% $
   !
" 
Sobrecarga torna mais fácil usar propriedades ou métodos porque ele fornece uma variedade de
tipos de dados que podem ser usados. Por exemplo, o método sobrecarregado 
% $ discutido
anteriormente pode ser chamado com qualquer uma das linhas de código a seguir:
Visual Basic
?
Copiar Código ?
 þ  
% $ '    $% þ !

% $-B-
 þ  
% $ '    $%   !

% $B
 þ  
% $ '    $%  !

% $B!B#
Em tempo de execução, Visual Basic chama o procedimento correto com base nos tipos dados dos
parâmetros que você especificar.

@bservação:

Sobrecarga, substituição e sombreamento são conceitos similares que podem ser facilmente
confundidos. Para obter mais informações, consulte Introdução a Objetos no Visual Basic.

Sobrecarga de regras
Você criar um membro sobrecarregado para uma classe adicionando dois ou mais propriedades ou
métodos com o mesmo nome. Exceto para membros derivados sobrecarregados, cada membro
sobrecarregado deve ter listas de parâmetros diferentes, e os itens a seguir não podem ser usados
como um diferenciador recurso quando a sobrecarga de uma propriedade ou um procedimento:
å? Modificadores, como ByÔal ou ByRef, que Aplicar para um membro ou parâmetros de
membro.
å? Nomes de parâmetros
å? Tipos de procedimentos de retorno
A palavra-chave @verloads é opcional durante sobrecarga, mas se nenhum membro
sobrecarregado usa a palavra-chave @verloads, em seguida, Tudo outros membros
sobrecarregados com o mesmo nome devem também especificar esta palavra-chave.
Classes derivadas podem sobrecarregar membros herdados com membros que possuem
parâmetros idênticos e tipos de parâmetro, um processo conhecido como sombreame to por ome e
assi atura. Se a palavra-chave @verloads é usada quando sombreamento por nome e assinatura,
implementação da classe derivada de membro será ser usada em vez da implementação da classe
base e Tudo as Outro sobrecargas para esse membro estarão disponíveis para instâncias da classe
derivada.
Se a palavra-chave @verloads for omitida quando um membro herdado com um membro que
tenha parâmetros idênticos e tipos de parâmetro de sobrecarga, em seguida, a sobrecarga será
denominado sombreame to pelo ome. Sombreamento pelo nome, substitui a implementação
herdada de um membro, e torna Tudo as Outro sobrecargas indisponível para instâncias de classe
derivada e seus decedents.
O @verloads e Shadows modificadores não podem Ambos ser usado com a mesma propriedade
ou método.
Kxemplo
O exemplo a seguir cria métodos sobrecarregados que aceitar um String ou representação de
Decimal de um valor em moeda corrente e retornar uma Cadeia de Caracteres contendo o
imposto sobre vendas.

cara usar esse exemplo para criar um método sobrecarregado

.? Abrir um novo projeto e adicionar uma classe chamada 0 /þ

.
2.? Adicione o seguinte código à classe 0 /þ

Visual Basic

Copiar Código ?
 þ

0 /þ


  
 0 / O$(     
  . ,
O$(  0 /#  
  
 
0 /  -  
  ! 0 / 
F- 2 ,
þ    G 0 /#  
" 

  
 0 / O$( 
  
 . ,
O$(  0 /#  
  
 
0 /  -  
 ! 0 / 
F- 2 ,
þ þ 
   G 0 /#  
" 
" þ


3.? Adicionar o procedimento a seguir ao seu formulário.

Visual Basic

Copiar Código ?
 '0 /
 AH  /  !
þ
 0 /#  
  <!<A
 F:>!<<  

 !

  
   -:>!<<-
 F:>!<<  

  !
    
    :>
 


 ' 0 /þ


þ  
   ' '   
   !
*
O/ 

!0 /
  . 0 /#  
*
O/ 

!0 /   . 0 /#  
" 
4.? Adicionar um botão para seu formulário e a chamada a procedimento '0 / do evento
O+,þ do botão.
5.? Executar o projeto e clique no botão no formulário para testar o procedimento
sobrecarregado '0 /.
Em tempo de execução, o compilador escolhe a função sobrecarregada apropriada que
corresponde aos parâmetros sendo usados. Quando você Clique o botão, o método
sobrecarregado é chamado pela primeira vez com um parâmetro de  que é uma Cadeia de
Caracteres e a mensagem, "preço é uma Cadeia de Caracteres. Imposto é $ 5.2" é exibida.
0 / é chamado com um valor de Decimal a segundo tempo e a mensagem, "preço é um
decimal. Imposto é $ 5.2" é exibida.
?

O  
     $  
Um classe derivada herda as propriedades e métodos definidos no sua classe base. Isso é útil
porque você pode reutilizar esses itens quando apropriado para a classe derivada. Se a
propriedade ou método no classe base é marcado com a palavra-chave @verridable, você pode
definir uma nova implementação para o membro a classe derivada. Use a palavra-chave
@verrides para sombrear o membro redefinindo-o na classe derivada. Isso é útil quando você não
pode usar o membro da forma que está.
Na prática, membros substituídos são geralmente usados para implementar polimorfismo. Para
obter mais informações, consulte Polimorfismo.
As seguintes regras se aplicam a métodos substituintes.
å? Você pode substituir somente os membros que são marcados com a palavra-chave
@verridable em suas classe base.
å? Por padrão, propriedades e métodos são °ot@verridable.
å? Membros substituídos devem ter os mesmos argumentos como os membros herdados a
partir de classe base.
å? A nova implementação de um membro pode chamar a implementação original na classe
pai especificando MyBase antes do nome do método.

@bservação:

Sobrecarga, substituição e sombra são conceitos semelhantes que podem ser fáceis de confundir.
Para obter mais informações, consulte Introdução a Objetos no Visual Basic.

Exemplo
Suponha que você queira definir classes para tratar a folha de pagamento. Você pode definir uma
classe $  genérica que contém um método # $  que calcula da folha de pagamento
de uma semana típica. Você poderia então utilizar $  como uma classe base de uma classe
O
$  mais especializada, que pode ser usada ao distribuir bônus aos funcionários.
A classe O
$  pode herdar e substituir, o método $"%$ definido na classe base
$ .
O exemplo a seguir define uma classe base, $ . e um classe derivada, O
$ , que
substitui um método $"%$ herdado. Um procedimento, # $ , cria e, em seguida,
passa um objeto $  e um objeto O
$  para uma função, $,que executa o
método $"%$ dos dois objetos.
Visual Basic
?
Copiar Código ?
þ
 O
#  
    +!>?
þ
 $#  
    +>!@?

þ

$ 
    $"%$  ,
O$(  
3   
  . ,
O$(  $#  
   ,

  

$"%$  
3   G $# 
" 
" þ



þ

O
$ 
 
$ 
 
 $"%$  ,
O$(  
3   
  . ,
O$(  $#  
   ,

  

 0 '   
        

 

.     
      !
$"%$  *$O
! $"%$  
3  . $#   G
O
# 
" 
" þ



 # $ 
 $   
$    ' $ 
 O
$   
 ' O
$ 
 
3   
    ><

*
O/-   % $ 
1 - 2 ,
$  ! $"%$ 
3  . $#  
*
O/- $ ' 

1 - 2 ,
O
$  ! $"%$ 
3  . $#  
" 
?

þ   
Em termos gerais, uma coleão é um objeto usado para agrupar e gerenciar objetos relacionados.
Por exemplo, todo Form possui uma coleção de controles. (Você pode acessar essa coleção
através do formulário de prorpiedade Controls.) Essa coleção é um objeto que representa todos os
controles naquele formulário formulário. Ele permite que você recupere um controle na coleção
por seu índice, percorra os elementos da coleção usando um For each... Avançar instrução (Visual
Basic) .
No entanto, existem vários tipos de coleções, e diferem uns dos outros de várias maneiras.
Diferentes tipos das coleções
Visual Basic também fornece uma classe þollection, com o qual você pode definir e criar suas
próprias coleções. Como uma coleção Controls do formulário, a classe þollection também fornece
a funcionalidade interna para repetir elementos usando For Kach... °ext e para recuperar os
elementos pelo índice. For more information, see Objetos de Coleção (Visual Basic).
No entanto, os dois tipos de coleções não interagem uns com os outros. Por exemplo, o código a
seguir gera um erro do compilador.
  þ 

þ 
 0 '    
þ* I"# "###!
 þ 
 * !þ 

As coleções são incompatíveis porque a coleção Controls é uma coleção .NET Framework,
enquanto a variável  þ 
é um Visual Basic þollection. Os dois tipos de coleções são
implementados a partir de classes diferentes. Seus métodos são semelhantes, mas não idênticos,
e seus esquemas indexação são diferentes.
Coleções de base zero e base um.
Uma coleção pode ser com base ula ou com base em um, dependendo no que está o seu índice
inicial. A significa anterior que o índice do primeiro item na coleção é 0 e os meios última que ele é
. An example of a zero-based collection is the .NET Framework Controls collection, discussed
earlier on this page. O objeto Visual Basic þollection é um exemplo de uma coleção com base em
um.
Coleções com base em um podem ser mais intuitivas para Visual Basic Usuários, porque o índice
varia de  ao valor da Propriedades de Contagem ( Objeto de coleção)., que retorna o número de
itens em uma coleção. O índice de uma coleção com base zero, por outro lado, varia de 0 por
meio de um menor que o valor da propriedade þount. Isso pode ser apropriado quando os valores
de índice são deslocamentos de um valor de base ou correspondem aos membros de uma
enumeração baseada em zero.
Coleções .NET Framework são baseadas em zero com o objetivo de padronização. A classe Visual
Basic þollection é baseada em um para fins de compatibilidade com versões anteriores.
Índices e valores chave
As instâncias da classe Visual Basic þollection permitem que você acesse um item usando um
índice numérico ou uma String chave. Você pode adicionar itens aos objetos Visual Basic
þollection especificando ou não uma chave. Se você adicionar um item sem uma chave, você
deve usar seu índice numérico para acessá-lo.
Por outro lado, coleções como System.Collections..::.ArrayList permitem apenas um índice
numérico. Não é possível associar as chaves com os elementos dessas coleções, a menos que você
crie seu próprio mapeamento com base, por exemplo, em uma matriz String pressionando as
teclas.
Adicionando e removendo itens
Coleções também diferem em se ou não você pode adicionar itens a elas e em caso afirmativo,
como esses itens são adicionados. Como o objeto Visual Basic þollection é uma ferramenta de
programação de uso geral, é mais flexível do que algumas outras coleções. Ele tem um Adicionar
método (coleção Objeto) para colocar Itens em coleção e um Método Remove (Objeto Coleção)
para retirar itens fora.
Certas coleções especializadas, por outro lado, não permitem que você adicione ou remova
elementos usando código. Por exemplo, a propriedade CheckedListBox..::.CheckedItems retorna
uma coleção de referências a itens pelo índice, mas seu código não pode adicionar ou remover
itens da coleção. Somente o usuário pode fazer isso ² ao marcar ou desmarcar a caixa apropriada
na interface do usuário. Assim não há nenhum ãdd ou método Remove para esta coleção.
?

K


Um evento é uma mensagem enviada por um objeto anunciando que algo ocorreu. Eventos são
implementados utilizando delegados, uma forma de ponteiro de função orientado a objeto, que
permite que uma função seja invocada indiretamente por meio de uma referência à função.
Nesta seção
Eventos e manipuladores de eventos
Proporciona uma visão geral de eventos, manipuladores de evento, e da terminologia
associada.
WithEvents e Cláusula Handles
Demonstra como usar a palavra-chave WithKvents e a cláusula Handles para associar
um evento com um manipulador de evento.
AddHandler e RemoveHandler
Demonstra como usar as declarações ãddHandler e RemoveHandler para associar
dinamicamente um evento com um manipulador de evento.
Como: Adicionar eventos a uma classe
Descreve o processo de definição de eventos.
Como: Criar manipuladores de eventos no Editor de código do Visual Basic
Fornece instruções para uso do Visual Basic Code Editor para escrever código para
responder a eventos.
Como: Elevar um evento (Visual Basic)
Demonstra como definir um evento e usa a instrução RaiseKvent para fazer com que o
evento ocorra
Como: Criar um evento e o manipulador (Visual Basic)
Demonstra como definir um evento e um manipulador de eventos, e usa a instrução
ãddHandler para associá-los.
Como: Gravar Eventos manipuladores
Demonstra como escrever manipuladores de evento usando a cláusula Handles ou a
declaração ãddHandler.
Como: Manipular eventos no Visual Basic
Define uma classe que lança um evento quando o método þauseKvent é chamado.
Demonstra Passo a passo: Declarando e disparando eventos
Fornece uma descrição passo a passo de como declare e disparar eventos de uma classe.
Demonstra Passo a passo: Tratamento de eventos
Demonstra como escrever um procedimento de manipulador de eventos.
Como: declare eventos que evitar o bloqueio
Demonstra como definir um evento personalizado que permite que seus manipuladores de
evento sejam chamados assincronamente.
Como: declare eventos que conservar o uso de memória
Demonstra como definir um evento personalizado que utiliza a memória somente quando
o evento é manipulado.
Solução de problemas herdados manipuladores de eventos no Visual Basic
Lista problemas comuns que surgem com manipuladores evento nos componentes
herdados
?

K
 
    

Enquanto você pode visualizar um projeto Visual Studio como uma série de procedimentos que
executam em uma seqüência, na realidade, a maioria dos programas são orientados a eventos ²
o que significa que o fluxo de execução é determinado pelas externas ocorrências chamadas
eve tos.
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. Eventos também permitem que tarefas
separadas se comuniquem. Digamos que, por exemplo, seu aplicativo execute uma tarefa de
classificação separadamente do aplicativo principal. Se um usuário cancelar a classificação, o
aplicativo pode enviar um evento Cancelar instruindo o processo de classificação para parar.
Termos e Conceitos de Evento
Esta seção descreve os termos e conceitos usados com eventos em Visual Basic.
Declarando Kventos
Você declara eventos dentro de classes, estruturas, módulos e interfaces usando a palavra-chave
Kvent, como no exemplo a seguir:
Visual Basic
?
Copiar Código ?
"  " O$(  "  
  
Disparando Kventos
Um evento é como uma mensagem anunciando que algo importante ocorreu. O ato de transmitir a
mensagem é chamado _isparo de evento. Em Visual Basic,você dispara eventos com a instrução
RaiseKvent, como no exemplo a seguir:
Visual Basic
?
Copiar Código ?
# 
"  " "  
Eventos devem ser disparados dentro do escopo da classe, módulo ou estrutura onde eles são
declarados. Por exemplo, um classe derivada não pode disparar eventos herdados de um classe
base.
Remetentes de Kvento
Qualquer objeto capaz de dispara um evento é um ·emete te de Kve to,também conhecido como
uma fo te de eve to. Formulários, controles e objetos definidos pelo usuário são exemplos de
remetentes de eventos.
Manipuladores de Kventos
Ma ipuladores de eve tos 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. Entretanto, você não pode usar uma função como um
manipulador de eventos, porque ela não retorna um valor para a fonte de eventos.
Visual Basic usa uma convenção de nomeclatura 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 þlick de um botão chamado + será nomeado  +,þ.

@bservação:

Recomendamos que você use esta convenção de nomeclatura quando definir manipuladores de
eventos para seus próprios eventos, mas ela não é necessário; você pode usar qualquer nome de
sub-rotina válido.

ãssociando Kventos Manipuladores de Kventos


Antes uma manipulador de eventos se tornar útil, você deve primeiro associá-lo com um evento
usando uma instrução Handles ou ãddHandler.
A instrução WithKvents e a cláusula Handles fornecem uma maneira declarativa de especificar
os manipuladores de eventos. Eventos disparados por um objeto declarado com WithKvents
podem ser tratados por qualquer sub-rotina com uma cláusula Handles que nomeie este evento.
Embora a cláusula Handles seja a maneira padrão de associar um manipulador de eventos com
um evento, é limitada ao associar eventos com manipuladores de eventos em tempo de
compilação.
As instruções ãddHandler e RemoveHandler são mais flexíveis do que a cláusula Handles. Eles
permitem que você dinamicamente conecte e desconecte os eventos de um ou mais
manipuladores de eventos em tempo de execução, e não requerem que você declare variáveis de
objeto usando WithKvents. No entanto, há algumas restrições ao usar WithKvents. Para obter
mais informações, consulte WithEvents e Cláusula Handles.
Em alguns casos, como com os eventos associados com os formulários ou controles, Visual Basic
automaticamente extingue um manipulador de eventos em branco e o associa com um evento.
Por exemplo, quando você clica duas vezes em um botão de comando em um formulário no modo
de design, Visual Basic cria um manipulador de eventos em branco e uma variável WithKvents
para o botão de comando, como no código a seguir:
Visual Basic
?
Copiar Código ?
   3" 
O+ 
$
 !3'
! 
!O
    O+,þ O$( 
 
$
 !6 . ,
O$(  
$
 !"  
  
O+!þ
" 
?

[ 'K
 þ(
 
A instrução WithKvents e a cláusula Handles fornecem uma maneira declarativa de especificar
os manipuladores de eventos. Um evento gerado por um objeto declarado com a palavra-chave
WithKvents pode ser tratado por qualquer procedimento com uma instrução Handles para esse
evento, conforme mostrado no exemplo o seguir:
Visual Basic
?
Copiar Código ?
   3" 
   !
 3" 
"þ


 ' " þ



 þ       

 6 
 
!
 0
" 

"þ

!# 
" 

" 

           
%  
!
 "þ

,"     


"þ

!8" . "þ

!J" 
*
O/-#    " !- 
" 

þ

" þ


 "  8" 
 "  J" 
 # 
" 


  
!
 # 
" 

# 
"  8" 
# 
"  J" 
" 
" þ


A instrução WithKvents 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 de codificar, ler e
depurar a manipulação de eventos. No entanto, esteja ciente das seguintes limitações sobre o uso
de variáveis WithKvents:
å? Não é possível usar uma variável WithKvents como um variável de objeto. Ou seja, você
não pode declará-la como @bject ² você deve especificar o nome da classe quando você
declarar a variável.
å? Como eventos compartilhados não são ligados a instâncias de classe, você não pode usar
WithKvents para declarativamente manipular eventos compartilhados. Da mesma forma,
você não pode usar WithKvents ou Handles para manipular eventos de um Structure.
Em ambos os casos, você pode usar a instrução ãddHandler para manipular esses
eventos.
å? Não é possível criar matrizes de WithKvents variáveis.
å? WithKvents variáveis permitem a um único manipulador de eventos manipular um ou
mais tipo de evento, ou um ou mais manipuladores de eventos para manipular o mesmo
tipo de evento.
?

% (
  )  (
 
A instrução ãddHandler é semelhante à cláusula Handles já que ambas permitem que você
especifique um manipulador de eventos. Entretanto, ãddHandler usado com RemoveHandler,
fornece flexibilidade maior do que a cláusula Handles, permitindo que você adicione, remova e
altere dinamicamente o manipulador de evento associado com um evento. Se você quiser
manipular eventos compartilhados ou eventos de uma estrutura, você deve usar ãddHandler.
ãddHandler leva dois argumentos: o nome de um evento de um remetente de evento, como um
Controlarar e uma expressão que avalia a um delegate. Você não precisa especificar
explicitamente a classe representante ao usar ãddHandler, desde que a declaração ãddress@f
sempre retorne uma referência ao representante. O exemplo a seguir associa um manipulador de
evento com um evento gerado por um objeto.
Visual Basic
?
Copiar Código ?
  6!8" . 

 * !8"  


RemoveHandler, que disconecta um evento de um manipulador de eventos, usa a mesma
sintaxe de ãddHandler. Por exemplo:
Visual Basic
?
Copiar Código ?
#    6!8" . 

 * !8"  


?

þ% 
  
 
Adicionar eventos a uma classe, declarando-os com a instrução Kvents. A declaração inclui o
nome do evento e os argumentos que ele usa.
Adicionar um evento a uma classe Especifica que um objeto desta classe pode disparar um evento
específico. Para fazer com que um evento ocorra, você deve usar a instrução RaiseKvent. Você
pode usar a palavra-chave Handles ou a instrução de ãddHandler para associar o evento com
um procedimento de manipulador de eventos. Eventos devem ser aumentados dentro do escopo
onde elas são declaradas. Por exemplo, um classe derivada não pode disparar eventos herdados
de um classe base.

@bservação:

Eventos não podem ter valores de retorno, argumentos opcionais, ou Argumentos de caramãrray.

cara adicionar um evento a uma classe

å? Na seção Declarações do módulo classe que define a classe, use instrução de Kvent
declare o evento quaisquer argumentos você deseja que ele tenha. Por exemplo:

Visual Basic

Copiar Código ?
 "     O$(    
 . ,
O$# þ   
O 
þþ  
    

K    
  
O     do Visual Basic oferece uma maneira fácil para criar manipuladores de eventos
para o Formulários do Windows. Embora ele não permite conectar vários eventos a um único
manipulador de eventos (consulte Como: Conectar-se Múltiplo eventos a um Simples manipulador
de eventos do Windows Forms), ele fornece uma maneira rápida e fácil para criar manipuladores
de evento enquanto estiver trabalhando no código do formulário sem exibir o formulário na
Windows Forms Designer.

cara criar um manipulador de eventos usando o Ôisual Basic þode Kditor

.? Na caixa    ,da lista °   , escolha o formulário ou controle para
que você deseja criar um manipulador de eventos.
2.? Da lista °  $ na parte superior do    , escolha o evento para que
você deseja criar um manipulador de eventos.
Visual Basic cria uma manipulador de eventos e o adiciona à classe do formulário.
?

þK   
 !
Este exemplo define um evento (0 "/% ) e utiliza a instrução RaiseKvent para fazer com
que o evento ocorra.
Exemplo
Visual Basic
?
Copiar Código ?
 "  0 "/%  O$(   

 
  # 
0 "/% " 
# 
"  0 "/%  -J  
 - 
" 
Este exemplo de código também está disponível como um trecho de código IntelliSense. No
selecionador de trechos de código, ele está localizado em Ô " #
 . Para obter mais
informações, consulte HOW TO: Trechos Inserir em seu código (Visual Basic).
Compilando o código
Este exemplo requer:
å? Acesso aos membros do espaço de nomes System. Adicione uma declaração Imports se
você não está qualificando completamente os nomes de membros em seu código. Para
obter mais informações, consulte Declaração Imports (Tipo e Namespace .NET).
å? A instrução Kvent estar no nível de classe e não dentro de qualquer procedimento.
å? A instrução RaiseKvent pode estar dentro algum procedimento no seu aplicativo.
?

þþ   
 
   !
Este exemplo define um evento, 0 "/%  e um manipulador de eventos,
  0 "/%  e usa a instrução ãddHandler para associá-los.
Exemplo
Visual Basic
?
Copiar Código ?
 "  0 "/%  O$(   

 
    0 "/%  O$(   

 
   
  % 

  '   


/% !
*
O/-  0 "/%     0 "/%   - 2 ,
þ I 2 - 
 - 2  

" 
   h%"   
  0 "/% . 

   0 "/% 


" 
Compilando o código
Este exemplo requer:
å? Acesso aos membros do espaço de nomes System. Adicione uma declaração Imports se
você não está qualificando completamente os nomes de membros em seu código. Para
obter mais informações, consulte Declaração Imports (Tipo e Namespace .NET).
å? A instrução Kvent estar no nível de classe e não dentro de qualquer procedimento.
å? A instrução Kvent e ambos os procedimentos (  0 "/%  e
 h%"   ) a serem definidos na mesma classe ou módulo. Caso contrário, a
instrução ãddHandler deve qualificar o evento e o manipulador para os objetos na qual
eles são definidos.
?

þ*  K



  
O modo como você constrói um manipulador de eventos depende de como você deseja associá-lo
com eventos. A maneira padrão para criar um manipulador de eventos é usar a palavra-chave
Handles com a palavra-chave WithKvents. Visual Basic fornece um segundo forma de manipular
eventos: a instrução ãddHandler. ãddHandler e RemoveHandler permitem que você
dinamicamente Iniciar e parada para um evento específico de manipulação de eventos. Você pode
usar qualquer uma das abordagens, mas não deve usar ambas WithKvents e ãddHandler com o
mesmo evento.
Manipulando Eventos usando WithEvents
A palavra chave WithKvents permite criar variáveis de classe ou objeto de nivel módulo que
podem ser usadas com a cláusula Handles em manipuladores de eventos.

cara manipular eventos usando WithKvents e a cláusula Handles

.? Crie uma classe simples que contém um evento

Visual Basic

Copiar Código ?
þ

þ

+
 "  " O$(  "  
  
" þ


2.? Na classe ou módulo que manipulará o evento, use a palavra chave WithKvents para
declarar uma variável objeto para a fonte de seus eventos, como no exemplo seguinte:

Visual Basic

Copiar Código ?
 3" 
þ


 
þ

+
3.? No Editor e Código, escolha a variável WithKvents que você acabou de declarar através
da lista °  na esquerda.
4.? Escolha o evento que deve ser manipulado da lista ° $ na direita. O Editor de
Código cria um procedimento manipulador de eventos vazio com uma cláusula Handles.

@bservação:

Esse passo é opcional. Você pode criar o procedimento de manipulador de eventos manualmente
desde que o procedimento que você criar uma sub-rotina, tem a lista de argumento correto para
coincidir com o evento que está sendo tratado e tem um Cláusula de Handles que especifica o
evento sendo manipulado.

5.? Adicione o código manipulador de eventos para o procedimento manipulador de eventos


usando os argumentos fornecidos. O código a seguir é um exemplo:

Visual Basic

Copiar Código ?
  þ


,"  O$(  "  
   ,
 
þ


!" 
*
O/-#       1 - 2 þ "  
" 
Manipulando Eventos usando AddHandler
Você pode usar a declaração ãddHandler para dinamicamente conectar eventos com
procedimentos manipuladores de eventos.

cara manipular eventos usando ãddHandkler

.? Crie uma subrotina para lidar com o evento, como no seguinte exemplo:

Visual Basic

Copiar Código ?
  "  O$(  "  
  
*
O/-#       - 2 þ "  
" 
2.? Declare uma variável objeto da classe que é a fonte dos eventos que você deseja
manipular. Diferentemente da variável WithKvents, isso pode ser uma variável local num
procedimento. Por exemplo:

Visual Basic

Copiar Código ?
  0
  
 þ 
 ' þ

+
" 
3.? Usando a declaração ãddHandlerpara especificar o nome do criador do evento, e a
declaração ãddress@f para fornecer o nome de seu manipulador de evento. Por exemplo,
adicione o seguinte código ao final da subrotina 0
  :

Visual Basic

Copiar Código ?
  þ!" . 

 " 
Qualquer procedimento pode servir como um manipulador de eventos desde que ele
suporte os argumentos corretos para o eventos sendo manipulados.
Usando RemoveHandler para parar de Manipular Eventos
Você pode usar a declaração RemoveHandler para dinamicamente desconectar eventos dos
procedimentos manipuladores de eventos.

cara parar manipulação de eventos usando RemoveHandler

å? Use a declaração RemoveHandler para especificar o nome do criador do evento e a


declaração ãddress@f para fornecer o nome do manipulador de evento. A sintaxe das
declarações RemoveHandler será sempre compatível com a declaração ãddHandler
usada para começar a manipulação de eventos. Por exemplo:

Visual Basic

Copiar Código ?
#    þ!" . 

 " 
Manipulado Eventos Herdados de uma Classe Base
_erived classes²classes that inherit characteristics from a base class²can handle events raised by
their base class using the Handles MyBase statement.

cara manipular eventos de uma classe base

å? Declare um manipulador de eventos na classe derivada adicionando uma declaração


Handles MyBase. omedoeve to na declaração de seu evento manipulador de eventos,
onde omedoeve to é o nome do evento na classe base manipulada. Por exemplo:

Visual Basic

Copiar Código ?
 þ

O
þ


 "  O
"  O$(   
  
    
 % % 
 !
" þ



 þ

  þ


 
O
þ


 "    O$(  / 
    

*$O
!O
" 
        
 O
þ

 !
" 
" þ

Você também pode gostar